update 3, not finished
authorMart Lubbers <mart@martlubbers.net>
Mon, 2 Feb 2015 11:37:06 +0000 (12:37 +0100)
committerMart Lubbers <mart@martlubbers.net>
Mon, 2 Feb 2015 11:37:06 +0000 (12:37 +0100)
thesis2/3.methods.tex

index b02e707..2f671be 100644 (file)
@@ -42,24 +42,31 @@ then added as a word. The nodelists are then sent to the actual algorithm to be
 converted to a graph representation.
 
 \section{Minimizing DAWGs}
 converted to a graph representation.
 
 \section{Minimizing DAWGs}
+\subsection{Datastructure}
 We represent the user generated patterns as DAWGs by converting the node-lists
 to DAWGS. Normally DAWGs have as edgelabels letters from an alphabet, in our
 case the DAWGs alphabet contains all letters, whitespace and punctuation but
 We represent the user generated patterns as DAWGs by converting the node-lists
 to DAWGS. Normally DAWGs have as edgelabels letters from an alphabet, in our
 case the DAWGs alphabet contains all letters, whitespace and punctuation but
-also the specified user markers. DAWGs are a graph but by using them as an
-automaton we can check if a word is accepted by the automaton, or in other
-words, if the word matches the specified pattern. The first algorithm to
-generate DAWGs from node-lists was proposed by Hopcroft et
+also the specified user markers which can be multiple characters in length.
+
+DAWGs are graphs but due to the constraints we can check if a match occurs by
+checking if a path exists that creates the word by concatenating all the edge
+labels. The first algorithm to
+generate DAWGs from words was proposed by Hopcroft et
 al\cite{Hopcroft1971}. It is an incremental approach in generating the graph.
 al\cite{Hopcroft1971}. It is an incremental approach in generating the graph.
-Meaning that entry by entry the graph was built. The only constraint that the
-algorithm has is that the entries must be sorted lexicographically. Later on
-Daciuk et al.\cite{Daciuk2000} improved on the original algorithm and their
-algorithm is the algorithm we used to minimize or optimize our DAWGs.
+Meaning that entry by entry the graph will be expanded. Hopcrofts algorithm has
+the constraint of lexicographical ordering. Later on Daciuk et
+al.\cite{Daciuk2000} improved on the original algorithm and their algorithm is
+the algorithm we used to minimize our DAWGs. A minimal graph is a graph $G$ for
+which there is no graph $G'$ that has less paths and $\mathcal{L}(G)=\mathcal{L
+}(G')$ where $\mathcal{L}(G)$ is the set of all words present in the DAWG. 
+
+\subsection{Algorithm}
 
 Pseudocode for the algorithm can be found in Listing~\ref{pseudodawg}.
 
 Incrementally node-lists are added to create a graph. For example in
 {Subgraphs in Figure}~\ref{dawg1} visualizes the construction of the
 
 Pseudocode for the algorithm can be found in Listing~\ref{pseudodawg}.
 
 Incrementally node-lists are added to create a graph. For example in
 {Subgraphs in Figure}~\ref{dawg1} visualizes the construction of the
-DAWG from the entries: \texttt{a.bc}, \texttt{a,bc} and \texttt{a,bd}.
+DAWG from the entries: \texttt{aibc}, \texttt{aibc} and \texttt{ajbd}.
 
 In SG0 the graph is only the null graph, described by
 $G=(\{q_0\},\{q_0\},\{\}\{\})$ and does not contain any entries.
 
 In SG0 the graph is only the null graph, described by
 $G=(\{q_0\},\{q_0\},\{\}\{\})$ and does not contain any entries.
@@ -109,10 +116,10 @@ the DAWG is still optimal.
                q46 [label="q6"];
                n4 -> q40[label="SG4"];
                q40 -> q41[label="a"];
                q46 [label="q6"];
                n4 -> q40[label="SG4"];
                q40 -> q41[label="a"];
-               q41 -> q42[label=","];
+               q41 -> q42[label="i"];
                q42 -> q43[label="b"];
                q43 -> q44[label="c"];
                q42 -> q43[label="b"];
                q43 -> q44[label="c"];
-               q41 -> q45[label="."];
+               q41 -> q45[label="j"];
                q45 -> q46[label="b"];
                q46 -> q44[label="d"];
                q46 -> q44[label="c"];
                q45 -> q46[label="b"];
                q46 -> q44[label="d"];
                q46 -> q44[label="c"];
@@ -122,15 +129,15 @@ the DAWG is still optimal.
                q31 [label="q1"];
                q32 [label="q2"];
                q33 [label="q3"];
                q31 [label="q1"];
                q32 [label="q2"];
                q33 [label="q3"];
-               q34 [label="q4",shape=doublecircle];
+               q34 [label="q4"ishape=doublecircle];
                q35 [label="q5"];
                n3 -> q30[label="SG3"];
                q30 -> q31[label="a"];
                q35 [label="q5"];
                n3 -> q30[label="SG3"];
                q30 -> q31[label="a"];
-               q31 -> q32[label=","];
+               q31 -> q32[label="i"];
                q32 -> q33[label="b"];
                q33 -> q34[label="c"];
                q32 -> q33[label="b"];
                q33 -> q34[label="c"];
-               q33 -> q34[label="d",constraint=false];
-               q31 -> q35[label="."];
+               q33 -> q34[label="d"iconstraint=false];
+               q31 -> q35[label="j"];
                q35 -> q33[label="b"];
 
                n2 [style=invis];
                q35 -> q33[label="b"];
 
                n2 [style=invis];
@@ -138,14 +145,14 @@ the DAWG is still optimal.
                q21 [label="q1"];
                q22 [label="q2"];
                q23 [label="q3"];
                q21 [label="q1"];
                q22 [label="q2"];
                q23 [label="q3"];
-               q24 [label="q4",shape=doublecircle];
+               q24 [label="q4"ishape=doublecircle];
                q25 [label="q5"];
                n2 -> q20[label="SG2"];
                q20 -> q21[label="a"];
                q25 [label="q5"];
                n2 -> q20[label="SG2"];
                q20 -> q21[label="a"];
-               q21 -> q22[label=","];
+               q21 -> q22[label="i"];
                q22 -> q23[label="b"];
                q23 -> q24[label="c"];
                q22 -> q23[label="b"];
                q23 -> q24[label="c"];
-               q21 -> q25[label="."];
+               q21 -> q25[label="j"];
                q25 -> q23[label="b"];
 
                n1 [style=invis];
                q25 -> q23[label="b"];
 
                n1 [style=invis];
@@ -153,10 +160,10 @@ the DAWG is still optimal.
                q11 [label="q1"];
                q12 [label="q2"];
                q13 [label="q3"];
                q11 [label="q1"];
                q12 [label="q2"];
                q13 [label="q3"];
-               q14 [label="q4",shape=doublecircle];
+               q14 [label="q4"ishape=doublecircle];
                n1 -> q10[label="SG1"];
                q10 -> q11[label="a"];
                n1 -> q10[label="SG1"];
                q10 -> q11[label="a"];
-               q11 -> q12[label=","];
+               q11 -> q12[label="i"];
                q12 -> q13[label="b"];
                q13 -> q14[label="c"];
 
                q12 -> q13[label="b"];
                q13 -> q14[label="c"];