20052006 Algorithmique Avancée et Complexité UFR IEEA Master 1 d'Informatique S.Tison Graphes: Terminologie, Représentation Les graphes apparaissent naturellement très fréquemment pour modéliser divers situations ou problèmes: graphe de contrôle d'un programme, diagramme de classes, diagramme d'interactions, graphe des liaisons ferrovaires, graphe des congurations d'un jeu, graphe de dépendance de tâches, graphe d'un réseau, graphe représentant une relation binaire, graphe d'une fonction, réseau de neurones, graphe du Web, représentation de molécules... Les dénitions Remarque préliminaire: la terminologie concernant les graphes n'est pas tout à fait stable dans la littérature ... mais les diérences sont en général minimes. En particulier, la diérence de vocabulaire entre le cas dirigé et non dirigé n'est pas toujours respectée scrupuleusement... Dirigé... Un graphe dirigé (directed graph, digraph) est un couple (S, A). S est un ensemble dont les éléments sont S (A ⊂ S × S ) - donc l'ordre a de l'importance, i.e. (a, b) et (b, a) sont diérents-. Les éléments de A sont appelés les arcs de G. Pour un arc dirigé (v, w), v est la source ou l'origine, w est l'arrivée ou le but. Un arc (v, w) sera noté graphiquement v → w ou dans le texte simplement vw. Soit un un arc (v, w); c'est un arc sortant pour v , entrant pour w ; w est adjacent au sommet v ou successeur de v , v est un prédécesseur de w . Les prédécesseurs et les successeurs d'un sommet sont ses voisins. Le nombre appelés les sommets (ou noeuds ) du graphe, A est un ensemble de couples d'éléments de d'arcs entrants d'un noeud est son degré entrant, son nombre d'arcs sortants est son degré sortant. Le degré d'un sommet est la somme des degrés entrant et sortant, donc le nombre de ses voisins. 0, entrant i.e. sans prédécesseur, est appelé Un noeud de degré racine ou source du graphe - Attention,un graphe peut avoir 0 ou plusieurs racines-. Le degré d'un graphe est le degré maximum de ses sommets. ...ou non? Un graphe non dirigé (undirected graph) est un couple est un ensemble dont les éléments sont appelés S . Les G. Dans une paire, l'ordre n'a pas d'importance, la paire {a, b} est la même que la paire {b, a}. Une arête {v, w} sera notée graphiquement v − w ou dans le texte simplement vw . Soit un sommet v ; les sommets w tels que {v, w} appartient à A sont appelés les voisins de v ou les sommets adjacents à w . Le degré d'un sommet est son nombre de voisins. les sommets (ou noeuds) du graphe, éléments de A A (S, A). S est un ensemble de paires -donc non ordonnées- d'éléments de sont appelés les arêtes de Chemins, cycles w est une séquence d'arcs (ou arêtes) v0 v1 , v1 v2 , ..., vk−1 vk avec v0 = v , k . Un sommet seul est considéré comme un chemin de longueur 0. w est accessible ou atteignable à partir de v si il existe un chemin de v à w . Un chemin v0 v1 , v1 v2 , ..., vk−1 vk dans un graphe dirigé est un circuit (parfois appelé cycle) si v0 = vk et k > 1. Dans le cas non orienté, un chemin v0 v1 , v1 v2 , ..., vk−1 vk est un cycle si v0 = vk et si une arête n'apparaît pas deux fois avec une orientation diérente. Par exemple v0 v1 , v1 v0 n'est pas un cycle dans le cas non orienté. Un chemin dans un graphe de vk = w. v à La longueur du chemin est Un graphe non dirigé est dit acyclique si il ne contient pas de cycles. Un graphe dirigé est dit sans circuit si il ne sontient pas de circuits (noté souvent DAG pour directed ...acyclic graph). Quelques classes de graphes Un graphe non orienté est connexe, si et seulement si pour toute paire de sommets entre a et b. a et b il existe une chemin Un graphe orienté est fortement connexe, si et seulement si pour toute paire de sommets a et b, il existe un chemin entre a et b . Si on parle de graphe connexe pour un graphe orienté, on sous-entend que c'est le graphe non orienté sous-jacent qui est connexe. Un sous-graphe d'un graphe G = (S, A) G0 = (S 0 , A0 ) avec S 0 ⊂ S S 0 .) est un graphe et A0 ⊂ A (par dénition 0 d'un graphe, A est un ensemble de couples (rep. paires) d'éléments de Une composante (fortement) connexe d'un graphe (resp dirigé) est un sous-graphe (fortement) connexe maximal pour la relation de sous-graphe. Remarque: (resp. orienté) On peut redénir les notions de circuit ou cycle par: Un sous-graphe du graphe non orienté g est un cycle (resp. circuit) si et seulement siil est connexe et tous ses sommets sont de degré 2 (resp. de degré entrant 1 et de degré sortant 1). Un graphe complet est un graphe non orienté dans lequel tous les sommets sont adjacents deux à deux. Un graphe non orienté acyclique est une forêt ; si il est de plus connexe c'est un arbre. Quelques extensions: Un graphe pondéré est un triplet (S, A, P ) où (S, A) est un graphe et P est une fonction qui associe à chaque arc un poids (réel). Un graphe étiqueté est un triplet (S, A, P ) où (S, A) W est un graphe et est une fonction qui associe à chaque arc une étiquette prise dans un alphabet d'étiquettes (cf les automates). Représentation, taille... Soit G = (S, A) un graphe. On note n le cardinal de S, p le cardinal de A. On suppose que S = {v1 , ..., vn } (donc qu'on accède à un sommet par son numéro). Ramarque: on a donc 0 ≤ p ≤ n2 , dans le cas dirigé, 0 ≤ p ≤ n(n + 1)/2 dans le cas non dirigé. Plusieurs représentations sont possibles, deux étant privilégiées: • Matrice d'adjacence Un graphe peut être représenté par une matrice (aji ), 1 ≤ i ≤ n, 1 ≤ j ≤ n aji n × n, appelée matrice d'adjacence dénie par A = avec: = 1 si vi vj ∈ A = 0 sinon Si le graphe est non dirigé, la matrice d'adjacence est symétrique (i.e. La taille d'une telle matrice est n2 , aji = aij ). quelque soit le nombre d'arcs (ou arêtes) p. Cette structure sera donc coûteuse si le graphe est peu dense (ou creux), i.e. comprenant peu d'arcs. Elle sera plus adaptée si il est dense i.e. comprenant beaucoup d'arcs. Par contre elle permet une réponse en temps constant à la question existe-t-il un arc entre vi et vj ?. Si on a un graphe pondéré on peut adapter la matrice d'adjacence: elle devient la matrice des poids où cette fois-ci • aji est le poids de l'arc vi vj si il existe, une valeur sentinelle sinon. Listes d'adjacence La deuxième représentation classique -et sans doute la plus utilisée- est celle par listes d'adjacence. Elle s sa liste d'adjacence, c.à.d. des sommets v tels que (s, v) consiste en un tableau indexé par les sommets contenant pour chaque sommet la liste d'informations sur les arcs (arêtes) sortant de soit dans A. s, par exemple la liste Si le graphe est pondéré (resp. étiqueté) on pourra ajouter le poids de l'arc (resp. l'étiquette). On peut bien sûr enrichir et ajouter des informations comme le nombre de ses successeurs, la liste des prédécesseurs dans le cas dirigé... L'ordre de grandeur de la taille d'une telle structure est donc n ∗ p. Cette représentation a donc l'intérêt d'être plus compacte que la matrice d'adjacence quand le graphe est creux. Par contre pour rechercher si il existe un arc entre vi et vj , on doit balayer la liste d'adjacence de 2 vi : ce n'est plus en temps constant.