Algorithme de Havel-Hakimi
En théorie des graphes, l'algorithme de Havel-Hakimi est un algorithme résolvant le problème de la réalisation d'un graphe, c'est-à -dire, étant donné une liste d'entiers positifs ou nuls, déterminer s'il existe un graphe simple dont les degrés sont exactement cette liste. Si oui, la liste est dite graphique. L'algorithme construit un graphe solution s'il en existe un, ou prouve qu'il n'existe aucun. Cette construction est basée sur un algorithme récursif, publié par Havel en 1955[1] puis Hakimi en 1962[2].
L'algorithme
L'algorithme est basé sur le théorème suivant.
Soit une liste finie et décroissante d'entiers positifs ou nuls. Alors est graphique si et seulement si la liste ne contient que des nombres positifs ou nuls, et est graphique.
En effet, si est graphique, alors il existe un graphe dont les degrés des sommets sont . En rajoutant à ce graphe un sommet relié aux premiers sommets, on aboutit à un graphe dont les degrés sont .
Inversement, s'il existe un graphe dont les degrés sont , soit un tel graphe et un sommet de degré maximal dans . On supposera aussi qu'on a choisi et de telle sorte que la somme des degrés des voisins de soit maximale (c'est possible car il n'y a qu'un nombre fini de graphes de cardinal fixé). Supposons par l'absurde qu'il existe un sommet , non relié à , et de degré strictement supérieur à un voisin quelconque de . On sait alors qu'il existerait un sommet (différent des trois autres) tel que est relié à mais pas . On peut alors échanger les arêtes et en et , la liste des degrés obtenus ne changerait alors pas, alors que la somme des degrés des voisins de a augmenté strictement, ce qui est absurde. Ainsi, éventuellement en réordonnant les sommets (en cas d'égalité), on peut trouver dont les degrés correspondent à la liste et tel que les voisins de sont exactement les premiers sommets de la liste. Le graphe obtenu alors en supprimant a des degrés correspondant à la liste .
Ainsi, pour une liste de , on devra appliquer au plus fois l'algorithme en remplaçant simplement par . Notons qu'il peut-être nécessaire de réordonner cette liste à nouveau au cours de l'algorithme. La liste est graphique si on ne rencontre aucun nombre négatif dans au cours de l'algorithme.
Exemple d'implémentation en Python
def graphique(liste):
"""Renvoie True si liste est une liste de degrés d'un graphe, et False sinon."""
li = sorted(liste)
while li != []:
d = li.pop()
if d > len(li):
return False
for k in range(len(li)-d, len(li)):
li[k] -= 1
if li[k] < 0:
return False
li.sort()
return True
Notes et références
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Havel–Hakimi algorithm » (voir la liste des auteurs).
Références
- (cs) « A remark on the existence of finite graphs » de Havel Václav, 1955, dans « Časopis pro pěstovánà matematiky » vol. 80 (pages 477 à 480)
- (en) « On realizability of a set of integers as degrees of the vertices of a linear graph » de S. L. Hakimi, 1962, dans Journal of the Society for Industrial and Applied Mathematics vol. 10 (pages 496 à 506)