Graphes 01 : Comprendre et modéliser un graphe

Un service de livraison veut relier son dépôt à plusieurs points de retrait. Avant de chercher le meilleur trajet, il faut décider ce que représente un point, une liaison et son coût. Cette décision paraît simple ; elle détermine pourtant les questions auxquelles le programme pourra répondre. Dans ce chapitre, nous construisons un modèle précis, puis nous apprenons à le lire sans confondre le dessin, les données et le problème posé.

1. Passer d'une situation à un graphe

Graphe. Un graphe est un ensemble de sommets accompagné de relations entre ces sommets. Un sommet représente un objet ; une arête représente une liaison sans sens imposé. On note souvent le graphe G = (V, E), où V contient les sommets et E les arêtes. Les lettres sont des étiquettes, sans signification numérique.

Pour notre réseau fictif, A représente le dépôt et B, C, D, E, F des points de retrait. Une liaison indique qu'un déplacement direct est autorisé dans le modèle. Elle ne signifie pas nécessairement qu'une route droite existe sur une carte. Deux points dessinés loin peuvent être reliés à faible coût ; leur position graphique sert seulement à rendre le schéma lisible.

On conserve volontairement peu d'informations. Le modèle ne contient ni horaires, ni embouteillages, ni stocks. Si ces informations deviennent indispensables, il faut les ajouter explicitement. Un algorithme correct sur un modèle incomplet peut fournir une mauvaise décision pratique. Commencez donc par écrire une phrase : « Un sommet représente…, une liaison signifie…, le coût mesure… ». Cette phrase protège contre bien des erreurs.

Graphe principal : six sommets et neuf arêtes pondérées.
Les coûts sont abstraits ; le dessin n’est pas une carte. Cliquer pour agrandir.

2. Sens de circulation et poids

Orientation et pondération. Dans un graphe orienté, une liaison est un arc ordonné u → v : elle autorise le passage de u vers v. Le passage inverse nécessite un autre arc. Dans un graphe pondéré, chaque liaison porte une valeur appelée poids. Un graphe peut être à la fois orienté et pondéré.

Un abonnement à un compte social est naturellement orienté : suivre quelqu'un n'implique pas être suivi en retour. Une liaison entre deux ordinateurs peut être modélisée sans orientation si la communication fonctionne dans les deux sens avec les mêmes contraintes. Il faut choisir selon le problème étudié, et non selon l'habitude de dessiner des flèches.

Dans notre exemple principal, les liaisons sont non orientées et les poids sont des unités de coût abstraites. Ce ne sont pas des kilomètres entre villes réelles. Le coût AB vaut 4 et le coût AC vaut 2. Nous supposerons que les coûts s'additionnent le long d'un trajet. Cette hypothèse conviendrait à une dépense, mais pas automatiquement à une probabilité ou à un débit : toutes les valeurs numériques ne s'additionnent pas.

Avant tout calcul, préciser le sens d'une liaison, l'unité du poids et l'opération qui combine les poids.

3. Décrire les voisinages et compter les liaisons

Voisin et degré. Deux sommets sont voisins lorsqu'une arête les relie directement. Le degré d'un sommet non orienté compte ses extrémités d'arêtes incidentes. Dans un graphe orienté, le degré entrant compte les arcs qui arrivent et le degré sortant ceux qui partent. Une boucle relie un sommet à lui-même.

Notre réseau possède les arêtes AB, AC, BC, BD, CD, CE, DE, DF et EF. Les voisins de A sont B et C. Les voisins de D sont B, C, E et F : son degré vaut donc 4. Les poids n'interviennent pas dans ce décompte. Une liaison coûteuse compte autant qu'une liaison bon marché.

Degrés du réseau
SommetVoisinsDegré
AB, C2
BA, C, D3
CA, B, D, E4
DB, C, E, F4
EC, D, F3
FD, E2

La somme des degrés vaut 18, soit deux fois les 9 arêtes. Pourquoi ? Chaque arête contribue une extrémité à chacun de ses deux sommets. On compte donc chaque liaison deux fois en parcourant tous les voisinages. Une boucle non orientée apporte également deux extrémités au même sommet. Dans le cas orienté, chaque arc apporte une unité au total des degrés entrants et une au total des degrés sortants.

Graphe non orienté : somme des degrés = 2 × nombre d'arêtes.

4. Distinguer trajet, cycle et connexité

Parcours et chemin simple. Un parcours est une succession de sommets reliés par des liaisons autorisées. Sa longueur compte les liaisons parcourues ; son coût additionne leurs poids. Ici, un chemin simple est un parcours sans sommet répété. Un cycle simple revient au sommet de départ sans répéter les autres sommets. Pour un graphe orienté, chaque déplacement respecte les flèches.

Le trajet A–B–D–F comporte 3 arêtes et coûte 15 unités. Le trajet A–C–B–D–E–F comporte 5 arêtes et coûte 13 unités. Le premier comporte moins d'étapes, mais le second coûte moins cher. Cette différence explique pourquoi un même réseau appelle plusieurs algorithmes : « moins de liaisons » et « coût total minimal » sont deux objectifs distincts.

