Graphes et représentations
Modéliser un réseau orienté ou non orienté, écrire ses successeurs et ses prédécesseurs et construire sa matrice d’adjacence.
Environ 40 minutes
- Choisir sommets et liens pour modéliser une situation
- Passer des listes de successeurs à une matrice
- Distinguer arcs, arêtes, voisins, successeurs et prédécesseurs
Un trajet possible de A vers B autorise-t-il forcément le retour de B vers A ?
Une route à sens unique, un abonnement à une publication et une liaison réciproque ne décrivent pas la même relation. Un graphe permet d’expliciter les objets et les liens utiles. Sa représentation en mémoire doit conserver ces choix. Tu vas relier un dessin, un dictionnaire de successeurs et une matrice. Prérequis : listes imbriquées, dictionnaires, indices et boucles. Les parcours et les recherches de chemins seront étudiés dans un autre chapitre.
1. Un graphe représente des relations choisies
Un graphe possède des sommets et des liens. Les sommets représentent les objets retenus dans le modèle : arrêts, pages, personnes ou tâches. Dans un graphe non orienté, une arête relie deux sommets sans distinguer un départ et une arrivée. Dans un graphe orienté, un arc va d’un sommet vers un autre. Un arc de u vers v ne donne pas automatiquement un arc de v vers u. Nous travaillons ici avec des graphes simples, sans arcs multiples pour une même paire ordonnée, et non pondérés. Les graphes plus généraux peuvent porter des poids ou d’autres informations.
Un successeur de u est atteint par un arc qui part de u. Un prédécesseur de u est à l’origine d’un arc qui arrive en u. Dans un graphe non orienté, on parle de voisins et la relation est réciproque. Un sommet peut n’avoir aucun lien : il reste un sommet du graphe. Le modèle doit aussi dire ce qu’un lien signifie. Une arête entre deux villes peut désigner une liaison directe ; elle ne doit pas être ajoutée seulement parce qu’un trajet comportant plusieurs étapes existe. Un chemin est une suite de liens, pas nécessairement un lien unique.
Exemple résolu
Quatre lieux disposent uniquement des liaisons directes A vers B, B vers C, C vers A et C vers D. Modélise la situation.
- Étape 1 : Choisis les sommets A, B, C et D. La mention du sens impose un graphe orienté.
- Étape 2 : Ajoute exactement les quatre arcs donnés. Ne dessine pas un retour D vers C.
- Étape 3 : Les successeurs de C sont A et D ; son seul prédécesseur est B. Depuis A, un trajet vers D existe via B puis C, sans arc direct A vers D.
Résultat : Le graphe possède quatre sommets et quatre arcs. L’accessibilité par plusieurs étapes ne se confond pas avec l’adjacence directe.
Piège à éviter : Ajouter un lien A vers D parce que D est accessible depuis A ferait perdre la signification liaison directe du modèle.
À toi d'essayer
Dans ce graphe, A est-il un prédécesseur direct de C ? Justifie sans confondre trajet et arc.
Voir la réponseMasquer la réponse
Non. A peut atteindre C par A vers B puis B vers C, mais le seul arc qui arrive directement en C vient de B.
2. Fixer un ordre pour écrire une matrice
Pour n sommets, une matrice d’adjacence possède n lignes et n colonnes. Il faut d’abord fixer l’ordre des sommets. Nous choisissons A, B, C, D, à la fois pour les lignes et pour les colonnes. La case de ligne u et de colonne v vaut 1 s’il existe un arc de u vers v, et 0 sinon. Une ligne décrit donc les successeurs du sommet correspondant ; une colonne permet de lire ses prédécesseurs. Inverser ces rôles revient à représenter les arcs dans l’autre sens.
Exemple résolu
Écris la matrice du graphe dans l’ordre A, B, C, D.
- Étape 1 : La ligne A contient un seul 1 dans la colonne B : [0, 1, 0, 0].
- Étape 2 : La ligne B vaut [0, 0, 1, 0]. La ligne C vaut [1, 0, 0, 1].
- Étape 3 : La ligne D vaut [0, 0, 0, 0]. La colonne C contient un seul 1, à la ligne B, ce qui confirme son prédécesseur.
Résultat : La matrice est [[0, 1, 0, 0], [0, 0, 1, 0], [1, 0, 0, 1], [0, 0, 0, 0]]. Son ordre des sommets fait partie de la représentation.
Piège à éviter : Comparer deux matrices sans comparer leur ordre de sommets peut faire croire à une différence de graphes inexistante.
Dans un graphe non orienté, la matrice est symétrique : la case de ligne u et colonne v est égale à celle de ligne v et colonne u. Cela traduit la réciprocité de chaque arête. La diagonale décrit les boucles, c’est-à-dire les liens d’un sommet vers lui-même ; elle est nulle dans nos exemples sans boucle. Une ligne nulle dans un graphe orienté signifie absence de successeur, pas forcément isolement. Pour qu’un sommet soit isolé, il ne doit avoir ni lien entrant ni lien sortant.
À toi d'essayer
La ligne de D est nulle, mais la colonne de D contient un 1. D est-il isolé ?
Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.
3. Mémoriser seulement les liens présents
Une représentation par listes de successeurs associe à chaque sommet la liste des sommets atteints directement. En Python, un dictionnaire convient : les clés sont les sommets et les valeurs des listes. Notre graphe devient {"A" : ["B"], "B" : ["C"], "C" : ["A", "D"], "D" : []}. La clé D est conservée même si sa liste est vide. On peut construire de même les listes de prédécesseurs en inversant le rôle du départ et de l’arrivée. Pour un graphe non orienté, chaque arête apparaît dans la liste des deux extrémités.
Le choix de représentation dépend des opérations. Une matrice réserve n² cases et permet de consulter directement une relation entre deux indices. Des listes de successeurs mémorisent les sommets et les liens présents ; pour un graphe orienté avec m arcs, leur volume est de l’ordre de n + m. Tester si v figure parmi les successeurs de u demande alors une recherche dans cette liste. L’économie de mémoire ne rend pas toutes les opérations plus rapides. On compare donc un besoin précis, comme parcourir tous les voisins ou tester très souvent un lien particulier.
Exemple résolu
Construis une matrice à partir d’un dictionnaire de successeurs et d’une liste de sommets.
- Étape 1 : Associe chaque sommet à son indice, puis remplis les cases des arcs.def matrice(successeurs, sommets):
rang = {s: i for i, s in enumerate(sommets)}
n = len(sommets)
m = [[0 for j in range(n)] for i in range(n)]
for u in sommets:
for v in successeurs[u]:
m[rang[u]][rang[v]] = 1
return m - Étape 2 : La précondition impose que sommets contienne exactement les sommets, sans doublon, et que chaque destination apparaisse aussi dans cette liste.
- Étape 3 : Applique la fonction au dictionnaire précédent dans l’ordre A, B, C, D. Compare les quatre lignes avec la construction manuelle.
Résultat : La fonction reproduit la matrice attendue. Chaque arc u vers v met à 1 la case de ligne u et de colonne v.
Piège à éviter : Construire les lignes par [[0] * n] * n partagerait la même liste entre toutes les lignes ; modifier une case pourrait alors en changer plusieurs.
La création par compréhension fabrique ici une nouvelle liste pour chaque ligne. Il faut vérifier cette indépendance pendant la mise au point. Pour revenir d’une matrice vers les successeurs, on parcourt chaque ligne et on ajoute le sommet de colonne pour chaque 1. Un aller-retour entre représentations doit conserver l’ensemble des arcs, même si l’ordre des successeurs change. Comparer les ensembles de voisins peut donc être plus pertinent que comparer des listes caractère par caractère.
À toi d'essayer
Tu ajoutes un sommet E isolé. Comment évoluent le dictionnaire de successeurs et la matrice ?
Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.
4. Au bac : lire les deux sens de la représentation
Au bac : passer du réseau à la mémoire
- Énonce ce que représentent sommets et liens. Précise si la relation est orientée et si les liens sont directs.
- Fixe et écris l’ordre des sommets avant de construire une matrice.
- Pour chaque arc, vérifie départ en ligne et arrivée en colonne. Contrôle séparément les prédécesseurs.
- Conserve les sommets sans successeur dans les représentations par listes.
- Teste le graphe vide, un sommet isolé et un exemple non symétrique. Justifie le choix de représentation par les opérations attendues.
Une figure lisible aide à vérifier quelques liens, mais elle ne remplace pas la définition des données. Deux dessins placent parfois les mêmes sommets à des endroits différents : ils décrivent le même graphe si les relations sont conservées. Inversement, deux réseaux visuellement semblables peuvent différer par le sens d’une seule flèche. Pendant une trace, choisis un arc et vérifie sa présence dans les trois formes : dessin, liste de successeurs et case de matrice. Ce contrôle local répété évite les erreurs d’orientation systématiques.
Vocabulaire
- Arc :
- Lien orienté d’un sommet de départ vers un sommet d’arrivée.
- Arête :
- Lien non orienté entre deux sommets.
- Adjacence :
- Existence d’un lien direct selon la convention du graphe.
- Prédécesseur :
- Sommet d’où part un arc arrivant au sommet considéré.
Contrôles rapides
| Observation | Interprétation |
|---|---|
| Ligne nulle | Aucun successeur dans la matrice orientée. |
| Colonne nulle | Aucun prédécesseur. |
| Matrice symétrique | Relations réciproques dans cette représentation. |
S’entraîner : ouvre l’espace Exercices du site.
À retenir
- Un arc possède un sens ; une arête représente une relation non orientée.
- La case de ligne u et de colonne v code ici le lien direct de u vers v.
- Une matrice d’un graphe non orienté est symétrique.
- Une liste de successeurs doit aussi représenter les sommets sans lien sortant.
Fiche de révision
Pour convertir, conserve toujours la liste qui associe indices et sommets.
Lis une ligne pour les sorties et une colonne pour les entrées.
Un trajet de plusieurs étapes ne justifie pas l’ajout d’un arc direct.
Teste les lignes de matrice indépendamment pour détecter un partage involontaire.
Questions fréquentes
Changer la place d’un sommet dans le dessin change-t-il le graphe ?
Non, si les sommets et leurs liens sont conservés.
Une ligne nulle prouve-t-elle un isolement ?
Seulement si la colonne correspondante est aussi nulle pour le graphe orienté étudié.
Et maintenant ?
Tu as lu le cours. L’étape suivante tient en une action.
Relis le coursReprends l’essentiel avant de passer à la suite.Prolonge l’expérience !
Continue à explorer ce chapitre à travers de nouvelles activités, des défis et des expériences interactives. Avec Premium, l’apprentissage continue !
Ici, tu débloques aussi 2 corrections détaillées.
Parent ? Suivez les progrès de votre enfant.
