diff --git a/documents/DYCOS/DYCOS-Algorithmus.tex b/documents/DYCOS/DYCOS-Algorithmus.tex index f80e14f..88257e0 100644 --- a/documents/DYCOS/DYCOS-Algorithmus.tex +++ b/documents/DYCOS/DYCOS-Algorithmus.tex @@ -100,7 +100,18 @@ Die Vokabularbestimmung kann zu jedem Zeitpunkt $t$ durchgeführt werden, muss es aber nicht. In \cref{alg:DYCOS} wird der DYCOS-Algorithmus als -Pseudocode vorgestellt. +Pseudocode vorgestellt: +In \cref{alg1:l8} wird für jeden unbeschrifteten Knoten +durch die folgenden Zeilen eine Beschriftung gewählt. + +\Cref{alg1:l10} führt $r$ Random Walks durch. +In \cref{alg1:l11} wird eine temporäre Variable für den aktuell +betrachteten Knoten angelegt. + +In \cref{alg1:l12} bis \cref{alg1:l21} werden einzelne Random Walks +der Länge $l$ durchgeführt, wobei die beobachteten Beschriftungen +gezählt werden und mit einer Wahrscheinlichkeit von $p_S$ ein +struktureller Sprung durchgeführt wird. \begin{algorithm} \begin{algorithmic}[1] @@ -112,20 +123,23 @@ Pseudocode vorgestellt. \Ensure Klassifikation von $V_t \setminus V_{L,t}$\\ \\ - \ForAll{Knoten $v \in V_t \setminus V_{L,t}$} - \State $d \gets $ defaultdict - \For{$i = 1, \dots,r$} - \State $w \gets v$ - \For{$j= 1, \dots, l$} + \ForAll{Knoten $v \in V_t \setminus V_{L,t}$}\label{alg1:l8} + \State $d \gets $ leeres assoziatives Array + \For{$i = 1, \dots,r$}\label{alg1:l10} + \State $w \gets v$\label{alg1:l11} + \For{$j= 1, \dots, l$}\label{alg1:l12} \State $sprungTyp \gets \Call{random}{0, 1}$ \If{$sprungTyp \leq p_S$} \State $w \gets$ \Call{SturkturellerSprung}{$w$} \Else \State $w \gets$ \Call{InhaltlicherMehrfachsprung}{$w$} \EndIf - \State $w \gets v.\Call{GetLabel}{ }$ \Comment{Zähle die Beschriftung} - \State $d[w] \gets d[w] + 1$ - \EndFor + \State $beschriftung \gets w.\Call{GetLabel}{ }$ + \If{$!d.\Call{hasKey}{beschriftung}$} + \State $d[beschriftung] \gets 0$ + \EndIf + \State $d[beschriftung] \gets d[beschriftung] + 1$ + \EndFor\label{alg1:l21} \EndFor \If{$d$ ist leer} \Comment{Es wurde kein beschrifteter Knoten gesehen} @@ -151,7 +165,8 @@ verwaltet der DYCOS-Algorithmus zwei weitere Datenstrukturen: \item Für jeden Knoten $v \in V_t$ werden die vorkommenden Wörter, die auch im Vokabular $W_t$ sind, und deren Anzahl gespeichert. Das könnte z.~B. über ein - assoziatives Array geschehen. Wörter, die nicht in + assoziatives Array (auch \enquote{dictionary} oder + \enquote{map} genannt) geschehen. Wörter, die nicht in Texten von $v$ vorkommen, sind nicht im Array. Für alle vorkommenden Wörter ist der gespeicherte Wert zum Schlüssel $w \in W_t$ die Anzahl der Vorkommen von @@ -161,13 +176,6 @@ verwaltet der DYCOS-Algorithmus zwei weitere Datenstrukturen: Diese Liste wird bei den inhaltlichen Mehrfachsprung, der in \cref{sec:sprungtypen} erklärt wird, verwendet. - \item An einigen Stellen macht ein assoziatives Array, auch - \enquote{dictionary} oder \enquote{map} genannt, Sinn. - Zustätzlich ist es nützlich, wenn diese Datenstruktur für - unbekannte Schlüssel keinen Fehler ausgibt, sondern für diese - Schlüssel den Wert 0 annimmt. Eine solche Datenstruktur - wird in Python \texttt{defaultdict} genannt und ich werde - im Folgenden diese Benennung beibehalten. \end{itemize} \input{Sprungtypen} diff --git a/documents/DYCOS/DYCOS.pdf b/documents/DYCOS/DYCOS.pdf index a568568..f6097b0 100644 Binary files a/documents/DYCOS/DYCOS.pdf and b/documents/DYCOS/DYCOS.pdf differ diff --git a/documents/DYCOS/README.md b/documents/DYCOS/README.md index 152fc3c..390506e 100644 --- a/documents/DYCOS/README.md +++ b/documents/DYCOS/README.md @@ -1,3 +1,5 @@ +About +===== Ausarbeitung zum Proseminar "Netzwerkanalyse" am KIT. Die Ausarbeitung soll 10-12 Seiten haben und die Präsentation @@ -8,5 +10,4 @@ TODO * Abschnitt "Problemstellung" überarbeiten * Algorithmen erklären -* Warum sind Stellenangaben überflüssig? * Algorithmus 4, S. 9 diff --git a/documents/DYCOS/Sprungtypen.tex b/documents/DYCOS/Sprungtypen.tex index dab974c..fe1a057 100644 --- a/documents/DYCOS/Sprungtypen.tex +++ b/documents/DYCOS/Sprungtypen.tex @@ -80,28 +80,31 @@ Wortknoten entspricht ausgewählt und schließlich zurückgegeben. \label{alg:DYCOS-content-multihop} \begin{algorithmic}[1] \Procedure{InhaltlicherMehrfachsprung}{Knoten $v \in V_T$, $q \in \mathbb{N}$} - \State $reachableNodes \gets$ defaultdict\label{alg:l2} + \State $erreichbareKnoten \gets$ leeres assoziatives Array\label{alg:l2} \ForAll{Wortknoten $w$ in $v.\Call{getWordNodes}{ }$} \ForAll{Strukturknoten $x$ in $w.\Call{getStructuralNodes}{ }$} - \State $reachableNodes[x] \gets reachableNodes[x] + 1$ + \If{$!erreichbareKnoten.\Call{hasKey}{x}$} + \State $erreichbareKnoten[x] \gets 0$ + \EndIf + \State $erreichbareKnoten[x] \gets erreichbareKnoten[x] + 1$ \EndFor \EndFor\label{alg:l5} - \State \label{alg:l6} $T \gets \Call{max}{reachableNodes, q}$ + \State \label{alg:l6} $T \gets \Call{max}{erreichbareKnoten, q}$ \\ \State \label{alg:l8} $s \gets 0$ \ForAll{Knoten $x \in T$} - \State $s \gets s + reachableNodes[x]$ + \State $s \gets s + erreichbareKnoten[x]$ \EndFor - \State $relativeFrequency \gets $ Dictionary + \State $relativeHaeufigkeit \gets $ leeres assoziatives Array \ForAll{Knoten $x \in T$} - \State $relativeFrequency \gets \frac{reachableNodes[x]}{s}$ + \State $relativeHaeufigkeit \gets \frac{erreichbareKnoten[x]}{s}$ \EndFor\label{alg:l13} \\ \State \label{alg:15} $random \gets \Call{random}{0, 1}$ \State $r \gets 0.0$ \State $i \gets 0$ \While{$s < random$} - \State $r \gets r + relativeFrequency[i]$ + \State $r \gets r + relativeHaeufigkeit[i]$ \State $i \gets i + 1$ \EndWhile