diff --git a/benchmark.sh b/benchmark.sh new file mode 100755 index 0000000..9609360 --- /dev/null +++ b/benchmark.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +rm stats2 +for j in {1..10}; do + echo "run ${j}..."; + for i in {1..4}; do + ./hgraph -t bmark1haskell.N4000E80000adj bmark1haskell.N4000E80000adj.atr sampledata.p +RTS -N`echo "$i"` > graphs 2> stats2 && tail -n 2 graphs >> stats2; + echo -e "\n\n" >> stats2; + done; + echo -e "run ${j}:\n" >> stats2; +done diff --git a/doc/ausarbeitung/hgraph_doc.pdf b/doc/ausarbeitung/hgraph_doc.pdf index bf9fafe..b707dfd 100644 Binary files a/doc/ausarbeitung/hgraph_doc.pdf and b/doc/ausarbeitung/hgraph_doc.pdf differ diff --git a/doc/ausarbeitung/hgraph_doc.tex b/doc/ausarbeitung/hgraph_doc.tex index 88d5f1c..e504c56 100644 --- a/doc/ausarbeitung/hgraph_doc.tex +++ b/doc/ausarbeitung/hgraph_doc.tex @@ -198,8 +198,8 @@ Wir exportieren 2 Funktionen nach außen, die in der Lage sind, den Graphen zu e \medskip Die Funktion \texttt{maxDCB} übernimmt die eigentliche Berechnung, sodass wir diese im Detail besprechen. Zunächst jedoch geben wir einen kleinen Überblick über die Hilfsfunktionen im Hintergrund: \begin{description}[style=multiline,leftmargin=2.75cm,font=\bfseries] - \item[filterLayer] filtert eine Menge von $n$ Graphen, indem es Duplikate herausfiltert. \\ Laufzeit: $\mathcal{O}(n \log n)$. \todo{ist da mit drin, dass der Vergleich zweier Graphen nicht in O(1) geht?} - \item[constraint] überprüft, ob der Graph noch die Constraints erfüllt und wenn ja, wie diese aussehen. \\ Laufzeit: $\mathcal{O}(k)$ bei $k$ Attributen, da die Maximal- und Minimalwerte des Graphen tabelliert werden.\todo{korrekt? jetzt ja} + \item[filterLayer] filtert eine Menge von $n$ Graphen, indem es Duplikate herausfiltert. \\ Laufzeit: $\mathcal{O}(n \log n)$. + \item[constraint] überprüft, ob der Graph noch die Constraints erfüllt und wenn ja, wie diese aussehen. \\ Laufzeit: $\mathcal{O}(k)$ bei $k$ Attributen, da die Maximal- und Minimalwerte des Graphen tabelliert werden. \item[updateDensity] errechnet die Änderung der Dichte des Graphen anhand des hinzuzufügenden Punktes. \\ Laufzeit: $\mathcal{O}(m)$ bei $m$ Knoten im Ursprungsgraph, da die Graphendichten gespeichert werden. \item[reduceDim] ist eine interne Hilfsfunktion, die eine Dimension einer Array-Shape verwirft. \\ Laufzeit: $\mathcal{O}(1)$. \item[addablePoints] traversiert die Adjazenzmatrix und liefert alle mit einem Graphen verbundenen Knoten, die nicht selbst im Graphen enthalten sind. \\ Laufzeit: $\mathcal{O}(n \cdot m)$ bei $m$ Knoten im Ursprungsgraphen und einer Adjazenzmatrix $n\times n$. @@ -208,8 +208,6 @@ Die Funktion \texttt{maxDCB} übernimmt die eigentliche Berechnung, sodass wir d Laufzeit: $\mathcal{O}(n \cdot m \cdot (k + m))$ im worst-case einer voll besetzten Adjazenzmatrix. In der Praxis sind die Eingabegraphen kaum vernetzt und die Attributzahl $k$ ist klein, sodass sich die average-case-Laufzeit unter Berücksichtigung der alternativen Laufzeit von \texttt{addPoint} an $\mathcal{O}(n \cdot m \cdot k) \approx \mathcal{O}(n \cdot m)$ annähert. \end{description} -\todo[inline]{Laufzeit-Analyse ist doof ... ich überseh sicher was oder mache Fehler. Auch kann ich mit O-Notation nicht zum Ausdruck bringen, was ich eigentlich sagen wollte ... nämlich, dass der Algo zwar in n*n*n läuft, aber wir z.b. bei addPoint in n*m liegen KÖNNEN, wenn die sterne gut stehen..\\ -Ich denke, das wird jetzt klar :-)} \begin{lstlisting}[caption={Die maxDCB-Funktion},label=lst:maxDCB] -- | Calculates all maximum DCB. A maximum DCB is a densely connected bicluster that