TNSI : Représentations des Graphes en Python⚓︎
On peut représenter les graphes de plusieurs manières:
- Matrices d'adjacences
- Listes d'adjacences:
- listes des voisins (graphes non orientés)
- listes des successeurs, ou des prédécesseurs (graphes orientés)
Matrice d'Adjacence⚓︎
Def
Une
- par une liste de listes en Python (par défaut)
- un dictionnaire
En notant \(A\) une certaine matrice, Alors
A[i][j]
désigne l'élément situé à la lignei
et à la colonnej
Matrice d'Adjacence d'un graphe NON pondéré⚓︎
Matrice d'Adjacence d'un graphe NON pondéré
Un graphe (orienté, ou pas) peut être représenté par une
- tout lien depuis le sommet
i
vers le sommetj
, est représenté parA[i][j] = 1
- Une absence de lien du sommet
i
vers le sommetj
, est représenté parA[i][j] = 0
Exp
Matrice NON Symétrique
Matrice Symétrique
# Matrice Adjacence en Liste de Listes :
M1 = [[1, 1, 0, 0],
[0, 1, 1, 1],
[0, 0, 1, 0],
[0, 0, 1, 0]]
# Matrice Adjacence en Liste de Listes :
M2 = [[0, 1, 1, 0, 0],
[1, 0, 1, 1, 1],
[1, 1, 0, 1, 0],
[0, 1, 1, 0, 1],
[0, 1, 0, 1, 0]]
# Matrice Adjacence en Dictionnaire (Graphes Étiquetés) :
M1 = {0 : [1, 1, 0, 0],
1 : [0, 1, 1, 1],
2 : [0, 0, 1, 0],
3 : [0, 0, 1, 0]}
# Matrice Adjacence en Dictionnaire (Graphes Étiquetés) :
M2 = {0 : [0, 1, 1, 0, 0],
1 : [1, 0, 1, 1, 1],
2 : [1, 1, 0, 1, 0],
3 : [0, 1, 1, 0, 1],
4 : [0, 1, 0, 1, 0]}
Matrice Symétrique
Notons \(A=(a_{ij})\) la matrice d'adjacence.
On dit que la matrice d'adjacence est
Matrice d'Adjacence d'un graphe Pondéré⚓︎
Matrice d'Adjacence d'un graphe pondéré
Un graphe pondéré (orienté, ou pas) peut être représenté par une
- tout lien depuis le sommet
i
vers le sommetj
, est représenté par\(A[i][j] = a_{ij}\) où \(a_{ij}\) désigne le poids du lien du sommeti
vers le sommetj
- Une absence de lien du sommet
i
vers le sommetj
, est représenté parA[i][j] = 0
Exp
Matrice NON Symétrique
Matrice Symétrique
# Matrice Adjacence en Liste de Listes :
M3 = [[3, 2, 0, 0],
[0, 4, 0.5, 0.2],
[0, 0, 0.6, 0],
[0, 0, 5, 0]]
# Matrice Adjacence en Liste de Listes :
M4 = [[0, 4, 5, 0, 0],
[4, 0, 0.1, 0.3, 0.2],
[5, 0.1, 0, 0.8, 0],
[0, 0.3, 0.8, 0, 0.9],
[0, 0.2, 0, 0.9, 0]]
# Matrice Adjacence en Dictionnaire (graphes Étiquetés) :
M3 = {0 : [3, 2, 0, 0],
1 : [0, 4, 0.5, 0.2],
2 : [0, 0, 0.6, 0],
3 : [0, 0, 5, 0]}
# Matrice Adjacence en Dictionnaire (graphes Étiquetés) :
M4 = {0 : [0, 4, 5, 0, 0],
1 : [4, 0, 0.1, 0.3, 0.2],
2 : [5, 0.1, 0, 0.8, 0],
3 : [0, 0.3, 0.8, 0, 0.9],
4 : [0, 0.2, 0, 0.9, 0]}
Symétrie de la matrice d'Adjacence⚓︎
Matrice Symétrique
Notons \(A=(a_{ij})\) la matrice d'adjacence.
On dit que la matrice d'adjacence est
Cela revient à ce que les coefficients \(a_{ij}\) soient symétriques par rapport à la diagonale principale
Matrice d'Adjacence Symétrique? ou pas?
- Un graphe non orienté admet une matrice d'adjacence symétrique
- Un graphe orienté admet, en général, une matrice d'adjacence non symétrique
Liste d'Adjacence⚓︎
- Pour représenter un graphe, on peut également, pour chacun de ses sommets, donner la liste des sommets auxquels il est relié.
- Lorsque le graphe est non orienté, la liste d'adjacence est une
liste de voisins -
Lorsque le graphe est orienté, la liste d'adjacence peut être représentée par :
- la
liste de ses successeurs , ou bien - la
liste de ses prédécesseurs , lorsque les problèmes étudiés s'y prêtent mieux (ça arrive)
- la
-
Implémentation:
- Pour un graphe d'ordre \(n\), on numérotera les sommets de \(0\) à \(n-1\)
- Graphes non étiquetés : Les listes de voisins et/ou de successeurs se représentent usuellement par des listes de listes en Python.
- Graphes étiquetés : Les listes de voisins et/ou de successeurs se représentent usuellement par des dictionnaires en Python.
Exp
# Liste de Successeurs en Liste de Listes :
S1 = [[0,1],
[1, 2, 3],
[2],
[2]]
# Liste de Voisins en Liste de Listes :
V2 = [[1, 2],
[0, 2, 3, 4],
[0, 1, 3],
[1, 2, 4],
[1, 3]]
# Liste de Successeurs en Dictionnaire (Graphes Étiquetés) :
S1 = {0 : [0, 1],
1 : [1, 2, 3],
2 : [2],
3 : [2]}
# Liste de Voisins en Dictionnaire (Graphes Étiquetés) :
V2 = {0 : [1, 2],
1 : [0, 2, 3, 4],
2 : [0, 1, 3],
3 : [1, 2, 4],
4 : [1, 3]}
# Liste de Successeurs Pondéré en Liste de Listes :
S3 = [[[0,3],[1,2]],
[[1,4], [2,0.5], [3,0.2]],
[2,0.6],
[2,5]]
# Liste de Voisins Pondéré en Liste de Listes :
V4 = [[[1,4], [2,5]],
[[0,4], [2,0.1], [3,0.3], [4,0.2]],
[[0,5], [1,0.1], [3,0.8]],
[[1,0.3], [2,0.8], [4,0.9]],
[[1,0.2], [3,0.9]]]
# Liste de Successeurs Pondéré en Dictionnaire (Graphes Étiquetés) :
S3 = {0 : [[0,3],[1,2]],
1 : [[1,4], [2,0.5], [3,0.2]],
2 : [2,0.6],
3 : [2,5]}
# Liste de Voisins Pondéré en Dictionnaire (G.Étiquetés):
V4 = {0 : [[1,4], [2,5]],
1 : [[0,4], [2,0.1], [3,0.3], [4,0.2]],
2 : [[0,5], [1,0.1], [3,0.8]],
3 : [[1,0.3], [2,0.8], [4,0.9]],
4 : [[1,0.2], [3,0.9]]}