HÉCART Olivier
MÉRÉ Aurélien
Page 5 sur 7
La complexité se décompose en deux parties : la complexité pour la suppression des arêtes, et la
complexité pour la recherche des cycles.
Complexité minimale
La complexité minimale se calcule dans le cas où l’on dispose d’un graphe connexe dont le degré de
chaque sommet est 2. Dans ce cas, le parcours du graphe s’effectue en v, où v est le nombre d’arêtes du graphe.
Comme chaque sommet ne dispose que de deux liens, la suppression d’une arête se fera en O(1) suivant
l’algorithme mis en place, présenté dans la section suivante. Comme il faut supprimer v arêtes, la suppression se
fera en 2v comparaisons (le lien est à supprimer sur chaque nœud). La complexité sera donc de l’ordre de 3v,
soit en O(v).
Complexité maximale
Suppression des arêtes : il y a v arêtes à supprimer, et la liste des arêtes contient au maximum (n-1)
pointeurs dans le cas des graphes que nous étudions, où n est le nombre de sommets du graphe. La complexité
maximale sera donc de v*(n-1). En réalité, elle est beaucoup plus faible, car d’une part le nombre d’arêtes liées à
un sommet diminue à chaque passage sur ledit sommet, et d’autre part (n-1) est le maximum que peut supporter
un sommet. En moyenne elle sera deux fois moindre.
Recherche de sommets dont le degré n’est pas nul : Il y a n sommets à vérifier, chacun pouvant
conduire à un nouvel appel récursif à la fonction. Toutefois, comme il y a un maximum de v arêtes sur le graphe,
et que chaque nouvel appel produit un cycle eulérien d’un minimum de 3 arêtes, on aura un maximum de v/3
appels pour n sommets, soit n*v/3. Toutefois, comme les cycles trouvés par l’algorithme ont en pratique une
taille supérieur à 3 arêtes, la complexité est beaucoup plus faible.
En tous les cas, la complexité maximale de l’algorithme sera donc de l’ordre de (n-1)*v+n*(v/3), soit
une complexité de l’ordre de O(v*n).
Complexité moyenne
Notre complexité moyenne sera donc de l’ordre de : O(v) < C << O(v*n)
Avec v le nombre d’arêtes du graphe, et n le nombre de sommets.
En pratique on trouve de l’ordre de a.v.log(v), où a est une variable dépendante de v et de n,
relativement faible. Notons toutefois qu’il s’agit d’une appréciation purement spéculative.
Types de données et fonctions
Classe Sommet
Notre graphe est réalisé par l’utilisation d’une classe Sommet. Une instance de cette classe contient toutes
les fonctions nécessaires pour l’ajout de liens avec d’autres sommets, la suppression de liens, la recherche de
liens éventuels, etc…
Avant de décrire la classe Sommet, précisons que dans notre routine principale, le graphe est représenté
sous la forme d’un tableau de classes Sommet, ce qui nous permet d’effectuer des traitements directement sur les
sommets, mais aussi sur l’ensemble avec une complexité en n.
La classe Sommet contient un tableau de pointeurs vers d’autres sommets. Ce tableau est mis à jour lors
de l’ajout et la suppression de liens. Une variable donne l’indice du dernier élément du tableau. Voici la liste des
fonctions prises en charge par une instance de la classe sommet :