subgraph


What's the Difference Between Subgraph Isomorphism and Subgraph Monomorphism?


In one of the projects I've worked on, the subject of isomorphism versus monomorphism came up.
A little background: I'm no expert on graph theory and have no formal training in it. But this topic is very important in chemistry, where chemists expect a particular kind of subgraph matching to take place in the structure search systems they use.
If a target graph A has n nodes and m edges, then a chemist would accept subgraph matches in which a query graph B had n nodes and m-1 edges. The only requirement would be that every edge in B should be present in A. For example, a linear chain of 6 nodes should match a cycle of 6 nodes.
Is this kind of matching isomorphism or monomorphism? Maybe something else altogether?
Let G1, G2 be graphs composed of sets of vertices and edges V1, V2 and E1, E2 respectively.
G2 is isomorphic to a subgraph of G1 iff there exists a one-one mapping between each vertex of V2 and a vertex in V1, and between each edge in E2 and some edge in E1. So to be isomorphic, you need to have an exact match, including if the graph includes more than one edge between nodes.
G2 is monomorphic iff there's such a mapping between vertices, and there exists an edge between all vertices in V2 for which there is a corresponding edge in V1. But so long as at least one edge exists, that's sufficient.
Here's a nice package description from comp.lang.python.
Monomorphism.
A monomorphism from one graph ("B") to another graph ("A") is equivalent to an isomorphism from B to a subgraph of A.
The example is saying that any n vertex path ("chain") is monomorphic to an n vertex cycle. It would also be monomorphic to a n+1 vertex cycle, or n+k for any k.
An undirected graph homomorphism h: H -> G is said to be a monomorphism when h on vertices is an injective function. As a graph homomorphism h of course maps edges to edges but there is no requirement that an edge h(v0)-h(v1) is reflected in H.
The case of directed graphs is similar.
There is a discrepancy between Math and CS terms here.
From math you get two terms:
subgraph isomorphism:
Let H = (VH, EH) and G = (V, E) be graphs. f : VH → V is a subgraph isomorphism if (u, v) ∈ EH, then (f(u), f(v)) ∈ E.
H is isomorphic to a subgraph of G
induced subgraph isomorphism:
Let H = (VH, EH) and G = (V, E) be graphs. f : VH → V is an induced subgraph isomorphism if (u, v) ∈ EH, then (f(u), f(v)) ∈ E. And if (u, v) is not and element of EH, then (f(u), f(v)) is not an element of E.
H is isomorphim to an induced subgraph of G
Definitions from http://theory.stanford.edu/~virgi/cs267/lecture1.pdf.
They are equivalent to what I found in "A First Course in Graph Theory."
Note that both of these are injective homomorphisms between graphs aka a graph monomorphism.
Moving to CS and specifically the subgraph isomorphism problem. To the best of my understanding a subgraph isomorphism algorithm determines if a function exists that satisfies (2) from above.
Graph monomorphism matches (1).
The CS definitions are from the VF2 algorithm, I do not know how widespread that usage is. While searching for the correct algorithm for a project it seems like there is still some ambiguity and not all projects use the same definitions.
Take this answer with a grain of salt http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.101.5342&rep=rep1&type=pdf
lists monomorphism as seperate from graph-subgraph isomorphism in the introduction, but in section 2 defines graph-subgraph isomorphism as conceptually identical to (1) which indicates I am missing something.

Related Links

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

Categories

HOME
phantom-dsl
fuelux
c++11
dns
nunit
formal-languages
google-cloud-functions
cublas
nsbundle
google-apps
dojo
babeljs
azure-container-service
mql5
32bit-64bit
google-chrome-app
why3
jxl
jsonpath
enterprise-architect
gruntfile
red5
windows-xp
href
gulp-watch
inno-download-plugin
interbase
gpio
android-sharedpreferences
entity-relationship-model
intersystems-cache
datastax-enterprise-graph
cppreference
vex
anki
dst
playstation-portable
catch-unit-test
hreflang
sammy.js
instantiation
hunspell
getlasterror
numpy-broadcasting
playframework-2.1
node-mssql
p4merge
tasm
android-exoplayer
procfile
lampp
datamaps
zenhub
reindex
wpas
java-bytecode-asm
excel-dna
filehandle
payload
d3-force-directed
django-1.10
taocp
angular2-testing
omxplayer
async.js
windows-azure-queues
beamer
firebase-security
data-protection
exim4
jbase
dynatree
pypiserver
ess
django-urls
sapscript
eoferror
viola-jones
airbrake
pyobjc
diff3
broadband
mass-assignment
beatsmusic
mruby
administration
tinyxml
memset
paste
maven-scm
android-usb
visual-studio-express
solace-mq
http-patch
windows-phone-8-sdk
beaker-testing
workitem
octal
diem
actiondispatch
chart-director
redis-py
frameworkelementfactory
boost-msm
hibernateexception
expression-blend-4
google-ajax-api
silent
dsl-tools
application-planning

Resources

Database Users
RDBMS discuss
Database Dev&Adm
javascript
java
csharp
php
android
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App