Connexité. Un graphe non orienté est connexe si chaque paire de sommets peut être reliée par un parcours. Une composante connexe est un groupe maximal de sommets reliés entre eux. Un sommet isolé forme une composante à lui seul.

Notre réseau est connexe. Pour le vérifier, il suffit de partir de A et de découvrir tous les sommets ; nous automatiserons cette exploration avec BFS et DFS. Dans un graphe orienté, être relié en oubliant les flèches ne garantit pas de pouvoir circuler dans les deux sens. On parle de forte connexité lorsque chaque sommet du groupe peut atteindre tous les autres en respectant les arcs.

5. Reconnaître les familles utiles sans tout mélanger

Graphe simple, arbre et forêt. Un graphe simple ne contient ni boucle ni plusieurs arêtes entre une même paire de sommets. Un arbre est un graphe non orienté connexe sans cycle. Une forêt est un graphe non orienté sans cycle, éventuellement composé de plusieurs arbres.

Supprimer des liaisons peut conserver l'accès à tous les points tout en évitant les cycles. On obtient alors un arbre couvrant, c'est-à-dire un arbre qui garde tous les sommets du graphe de départ. Il ne faut pas confondre cette structure avec un trajet de livraison : un arbre décrit des liaisons installées, pas l'ordre dans lequel un véhicule les emprunte.

Deux autres questions classiques concernent les parcours. Un parcours eulérien utilise chaque arête exactement une fois. Un chemin hamiltonien visite chaque sommet exactement une fois. On compte les arêtes dans le premier cas et les sommets dans le second. Les critères et les difficultés algorithmiques diffèrent profondément ; connaître le degré des sommets ne suffit pas à résoudre toutes les questions de visite.

6. Préparer des données exploitables

Nous noterons n le nombre de sommets et m le nombre de liaisons. Cette convention servira à mesurer les ressources des algorithmes. Les étiquettes doivent rester stables : renommer C au milieu d'un calcul revient à modifier les données. Pour comparer des traces, nous examinerons les voisins par ordre alphabétique. Cet ordre rend les résultats reproductibles ; il n'est pas une règle de circulation.

Définir les sommets et leur signification
Définir les liaisons autorisées
Préciser orientation, poids et unité
Vérifier les extrémités de chaque liaison
Formuler exactement la question à résoudre

Lorsqu'un résultat surprend, revenez à cette préparation avant d'accuser l'algorithme. Un arc oublié peut rendre un sommet inaccessible. Une arête enregistrée dans un seul sens peut transformer involontairement le réseau en graphe orienté. Une valeur absente n'est pas un coût nul. Le prochain chapitre montre comment stocker ces distinctions sans ambiguïté.

À retenir. Le graphe représente les relations utiles à une question précise. Le dessin ne fixe ni les distances ni les coûts. Longueur et coût d'un trajet sont différents. Un arbre, un plus court chemin et un parcours utilisant toutes les arêtes répondent à des objectifs différents.

Exercices corrigés

Exercice 1 : Lire une modélisation

Un réseau de comptes représente « u suit v ». Faut-il orienter les liaisons ? Que peut-on conclure d'une liaison u → v ?

Voir le corrigéMasquer le corrigé

Il faut un arc orienté. Il indique uniquement que u suit v. Pour conclure que v suit u, il faut vérifier la présence de l'arc inverse. La proximité des comptes sur un dessin ne fournit aucune information supplémentaire.

Exercice 2 : Contrôler les degrés

Retrouvez le degré de C et expliquez pourquoi la somme des degrés compte chaque arête deux fois.

Voir le corrigéMasquer le corrigé

C est relié à A, B, D et E : son degré vaut 4. Une arête non orientée possède deux extrémités. Le décompte global ajoute une contribution à chaque extrémité, donc deux contributions par arête, indépendamment des poids.

Exercice 3 : Comparer deux objectifs

Comparez A–B–D–F et A–C–B–D–E–F selon le nombre d'arêtes puis selon le coût.

Voir le corrigéMasquer le corrigé

Le premier trajet utilise 3 arêtes et coûte 4 + 5 + 6 = 15. Le second utilise 5 arêtes et coûte 2 + 1 + 5 + 2 + 3 = 13. Minimiser les étapes ne minimise donc pas nécessairement la dépense.

Exercice 4 : Choisir la bonne question

Une équipe veut installer des câbles reliant tous les bâtiments avec un coût total minimal. Cherche-t-elle un chemin hamiltonien ?

Voir le corrigéMasquer le corrigé

Non. Elle cherche un ensemble de liaisons couvrant les bâtiments, donc un arbre couvrant minimal si le graphe est non orienté et connexe. Un chemin hamiltonien impose un ordre de visite sans répétition des sommets, contrainte absente du problème d'installation.

Voir le programme complet · Faire les 30 exercices du TD

Questions / Réponses

Aucune question. Soyez le premier à poser une question.
★ ★ ★ ★ ★
2 votes. Moyenne 5 sur 5.

Ajouter un commentaire

Anti-spam