Algorithmique et Programmation
Projet : Heuristique de Weisfeiler-Lehman pour l’isomorphisme de graphe
Ecole normale sup´erieure
D´epartement d’informatique
td-algo@di.ens.fr
2014-2015
Deux graphes sont isomorphes s’il est possible de renomer les sommets du premier de telle mani`ere
qu’on obtienne le deuxi`eme. Plus formellement, deux graphes non-orient´es G1et G2sont isomorphes s’il
existe une bijection ρ:V(G1)V(G2) telle que xy E(G1) ´equivaut `a ρ(x)ρ(y)E(G2). Par exemple,
les 5 graphes suivants sont tous isomorphes :
On ne connaˆıt pas d’algorithme polynomial permettant de d´eterminer si deux graphes sont iso-
morphes. Il existe un algorithme sous-exponentiel, en Oenlog n[?]. Cet algorithme est difficile `a
impl´ementer efficacement, en partie parce qu’il repose de fa¸con cruciale sur la th´eorie des groupes de
permutations.
Cependant, on dispose de plusieurs techniques (on dit des“heuristiques”) qui permettent de r´esoudre la
plupart des instances du probl`eme efficacement, et qui sont en pratique bien plus efficace que l’algorithme
sous-exponentiel sauf dans des cas tr`es particuliers. Il est en fait relativement difficile de fabriquer des
graphes qui mettent simultan´ement toutes ces techniques `a la peine (cf. [?]).
1 Backtracking et partition des sommets
Backtracking. Nous pouvons tenter de trouver un isomorphisme ρde fa¸con gloutonne. Nous consid´e-
rons les sommets du premier dans l’order (disons v1,...,vn) et nous devinons son image dans le deuxi`eme
graphe. `
A chaque fois que nous avons une image ρ(vi) tentative d’un sommet vi, nous testons la condition
d’isomorphisme sur les ipremiers sommets. C’est-`a-dire, nous regardons si vjvkE(G1)ρ(vj)ρ(vk)
E(G2) pour j < k i.
Si c’est le cas, nous continuons et devinant l’image de vi+1. Sinon, nous tentons ce test avec une autre
image de vi. Si tous les tests ´echouent, nous retournons au sommet pr´ec´edant vi1pour lui trouver une
nouvelle image (ce retour au sommet pr´ec´edent donne le nom de backtracking `a cette m´ethode).
Si aucun isomorphisme existe entre les deux graphes en entr´ee, ce algorithme glouton peut faire O(n!)
tests de validit´e de ρsur les ipremier sommets (“l’isomorphisme partiel” que l’algorithme est en train
de construire).
Partition des sommets. Pour reduire le nombre de tests que fait l’algorithme glouton, nous utilisons
un certificat “n´egatif” de non-isomorphisme. Par exemple, un isomorphisme envoie tout sommet v`a un
sommet de mˆeme degr´e. Donc si les degr´es du premier graphe (consid´er´e comme un multi-ensemble) sont
diff´erents des degr´es du deuxi`eme graphe, alors aucun isomorphisme existe.
Cette remarque sugg`ere d´ej`a une am´elioration `a l’algorithme : on peut partitioner les sommets des
deux graphes selon leur degr´e et seulement choisir des images de eme degr´e.
Allons plus loins. Un sommet de degr´e 3 avec des voisins de degr´es 1,1 et 2 ne peut avoir comme
image un sommet (de degr´e 3) avec voisins de degr´es 1,2 et 2. Cela nous permet de diviser les sommets
d’un mˆeme degr´e en des parts encore plus petites et un isomorphisme envoie seulement un sommet d’une
part `a un sommet de la mˆeme part dans le deuxi`eme graphe. Par exemple, un sommet avec des voisins
de deges 1,1 et 2 peut seulement ˆetre envoy´e sur un sommet avec des voisins de degr´es 1,1 et 2.
Et nous pouvons r´ep´eter cette proedure pour diviser encore plus finement chaque part, ce jusqu’`a
ce que l’on obtienne aucun rafinement propre durant une it´eration. Ces rafinements reduisent le nombre
d’images potentiels `a rechercher pour chaque sommet. Nous appellons cette derni`ere partition des som-
mets un rafinement stable de la partition initiale sur les degr´es.
1
Un sommet de degr´e 3 peut avoir aucune image possible si le deuxi`eme graphe n’a pas de sommets
de degr´e 3. De mˆeme lors du rafinement on peut se retrouver avec une part sans image (part correspon-
dante) dans le cas o`u on peut conclure qu’aucun isomorphisme n’existe. On dit que les partitions sont
incompatibles dans ce cas.
Finalement, lorsque nous devinons l’image d’un sommet dans l’algorithme backtracking, nous pouvons
mettre le sommet tout seul dans sa propre part (et mettre son image devin´e dans une part correspon-
dante). Cela correspond `a un deuxi`eme type de rafinement. Ensuite, nous pouvons chercher un rafinement
stable de ce rafinement. On appel ce esult une partition stable (de G1, G2et ρ).
De plus, l’ordre sur les sommets dans G1n’a pas besoin d’ˆetre sp´ecifi´ee d’avance. En effet, on peut
prendre n’importe quel sommet dont l’image n’est pas encore d´efinie.
L’ensemble d’heuristique Weisfeiler-Lehman consiste `a utiliser une telle partition dans l’algorithme
glouton.
1: function Weisfeiler-Lehman1(G1, G2, ρ)
2: Si ρest compl`etement sp´ecifi´e, return ρ
3: Construire une partition stable pour G1, G2, ρ
4: Si les partitions sont incompatibles, return false
5: if il existe un sommet ude G1dont l’image n’est pas sp´ecifi´e par ρet qui est contenu dans une
part {u}(de taille 1) dans G1correspondant `a {v}dans G2then
6: ρ=ρ(u7→ vpour chaque pair u, v avec cette propri´et´e)
7: Tester si ρest un isomorphisme “partiel” (entre les sommets de son domaine et codomaine).
Si non, return false
8: return Weisfeiler-Lehman1(G1, G2, ρ)
9: else
10: Choisir une part P1dans G1(correspondant `a P2dans G2) et un sommet udans P1
11: for all vP2do
12: ρρ(u7→ v)
13: Tester si ρest un isomorphisme“partiel”(entre les sommets de son domaine et codomaine).
Si non, return false
14: Calculer Weisfeiler-Lehman1(G1, G2, ρ). Si le r´esultat n’est pas false, le retourner
15: end for
16: return false
17: end if
18: end function
Je ne suis pas absolument certain que les tests ligne 7 et 13 soient indispensables, mais je n’en suis pas
sˆur. On peut envisager plusieurs mani`eres de choisir le sommet uligne 10. Le plus naturel semble ˆetre de
choisir un sommet qui porte la couleur la moins fr´equente (pour limiter le nombre de sous-cas `a tester).
Une solution alternative pourrait ˆetre de choisir le sommet xavec un nombre de voisin le plus ´equilibr´e
entre les images d´ej`a sp´ecifi´es et les sommet du deuxi`eme graphe sans pr´eimage.
2 Travail demand´e
Vous devez ´ecrire un programme qui teste si deux graphes sont isomorphes. Vu que l’algorithme
peut ne pas avoir un comportement polynomial, on attachera une certaine importance `a la qualit´e et `a
l’efficacit´e de l’impl´ementation (l’id´ee, c’est qu’il faut que ¸ca aille vite). On la testera sur des graphes
“durs” (par exemple, des graphes dont tous les noeuds ont le mˆeme degr´e).
1. Impl´ementer un algorithme qui teste si une bijection ρen entr´ee est un isomorphisme.
2. Impl´ementer l’algorithme backtracking glouton (sans utiliser de partiton de sommets).
3. Impl´ementer l’algorithme backtracking glouton avec paritionnement sur les degr´es seulement.
4. Impl´ementer un algorithme qui trouve le partitionnement stable d’un graphe `a partir d’un parti-
tionnement initiale.
5. Impl´ementer l’algorithme d’isomorphisme avec paritionnement stable.
2.1 Entee et sortie
Votre programme doit lire deux graphes (dont les sommets sont num´erot´es de 0 `a n1)
Votre programme devra r´epondreoui”ou“non”, et si oui, afficher la correspondance entre les num´eros
des sommets des deux graphes.
2
3 Glossaire
On rappelle qu’´etant donn´e un sous-ensemble HV, le sous-graphe induit par Hest le graphe dont
les sommets sont Het les arˆetes sont les arˆetes de G= (V, E) qui relient l’ensemble des sommets de H
(c’est en quelque sorte la “restriction de G`a H). On note Γ(x) l’ensemble des sommets adjacents `a x,
et on note Xle compl´ementaire (dans Vla plupart du temps) d’un ensemble. Le degr´e d’un noeud xest
la cardinalit´e de Γ(x).
R´ef´erences
3
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!