subgraph


Is there any simple example to explain ullmann algorithm


Im a freshman in learning the graph theory. Im learning the (sub)graph isomorphism now. there are two important algorithms: Ullmann's algorithm and vf2.
I have read the paper of Ullmann`s: An algorithm for Subgraph Isomorphism. I also googled it and google gave me a lot of applications of it, but I cannot understand the procedures of the algorithm.
Could you give me a simple explanation?
This answer to a related question gives a source code of Ullmann's algorithm.
These slides give an example, but the main ingredient of the algorithm is mentioned only without an example on slide "Ullmann’s Algorithm V2".
So I will give an example below. We want to know whether GB has a subgraph isomorphic to GA. That is, we will be trying to map vertices of GA to vertices of GB so that edges of GA are mapped on edges of GB.
Note that both the original paper and the slides use a matrix, called M, but the code does not. That's because the matrix represents the same what possible_assignments[i] represent in the code. M[i][j] is 1 exactly if the i-th vertex can be mapped to the j-th vertex of GB. I will use candidates(u) etc. for the set of vertices of GB, where a vertex u of GB can be mapped.
First observation is that a vertex of GA can only be mapped to a vertex of GB of at least as large degree. So initially, candidates(u) = candidates(v) = {a,b,e,f,g}, candidates(w) = {f} and candidates of z are all the vertices of GB.
Now is the first time we do the "refine M" procedure, which is the main ingredient of the Ullmann's algorithm. That is, we check that whenever vertex x of GB is among candidates for a vertex y of GA, then every neighbor of y has at least one candidate among neighbors of x. If this check fails, then we remove x from candidates of y. We check for these removals until no further removals are possible.
For example, h is among candidates for z. However, w is a neighbor of z, but none of the neighbors of h (that is, g) is among cadidates(w)={f}. Therefore we will never be able to map z to h, because the edge {w,z} would be mapped to a non-edge. So we can safely remove h from candidates(z). The result of the refinement is: candidates(u) = candidates(v) = candidates(z) = {a,e,g} and candidates(w) = {f}.
Now we start backtracking.
We first try mapping u to a. That is, we set candidates(u) = {a} and remove a from the other candidate sets. Refine finds out that neither e nor g is a neighbor of a and so we remove e and g from candidates(v). This leaves candidates(v) empty and so we return from this branch; undoing the changes made to candidates.
Now, we try mapping u to e. Again, candidates(v) will end up empty.
Finally, we try mapping u to g with the same result.
We conclude that GA is not a subgraph of GB. Without having to try all the 8*7*6*5 assignments.
I forgot that Ullmann initially orders the vertices of GA in the order of decreasing degree. But it will not make much difference - we would only first find out that w can only be mapped to f and then we would continue branching on u with exactly the same results as we got.

Related Links

Is there any simple example to explain ullmann algorithm
What's the Difference Between Subgraph Isomorphism and Subgraph Monomorphism?

Categories

HOME
design-patterns
checkstyle
c99
ns-3
twig
angular-formly
3d
knitr
rom
rds
parameters
emscripten
onclick
interpolation
maxscript
mapbox
boto3
rcloud
categorical-data
owin
project-intu
cumulocity
package-managers
esoteric-languages
atlassian-stash
intershop
cfml
cgbitmapcontext
monit
perlbrew
expressionengine3
pic32
appirater
intersystems-cache
quantlib
iis-express
autodesk-designautomation
aws-codecommit
xbox
anki
wacom
dsx-desktop
hibernate-search
processwire
health-monitoring
p4merge
spring-mvc-test
ogc
azure-arm
apriori
wmp
servermanager
facebook-pixel
scalding
java-6
quicktime
renaming
branch-prediction
winusb
microstation
segment-io
mongodb-php
mapinfo
swizzling
query-by-example
aspen
phpgrid
concurrentmodification
roadkill-wiki
pax-exam
toolkit
slash
batik
snackbar
diff3
xmltype
procedural-programming
showdialog
browserify-shim
cocos3d
appserver
entry-point
insight.database
ss7
verold
functional-java
dot42
radiant
file-not-found
websphere-esb
high-resolution
ice-cube
cocoalibspotify-2.0
cnf
node-blade
abstract-data-type
epiceditor
insert-id
fb.ui
patricia-trie
qtconcurrent
adobe-media-server
listitem
garbage
boost-signals
jdb
fitbounds
box2d-iphone
jquery-tools
exponentiation
clrstoredprocedure
hbm2java

Resources

Encrypt Message