Start explaining Ullmann
This commit is contained in:
parent
881fe54ef0
commit
34458bcc44
1 changed files with 19 additions and 4 deletions
|
@ -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
|
mostly Ullmann's algorithm, transcribed in a recursive writing, with the
|
||||||
addition of five heuristics. \qtodo{Why not use it then?}
|
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}
|
\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
|
There were a few observed cases where the algorithm tends to be slower on
|
||||||
certain configurations.
|
certain configurations.
|
||||||
|
|
||||||
|
\todo{More corner cases}
|
||||||
|
|
||||||
\paragraph{Split/merge trees.} A common pattern that tends to slow down the
|
\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
|
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.
|
$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
|
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
|
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
|
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
|
included above the tree's root. Thus, nothing will differentiate one gate from
|
||||||
the boundary of the tree is not reached (assuming the gates below the tree's
|
another while the boundary of the tree is not reached (assuming the gates below
|
||||||
leaves are not all the same; if so, more levels will be needed).
|
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}
|
\todo{Figure describing the problem}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue