
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 Oe√nlog 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 vjvk∈E(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 vi−1pour 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 mˆ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 degr´es 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 proc´edure 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