Representation d'un graphe
Il existe plusieurs types de représentation pour décrire un graphe. On distingue principalement la représentation par matrice d'adjacence, par matrice d'incidence sommet-arcs et par liste d'adjacences.
Matrice d'adjacence
Pour un 1-graphe, la matrice d'adjacence fait correspondre les sommets origines des arcs (classes en ligne dans la matrice) au sommets destination (classes en colonnes dans la matrice). Dans un formalisme matrices booléenne, l'existence d'un arc
donc par exemple on peu simplement utiliser une matrice numpy pour ce type de representation :
n = 4 # number_of_nodes connection = np.zeros((n,n)) connection[0,0] = 1 # boucle sur x_1 connection[0,2] = 1 # arc de x_1 -> x_3 # etc ....
Matrice d'incidence sommet-arc
Pour établir cette matrice, les lignes sont constituées des sommets du graphe et les connes sont constituées des arcs. On pose la valeur
encore une fois une simple matrice numpy peu etre utilise, mais ce type de representation est moin flexible a la modification (ajout / suppression d'arc plus couteux)
n = 2 # number_of_nodes m = 1 # number_of_arcs connection = np.zeros((n,m)) connection[0,0] = -1 # arc de x_1 connection[1,0] = 1 # vers x_2
Liste d'adjacence
L'objectif ici est de représenter chaque arc par sont extréminée finale, l'extrémintée initial étant défini implicitement. On pose alors que tout les arcs émanant d'un même sommet sont liés entre eux dans une liste. A chaque arc sont associés le sommet de destination et le pointeur au prochain sommet de la liste. Pour un 1-graphe, il y a un avantage à utiliser la représentation par liste d'adjacence grâce à l'application
La représentation par liste d'adjacence nécéssite la création de deux tableaux. Un premier nommé
dans le cas orienté dans le cas non-orienté identique
Cette représentation revient à décrire le graphe par sont application multivoque
- On construit
par - On construit
qui donne pour tout sommet l'indice dans ou commence la liste des successeurs. - Pour le sommet
, son premier suivant est et le second
L'enssemble ce situe dans les border et du tableau - Si un sommet
n'a pas de successeur, on pose .
C'est à dire une liste coincée entre les successeurs de et .
La place mémoire utilisé est
nodes = [[] for _ in range(nomber_of_nodes)] nodes[0] = [1] # liste des successeurs de x_1 nodes[1] = [0,2] # liste des successeurs de x_2 nodes[2] = [0,1,4] nodes[3] = [2] nodes[4] = [5] nodes[5] = [2,5] # boucle local
Par contre ce type de représentation ne permet pas de modéliser le poids des arcs, il faut donc rajouter un autres tableau similaire a
Voir aussi jerryyin.info