Algorithme de Havel-Hakimi

(Redirigé depuis Algorithme de Havel-Lakimi)

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 modifier

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 modifier

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 modifier

Références modifier

  1. (cs) [1] « 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)
  2. (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)