Graphe (type abstrait)
En informatique, et plus particuliÚrement en génie logiciel, le type abstrait graphe est la spécification formelle[1] des données qui définissent l'objet mathématique graphe[2] et de l'ensemble des opérations qu'on peut effectuer sur elles. On qualifie d'« abstrait » ce type de données car il correspond à un cahier des charges qu'une structure de données concrÚte doit ensuite implémenter.
Description
La structure de donnĂ©es abstraite de graphes consiste en un ensemble fini, Ă©ventuellement mutable de sommets ou nĆuds ou points, avec un ensemble de paires ordonnĂ©es ou non de tels Ă©lĂ©ments Ces paires sont des arĂȘtes, arcs non orientĂ©s, ou lignes pour un graphe non orientĂ©, et flĂšches, arĂȘtes orientĂ©es , arcs, ou lignes orientĂ©es dans le cas orientĂ©. Les sommets peuvent faire partie de la structure, ou ĂȘtre des entitĂ©s extĂ©rieures, reprĂ©sentĂ©es par des entiers ou des rĂ©fĂ©rences.
Une structure de graphe peut aussi associer, Ă chaque arĂȘte, une « valeur », telle qu'une Ă©tiquette ou une valeur numĂ©rique (un coĂ»t, une capacitĂ©, une longueur, etc.). Plus gĂ©nĂ©ralement, un graphe peut aussi ĂȘtre donnĂ©e par deux ensembles d'objets, un de sommets et un ensemble d'arĂȘtes, muni de deux applications qui, Ă chaque arĂȘte, associent son sommet de dĂ©part et son sommet d'arrivĂ©e. Cette vision[3] permet d'associer des valeurs Ă chaque objet (sommet ou arĂȘte).
Opérations
Les opérations de base fournies par une structure de données de graphe G incluent usuellement[4] - [3] :
sont_adjacents
(G, x, y): teste s'il y a une arĂȘte de x Ă y;voisins
(G, x): liste les sommets qui sont adjacents Ă x;ajouter_sommet
(G, x): ajoute le sommet x s'il n'y figure pas déjà ;supprimer_sommet
(G, x): supprime le sommet x s'il existe;ajouter_arĂȘte
(G, x, y): ajoute l'arĂȘte de x Ă y s'il n'y figure pas dĂ©jĂ ;supprimer_arĂȘte
(G, x, y): supprime lâarĂȘte de x Ă y si elle existe;retourner_valeur_sommet
(G, x): retourne la valeur associée à x;fixer_valeur_sommet
(G, x, v): fixe la valeur de x Ă v.
Les structures qui associent des valeurs aux arĂȘtes disposent en gĂ©nĂ©ral[4] des opĂ©rations suivante :
retourner_valeur_arĂȘte
(G, x, y): retourne la valeur de l'arĂȘte (x, y);fixer_valeur_arĂȘte
(G, x, y, v): fixe Ă v la valeur de lâarĂȘte (x, y).
Représentations
Diverses structures de données sont utilisées en pratique pour la représentation de graphes :
- Liste d'adjacence[5] - [6]
- Les sommets sont reprĂ©sentĂ©s comme des objets ou enregistrements, et Ă chaque sommet est associĂ©e une liste de sommets adjacents. Cette structure permet de conserver des donnĂ©es additionnelles pour les sommets. Les informations additionnelles concernant les arĂȘtes peuvent ĂȘtre stockĂ©s dans les objets si les arĂȘtes sont reprĂ©sentĂ©es par des objets. Dans ce cas, chaque sommet peut contenir les arĂȘtes adjacentes et chaque arĂȘte ses sommets incidents.
- Matrice d'adjacence[7] - [8]
- C'est une matrice carrĂ©e de taille , oĂč les lignes reprĂ©sentent les sommets de dĂ©part et les colonnes les sommets d'arrivĂ©e. Une entrĂ©e peut dĂ©signer la prĂ©sence d'un arc, ou peut porter une valeur d'arc. Dans le cas des graphes non orientĂ©s, la matrice est symĂ©trique.
- Matrice d'incidence[9]
- C'est une matrice de taille , oĂč les lignes reprĂ©sentent les sommets et les colonnes les arĂȘtes. Une entrĂ©e indique si l'arĂȘte est incidente au sommet . Plus prĂ©cisĂ©ment : Il n'y a que deux valeurs non nulles par colonne (et une seule dans le cas d'une boucle).
La table suivante donne la complexitĂ© en temps des diverses opĂ©rations sur les graphes selon les reprĂ©sentations. Ici est le nombre de sommets et le nombre d'arĂȘtes.
Liste d'ajacence | Matrice d'adjacence | Matrice d'incidence | |
---|---|---|---|
Créer le graphe | |||
Ajouter un sommet | |||
Ajouter une arĂȘte | |||
Supprimer un sommet | |||
Supprimer une arĂȘte | |||
Test d'adjacence entre deux sommets | |||
Remarques | Lent dans la suppression parce qu'il faut trouver les sommets ou arĂȘtes | Lent dans l'adjonction ou suppression de sommets parce que la matrice doit ĂȘtre reformatĂ©e | Lent dans l'adjonction ou suppression de sommets ou d'arĂȘtes parce que la matrice doit ĂȘtre reformatĂ©e |
Les listes d'adjacence sont en gĂ©nĂ©ral prĂ©fĂ©rables pour des graphes peu denses. Une matrice d'adjacence est au contraire prĂ©fĂ©rable quand le graphe est dense, c'est-Ă -dire quand le nombre d'arĂȘtes |E | est proche du carrĂ© du nombre de sommets |V |2, mais aussi lorsque l'on veut savoir rapidement tester l'existence d'une arĂȘte entre deux sommets[10] - [11] - [3].
Articles liés
- Parcours de graphe
- Base de données orientée graphe
- RĂ©Ă©criture (informatique)
- réécriture de graphes (en)
Notes et références
- Manfred Broy, Martin Wirsing et Claude Pair, « A Systematic Study of Models of Abstract Data Types », Theoretical Computer Science, vol. 33,â , p. 139-174
- Sébastien Veigneau, Approches impérative et fonctionnelle de l'algorithmique : applications en C et en CAML Light, Springer Science & Business Media, (lire en ligne)
- Kurt Mehlhorn et Stefan NĂ€her, LEDA : A platform for combinatorial and geometric computing, Cambridge University Press, , « Chapter 6: Graphs and their data structures », p. 240â282.
- Goodrich et Tamassia 2015, Section 13.1.2: Operations on graphs, p. 360
- Cormen et al. 2002, p. 514-515.
- Goodrich et Tamassia 2015, p. 361-362.
- Cormen et al. 2002, p. 515-516.
- Goodrich et Tamassia 2015, p. 363.
- Cormen et al. 2002, Exercise 22.1-7, p. 517.
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein, Algorithmique, Paris, Dunod, , xxix+1188 (ISBN 978-2-10-003922-7, SUDOC 068254024), « Section 22.1: ReprĂ©sentation de graphes », p. 514â517.
- Michael T. Goodrich et Roberto Tamassia, Algorithm Design and Applications, Wiley, , « Section 13.1: Graph terminology and representations », p. 355â364.
Liens externes
- The Boost Graph Library une bibliothĂšque Boost
- Networkx, une bibliothĂšque de graphes en Python
- GraphMatcher un programme java d'alignement de graphes.