précédent suivant haut Contents Index

LES GRAPHES

Un graphe est en ensemble de noeuds reliés par des liens. Ce n'est plus un arbre dès qu'il existe deux parcours différents pour aller d'au moins un noeud à un autre. Un graphe est connexe lorsqu'il est possible de trouver au moins un parcours permettant de relier les noeuds deux à deux (un arbre est un graphe connexe, deux arbres forment un graphe non connexe). Un graphe est dit pondéré lorsqu'à chaque lien est associée une valeur (appelée poids). On utilisera un graphe pondéré par exemple pour gérer des itinéraires routiers (quelle est la route la plus courte pour aller d'un noeud à un autre), pour gérer des fluides (noeud reliés par des tuyauteries de diamètre différent) ou pour des simulations de trafic routier, pour simuler un circuit électrique, pour prévoir un ordonnancement dans le temps de tâches... Un graphe est dit orienté lorsque les liens sont unidirectionnels. Nous ne traiterons pas ici en détail les algorithmes associés aux graphes, mais nous aborderons quelques problèmes rencontrés.

On peut représenter un graphe de manière dynamique, comme les arbres (le nombre de liens par noeud est souvent variable). Une autre solution est de numéroter les N sommets, et d'utiliser une matrice carrée NxN, avec en ligne i et colonne j un 0 si les noeuds i et j ne sont pas reliés, ou le poids de la liaison sinon (1 pour les graphes non pondérés). Pour des graphes non orientés, la matrice est symétrique (par rapport à la diagonale), ce qui permet d'économiser de la mémoire mais peut compliquer les programmes (c'est la technique employée pour les éléments finis). Une représentation par matrice est surtout intéressante lorsqu'il y a beaucoup de liens (graphe presque complet), la représentation à l'aide de pointeurs étant moins gourmande en mémoire pour les graphes comportant peu de liens par noeud.

Un problème important est le parcours d'un graphe : il faut éviter les boucles infinies, c'est à dire retourner sur un noeud déjà visité et repartir dans la même direction. On utilise par exemple des indicateurs de passage (booléens), ou une méthode à jetons (on place des "jetons" dans différents noeuds bien choisis et on les fait suivre les liens). Une méthode souvent utilisée est de rechercher avant tout (et une seule fois) l'arbre recouvrant : c'est un arbre permettant de visiter tous les noeuds, n'utilisant que des liens existants dans le graphe (mais pas tous). Cet arbre recouvrant n'est évidement pas unique. En cas de graphe non connexe, il faut rechercher plusieurs arbres recouvrants.

On peut remarquer qu'un arbre recouvrant d'un graphe connexe à N sommets aura nécessairement N-1 liens. Pour les graphes pondérés, on peut rechercher l'arbre recouvrant de poids minimum (somme des poids des liens minimale). Différents algorithmes existent pour traiter ce problème.


précédent suivant haut Contents Index