Passer d'une représentation d'un graphe à une autre
- Fiche de cours
- Quiz et exercices
- Vidéos et podcasts
Passer de la liste d’adjacence d’un graphe à la matrice d’adjacence de ce graphe, et inversement.
- À partir de la liste d’adjacence d’un graphe, on obtient sa matrice d’adjacence en commençant par créer une matrice carrée remplie de zéro, puis on la parcourt ligne par ligne. Lorsqu’on a un sommet adjacent, le coefficient devient 1.
- À partir de la matrice d’adjacence d’un graphe, on obtient la liste d’adjacence en étudiant la matrice d’adjacence ligne par ligne. On crée une liste vide pour chaque sommet (ligne) et on ajoute à chaque liste le ou les sommets adjacents lorsque le coefficient vaut 1 dans la matrice.
- Structure de données : dictionnaire
- Implémenter un graphe par sa matrice d'adjacence.
- Implémenter un graphe par sa liste d'adjacence.
Pour représenter un graphe, on peut utiliser une matrice d’adjacence, dont les éléments permettent de repérer les sommets qui sont liés (valeur non nulle) ou non (valeur nulle) par un arc.
Pour représenter un graphe, on peut aussi utiliser la structure de dictionnaire avec la liste d’adjacence.
Voici les différentes représentations d’un graphe G : représentation sagittale, matrice d’adjacence et liste d’adjacence.
Représentation sagittale | Matrice d’adjacence | Liste d’adjacence |
|
|
G={'A':['B','C'], 'B':['A','C'], 'C':['A','B']} |
Le choix de la représentation du graphe dépend du contexte. La matrice d’adjacence est en effet facile à lire et à interpréter par rapport à la liste d’adjacence, mais c’est la liste d’adjacence que l’on va privilégier du point de vue de la complexité temporelle (temps d’exécution).
Il y a une n2 éléments dans une matrice, il faut donc tous les parcourir pour chercher une valeur. Du point de vue de la complexité temporelle (temps d’exécution), on est de l’ordre de O(n2) pour cette opération.
La structure de dictionnaire permet d’éviter cela puisqu’on accède directement à une valeur grâce à sa clé : la recherche d’une valeur dans une liste d'adjacence se fait donc en un temps constant (O(1)).
Un dictionnaire est un objet immuable. La structure de dictionnaire de la liste d’adjacence n’est donc pas adaptée à une situation où l’on doit changer ou supprimer des valeurs.
On souhaite passer de la liste d’adjacence d’un graphe à sa matrice d’adjacence.
On considère le graphe G donné par sa liste d’adjacence, on a donc une structure de dictionnaire.
On connait le nombre de ses sommets, qui correspond au nombre de clés présentes dans la liste d’adjacence. On note n ce nombre.
Voici l’algorithme qui permet d’obtenir la matrice d’adjacence associée à cette liste d’adjacence.
- Créer la liste des sommets.
- Créer une matrice
carrée A
d’ordre n qui ne contient que
des 0.
Cette matrice comporte donc n lignes et n colonnes. - On fixe i
(indice de la ligne étudiée) :
pour parcourir les différentes colonnes, on fait prendre à j (indice de la colonne) les valeurs de 0 à n – 1 : si le sommet de la j-ème colonne est dans la liste des valeurs associées à la clé i dans la liste d’adjacence, alors A[i][j]=1 (on affecte 1 à l'élément placé à la i-ème ligne et à la j-ème colonne du tableau A).
On étudie la liste d’adjacence du graphe G :
G={'A':['B','C'],'B':['A','C'],'C':['A','B']}
- On crée la liste des 3 sommets : A, B et C.
- On crée une matrice G d’ordre 3 qui ne
contient que des 0.
- Pour i=0
(première ligne associé à A) on
fait prendre à j les valeurs de 0
à 2 dans la liste d’adjacence.
- Pour j=0, on
regarde si A appartient à la liste
associée à A,
ce n’est pas le cas donc A[0][0]=0. - Pour j=1, on regarde si B
appartient à la liste associée
à A,
c’est le cas, donc A[0][1]=1. - Pour j=2, on regarde si C
appartient à la liste associée
à A,
c’est le cas donc A[0][2]=1.
- Pour j=0, on
regarde si A appartient à la liste
associée à A,
La liste d’adjacence est notée G.
Voici ci-dessous le programme Python qui permet de passer de la liste d’adjacence G du graphe à sa matrice d’adjacence.
Voici l’explication ligne à ligne de ce code.
Python | Explication |
liste= LISTE DES SOMMETS A ENTRER | On liste, à partir de la liste d’adjacence, les sommets du graphe. |
n=len(liste) | On obtient le nombre de sommets, qui correspond à la longueur de la liste d’adjacence fournie. |
A=[[0]*n for i in range(n)] | On crée une matrice carrée A de n lignes et n colonnes, qui ne comporte que des 0. |
for i in range (n): | On va parcourir la matrice ligne par ligne, |
for j in range(n): | puis dans la ligne, on se déplace de colonne en colonne, |
if liste[j] in G[liste[i]]: |
si le sommet étudié est dans la liste de valeurs associées à la clé dans la liste d’adjacence, |
A[i][j]=1 | alors le coefficient devient 1 (on affecte 1 à l’élément qui se trouve à la i-ème ligne et à la j-ème colonne du tableau). |
Voici l’exécution de ce code sur Python Tutor pour la liste d’adjacence :
G={'A':['B'],'B':['A'],'C':[]}.
On obtient la matrice d’adjacence (en ligne) associée à cette liste d’adjacence : [[0, 1, 0], [1, 0, 0], [0, 0, 0]].
Dans le graphe associé, les sommets A et B sont adjacents, et le sommet C est isolé.
On souhaite passer de la matrice d’adjacence d’un graphe à sa liste d’adjacence.
Le graphe est stocké à l’aide d’une matrice d’adjacence M. Les sommets sont stockés dans une liste.
Voici l’algorithme qui permet d’obtenir la liste d’adjacence associée à cette matrice d’adjacence.
- Créer le dictionnaire vide G.
- Obtenir le nombre de sommets du graphe.
- Parcourir la matrice
d’adjacence M ligne par ligne.
- Sur une ligne, qui correspond donc à un sommet, créer une liste vide qui va contenir les sommets adjacents.
- Parcourir les éléments de cette ligne en ajoutant à la liste le ou les sommets qui correspondent lorsque le coefficient vaut 1.
- Une fois arrivé au bout de la ligne, stocker la liste comme valeur associée à la clé.
On étudie la matrice d’adjacence du graphe G.
- On crée le dictionnaire vide G : G={}
- On a 3 lignes et 3 colonnes : il y
a donc 3 sommets.
On nomme par exemple ces sommets A, B et C . - On parcourt les éléments de chaque
ligne :
- On parcourt la première ligne, celle
du sommet A :
on ajoute les sommets qui correspondent lorsque le coefficient vaut 1. On a pour 'A' : ['B'] - On parcourt de la même manière la deuxième ligne, celle du sommet B. On a pour 'B' : ['A','C']
- On parcourt enfin la troisième ligne, celle du sommet C. On a pour 'C' : ['B']
- On parcourt la première ligne, celle
du sommet A :
{'A':['B'],'B':['A','C'],'C':['B']}.
Voici ci-dessous le programme Python qui permet de passer de la matrice d’adjacence du graphe G à sa liste d’adjacence.
Voici l’explication ligne à ligne de ce code.
Python | Explication |
liste1= LISTE DES SOMMETS A COMPLETER | La liste liste1 contient tous les sommets du graphe. Les sommets sont soit donnés par l’énoncé, soit on prend l’alphabet. |
n=len(liste1) | On obtient le nombre de sommets n, qui correspond à la longueur de la liste liste1. |
G=dict() | On crée un dictionnaire vide G. |
for i in range (n): | On parcoure la matrice ligne par ligne, |
liste=[] | on crée une liste vide liste (qui va comporter la liste des sommets adjacents du sommet de la ligne i étudiée), |
for j in range(n): | pour la ligne i fixée, on parcourt les différentes colonnes, |
if M[i][j]==1: | si le coefficient de la i-ème ligne et de la j-ème colonne est 1, |
liste.append(liste1[j]) | on ajoute le sommet qui correspond à la liste liste des sommets adjacents de la ligne i étudiée. |
G[liste1[i]]=liste | Une fois arrivé au bout de la ligne, on ajoute la liste liste dans la valeur associée à la clé liste1[i]. |
Voici l’exécution de ce code sur Python Tutor pour la matrice d’adjacence :
M=[[0,1,1],[1,0,1],[1,1,0]].
On obtient le résultat suivant.
On obtient donc la liste d’adjacence :
{'A':['B','C'],'B':['A','C'],'C':['A','B']}.
Dans le graphe associé, les sommets A, B et C sont adjacents.
Des quiz et exercices pour mieux assimiler sa leçon
La plateforme de soutien scolaire en ligne myMaxicours propose des quiz et exercices en accompagnement de chaque fiche de cours. Les exercices permettent de vérifier si la leçon est bien comprise ou s’il reste encore des notions à revoir.
Des exercices variés pour ne pas s’ennuyer
Les exercices se déclinent sous toutes leurs formes sur myMaxicours ! Selon la matière et la classe étudiées, retrouvez des dictées, des mots à relier ou encore des phrases à compléter, mais aussi des textes à trous et bien d’autres formats !
Dans les classes de primaire, l’accent est mis sur des exercices illustrés très ludiques pour motiver les plus jeunes.
Des quiz pour une évaluation en direct
Les quiz et exercices permettent d’avoir un retour immédiat sur la bonne compréhension du cours. Une fois toutes les réponses communiquées, le résultat s’affiche à l’écran et permet à l’élève de se situer immédiatement.
myMaxicours offre des solutions efficaces de révision grâce aux fiches de cours et aux exercices associés. L’élève se rassure pour le prochain examen en testant ses connaissances au préalable.
Des vidéos et des podcasts pour apprendre différemment
Certains élèves ont une mémoire visuelle quand d’autres ont plutôt une mémoire auditive. myMaxicours s’adapte à tous les enfants et adolescents pour leur proposer un apprentissage serein et efficace.
Découvrez de nombreuses vidéos et podcasts en complément des fiches de cours et des exercices pour une année scolaire au top !
Des podcasts pour les révisions
La plateforme de soutien scolaire en ligne myMaxicours propose des podcasts de révision pour toutes les classes à examen : troisième, première et terminale.
Les ados peuvent écouter les différents cours afin de mieux les mémoriser en préparation de leurs examens. Des fiches de cours de différentes matières sont disponibles en podcasts ainsi qu’une préparation au grand oral avec de nombreux conseils pratiques.
Des vidéos de cours pour comprendre en image
Des vidéos de cours illustrent les notions principales à retenir et complètent les fiches de cours. De quoi réviser sa prochaine évaluation ou son prochain examen en toute confiance !