diff --git a/report/report.tex b/report/report.tex index 0ceebdc..0c90747 100644 --- a/report/report.tex +++ b/report/report.tex @@ -420,7 +420,13 @@ VF2 algorithm~\cite{cordella2004sub}, published in 2004. This algorithm is mostly Ullmann's algorithm, transcribed in a recursive writing, with the addition of five heuristics. \qtodo{Why not use it then?} -\todo{Describe Ullmann} +Ullmann is a widely used and fast algorithm for this problem. It makes an +extensive use of adjacency matrix description of the graph, and the initial +article takes advantage of the representation of those matrices as bitsets to +make extensive use of bitwise operations. + +The to-be-built permutation matrix is a $\card{needle} \times \card{haystack}$ +matrix, %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Performance} @@ -432,6 +438,8 @@ addition of five heuristics. \qtodo{Why not use it then?} There were a few observed cases where the algorithm tends to be slower on certain configurations. +\todo{More corner cases} + \paragraph{Split/merge trees.} A common pattern that tends to slow down the algorithm is split/merge trees. Those patterns occur when one wants to merge $n$ one bit wires into a single $n$ bits wire, or the other way around. @@ -444,9 +452,16 @@ tree of depth \eg{} 8, a node just below the root will need a signature of order 7 to have a different signature than another one at the same depth. With a signature of order up to 6, only other gates from the tree will be included in the signature when going down in the tree; the exact same gates will be -included above the tree's root. Thus, nothing will differentiate one gate from another while -the boundary of the tree is not reached (assuming the gates below the tree's -leaves are not all the same; if so, more levels will be needed). +included above the tree's root. Thus, nothing will differentiate one gate from +another while the boundary of the tree is not reached (assuming the gates below +the tree's leaves are not all the same; if so, more levels will be needed). + +As the notion of ``left child'' and ``right child'' cannot be used (since it +would rely on the order or description of the graph), there seems to be no good +way to discriminate those two nodes. Furthermore, the nodes are not totally +interchangeable: indeed, when checking for an equality between two such trees, +it does not matter which node is the left one; but once this is fixed, the +nodes on the layer below cannot be freely exchanged. \todo{Figure describing the problem}