I understand that the problem of matching two netlists could be reduced to the graph isomorphism problem which is NP-intermediate. Apart from that what are the complexity results of some of the currently used netlist matching algorithm?
|
TL;DR: The OP asked if the computational complexity of matching netlists is different from matching other types of graphs. It isn't because netlists are still GI-complete graphs. The computational complexity is still GI if you add the restriction to netlists, because netlists experience the same worst case scenarios than other types of graphs and computational complexity only looks at the worst case behavior. The only real thing that have all kinds of netlists in common is that they are heavily labeled. Within the set of all netlists there are of course cases that are easier and cases that are harder. In general the problem is easier if you have a graph with many different labels. I.e. a netlist of transistors where you only have n-types and p-types is harder to match than a netlist of gates where you have a larger number of cell types, which in turn is harder to match than a netlist for an FPGA architecture with N-input LUTs with \$2^{2^N}\$ different LUT configurations. When looking at the subgraph isomorphism problem (i.e. trying to find and extract a given sub circuit), you can give a max. polynomial for each given sub circuit. This is imo pretty intuitive: If I give you a specific circuit and ask you to write code that looks for this circuit you could simply encode the pattern by iterating over all candidates for As a side note: Algorithms that use a neighborhood matrix usually use the following encoding for the circuit: There is a node for each cell and a node for each net. A connection between two cells is therefore encoded as as two edges in the graph: one from A nice algorithm that can be extended easily to the needs of a specific problem domains is the Ullmann subgraph isomorphism algorithm. It is already pretty old and not the most efficient algorithm, but I think it is a very clear algorithm and learning it helps you to better understand the problem it solves. |
||||
|