Mathématique (graphes) Théorie des graphes La théorie des graphes est une théorie informatique et mathématique. Un graphe permet de décrire un ensemble d'objets et leurs relations, c'est à dire les liens entre de tels objets. Définition Un graphe est un ensemble de points nommés sommets (ou nœuds) reliés par des traits ou flèches nommées arêtes (ou arcs). L'ensemble des arêtes entre nœuds forme une figure similaire à un réseau. Les arêtes peuvent être orientées (flèches) ou non orientées (traits). Si les arêtes sont orientées, la relation va dans un seul sens et est donc asymétrique, et le graphe lui-même est dit orienté. Sinon, si les arêtes sont non orientées, la relation va dans les deux sens et est symétrique, et le graphe est dit non orienté. ba aa ba da aa ca Graphe simple orienté da ca Graphe simple non orienté Un graphe est simple s'il n'a ni arêtes multiples (c’est-à-dire, qu’il n’existe qu’un seul arc de x vers y, mais il peut exister un arc de y vers x si le graphe est orienté) ni boucles (arête d’un sommet vers lui-même), il peut alors être défini tel qu’un graphe G = (V, E) où V est un ensemble (fini) d'objets. Les éléments de V sont les sommets du graphe. E est sous-ensemble de V V. Les éléments de E sont les arêtes du graphe (ou arcs pour les graphes orientés). Une arête e d’un graphe simple non orienté est une paire e={x,y} de sommets. Les sommets x et y sont les extrémités de l'arête. La notation varie pour un graphe simple orienté. Graphe orienté : V = {a, b, c, d} E = {(a,b), (b,a), (b,c), (c,d), (d,b)} Graphe non orienté : V = {a, b, c, d} E = {{a,b}, {b,c}, {c,d}, {d,b}} Degré Un graphe est d’ordre n s’il comporte n sommets. Deux sommets x et y sont adjacents s’il existe l'arête (x,y) dans E. Les sommets x et y sont alors dits voisins. Une arête est incidente à un sommet x, si x est l'une de ses extrémités. Le degré d'un sommet x de G (non orienté) est le nombre d'arêtes incidentes à x. Il est noté d(x). Pour un graphe simple non orienté le degré de x correspond également au nombre de sommets adjacents à x. Le degré entrant (d–) est le nombre d’arcs allant vers le sommet x de G (orienté) alors que le degré sortant (d+) est le nombre d’arcs partant de x. Graphe orienté : n=4 Sommet b Voisins : a, c, d d– (b) = 2 d+ (b) = 2 Graphe non orienté : n=4 Sommet c Voisins : b, d d– (c) = 1 d+ (c) = 1 Sommet b Voisins : a, c, d d (b) = 3 Sommet c Voisins : a, b, d d (c) = 2 Pour un graphe simple d'ordre n, le degré d'un sommet est compris entre 0 et n-1 (entier). Un sommet de degré 0, n’est donc relié à aucun sommet, il est dit isolé Chaines et chemins Graphe orienté : Graphe non orienté : Chaine : Un chemin x à y est définie par une Chemin : Une chaine x à y est définie par une suite de sommets menant du sommet x au suite de sommets menant du sommet x au sommet y. Il sera noté p. sommet y. Elle sera notée p. Longueur : Correspond au nombre d’arcs Longueur : Correspond au nombre d’arêtes parcourus par le chemin. parcourues par la chaine. Exemple : Aller de c à b Exemple : Aller de c à b p = (c, d, b), longueur = 2 p = (c, b), longueur = 1 Chemin (chaine) élémentaire : Ne passe pas deux fois par un même sommet, c'est-à-dire dont tous les sommets sont distincts. Chemin (chaine) simple : Ne passe pas deux fois par un même arc (arête), c'est-à-dire dont tous les arcs sont distincts. Un circuit (graphe orienté) ou un cycle (graphe non orienté) désigne, respectivement, un chemin ou une chaîne simple dont les deux extrémités sont identiques. La longueur d’un chemin est la somme des poids des arêtes parcourues dans un graphe pondéré. La distinction entre le poids et la longueur est valable pour une chaine, il faut donc bien veiller à différencier une chaîne de poids minimal d'une chaîne la moins longue par exemple. Graphe pondéré Un graphe pondéré est un graphe auquel on adjoint une fonction de valuation. Un graphe peut être pondéré/valué sur ses sommets comme sur ses arêtes. Le fait de passer par un sommet ou une arête dans un graphe pondéré a donc un coût (poids). On note p(x) le poids du sommet x, et p(i, j) le poids d’une arête (i, j). 2 1 Exemple : 4 ba ba da da 2 1 2 1 aa aa ca ca 5 Graphe A Graphe B A = (a, b, d) A = (a, b, d) p(A) = p({a,b}) + p({b,d}) = 2 + 4 p(A) = p(a) + p(b) + p(d) = 1 + 2 + 1 p(A) = 6 p(A) = 4 B = (a, b, c, d) B = (a, b, c, d) p(B) = p({a,b}) + p({b,c}) + p({c,d}) p(B) = p(a) + p(b) + p(c) + p(d) p(B) = 2 + 1 + 2 p(B) = 1 + 2 + 5 + 1 p(B) = 4 p(B) = 9 Graphe connexe Un graphe G = (V, E) est dit connexe s’il est non orienté, et que quelque soient les sommets x et y de V, il existe une chaine de x vers y. On parle de graphe fortement connexe dans le cas orienté. Un sous-graphe connexe maximal d'un graphe non orienté quelconque est une composante connexe de ce graphe. Un sous-graphe est un graphe contenu dans un autre graphe, un graphe H = (VH, EH) est un sous graphe de G = (VG, EG) si VH ⊂ VG et EH ⊂ EG. Graphe connexe : Graphe non connexe avec deux sous-graphes connexes : ba aa ca da ea fa ga aa ca ba da ha Graphe complet Un graphe complet est un graphe simple dont tous les sommets sont adjacents, c'est-à-dire que tout couple de sommets disjoints est relié par une arête. Si le graphe est orienté, on dit qu'il est complet si chaque paire de sommets est reliée par exactement deux arcs (un dans chaque n(n-1) sens). Le nombre d’arêtes de Kn est . 2 Exemples : K1 Graphe singleton 0 arête K2 1 arêtes K3 Graphe triangle 3 arêtes K4 Graphe tétraédrique 6 arêtes K5 Graphe pentacle 10 arêtes K6 15 arêtes Les graphes complets sont hamiltoniens, symétriques et réguliers. Graphe hamiltonien Un graphe hamiltonien est un graphe possédant au moins un cycle passant par tous les sommets une fois et une seule. Un tel cycle élémentaire est alors appelé cycle hamiltonien. Exemple : En rouge : cycle hamiltonien. Chaine hamiltonienne : Chaine passant une fois et une seule par chaque sommet Graphe semi-hamiltonien : Graphe contenant une chaine hamiltonienne mais pas de cycle hamiltonien. Graphe hamiltonien-connexe : Graphe dont pour toute paire de ses sommets, il existe une chaîne hamiltonienne entre ces sommets. Il n’existe pas de condition nécessaire et suffisante pour déterminer si un graphe est hamiltonien. Graphe eulérien Un graphe eulérien ne doit pas être confondu avec un graphe hamiltonien. Un graphe peut être eulérien ou hamiltonien, les deux ou aucun des deux. Un graphe est eulérien s’il respecte la propriété suivante : On peut distinguer une extrémité initiale et une extrémité finale de chaque arête, et ordonner l'ensemble des arêtes du graphe de telle façon que l'extrémité finale d'une arête corresponde à l'extrémité initiale de l'arête qui lui succède dans l'ordre (où la première arête de l'ordre succède à la dernière). Cela revient donc à passer par chaque arête une et une unique fois, et à revenir sur le sommet de départ. Un tel cycle est nommé cycle eulérien. Théorème d’Euler : Un graphe connexe est eulérien si et seulement si chacun de ses sommets est incident à un nombre pair d'arêtes. Graphe symétrique Un graphe est symétrique (ou arc-transitif) si pour deux paires quelconques de sommets reliés par une arête, tel que {x1, x2} et {y1, y2}, il existe un automorphisme de graphe. Un automorphisme de graphe est une bijection de l'ensemble des sommets vers lui-même qui préserve l'ensemble des arêtes. On peut voir l'automorphisme de graphes comme un isomorphisme de graphes du graphe dans lui-même. Exemple d’isomorphisme entre deux graphes : fa a c b a a a ja ia ha ea da ga Graphe B Isomorphisme entre A et B : f(a) = f(f) f(b) = f(g) f(c) = f(h) f(d) = f(i) f(e) = f(j) L’automorphisme et l’isomorphisme peuvent également être définis dans des graphes orientés ou pondérés ; dans ces cas on demande à ce que la bijection préserve aussi l'orientation et/ou la pondération. Exemple d’un graphe symétrique : aa ca ca aa Symétrie : ea ea ba da b d Graphe A a a Graphe régulier Un graphe est régulier quand tous ses sommets ont le même nombre de voisins, c'est-à-dire le même degré. Graphe 0-régulier Graphe 1-régulier Graphe 2-régulier Graphe 3-régulier Graphe cubique Graphe planaire Un graphe planaire est un graphe qui a la particularité de pouvoir se représenter sur un plan sans qu'aucune arête (ou arc) n'en croise une autre. Exemples : Est planaire : N’est pas planaire : // Un graphe fini est planaire si et seulement s'il ne contient pas de sous-graphe qui est une expansion de K5 (5-clique, soit la clique à 5 sommets) ou K3,3 (le graphe complet biparti à 3+3 sommets). 1 Une clique d'un graphe non orienté est un 3 2 sous-ensemble des sommets de ce graphe dont xc1 5 le sous-graphe induit est complet, c'est-à-dire 4 que deux sommets quelconques de la clique Graphe possédant une 3-clique, K3, (les 3 sont toujours adjacents. sommets sont tous adjacents deux à deux). Un graphe est dit biparti s'il existe une partition de son ensemble de sommets en deux sous-ensembles U et V telle que chaque arête V U ait une extrémité dans U et l'autre dans V. U Un graphe est dit biparti complet (ou biclique) s'il est biparti et contient le nombre V maximal d'arêtes. K3,2 Un stable, est l’inverse d’une clique, il s’agit d’ensemble de sommets deux à deux non adjacents. Dans xc1 le graphe possède 5 stables d’ordre 2 : {1,3}, {1,4}, {1,5}, {2,4}, {2,5}. Matrice d’adjacence Une matrice d'adjacence pour un graphe fini G à n sommets est une matrice de dimension n n dont l'élément non-diagonal aij est le nombre d'arêtes liant le sommet i au sommet j. L'élément diagonal aii est le nombre de boucles au sommet i. Exemple : ba da ea da ea ba fa aa fa aa ca ca Graphe non orienté a b c d e f a 1 1 0 0 0 0 b 1 0 1 0 0 0 c 0 1 0 1 0 0 d 0 0 1 0 1 1 Graphe orienté e 0 0 0 1 0 0 f 0 0 0 1 0 0 a b c d e f a 0 0 0 0 0 0 b 1 0 0 0 0 0 c 1 0 0 0 0 0 d 1 0 0 0 0 0 e 0 0 0 1 0 0 f 0 0 1 0 1 0 Pour les graphes orientés, la ligne correspond au sommet de départ et la colonne à celui d’arrivé. Pour les non orientés, on peut observer une symétrie autours de la diagonale. Algorithme de Dijkstra L'algorithme de Dijkstra permet de résoudre le problème du plus court chemin, il calcule des plus courts chemins à partir d'une source dans un graphe orienté pondéré par des réels positifs. On peut aussi l'utiliser pour calculer un plus court chemin entre une source et un sommet d'arrivée. Algorithme : Il s'agit de construire progressivement un sous-graphe dans lequel sont classés les différents sommets par ordre croissant de leur distance minimale au sommet de départ. La distance correspond à la somme des poids des arcs empruntés. Au départ, on considère que les distances de chaque sommet au sommet de départ sont infinies sauf pour le sommet de départ pour lequel la distance est de 0. Le sous-graphe de départ est l'ensemble vide. Au cours de chaque itération, on choisit en dehors du sous-graphe un sommet de distance minimale et on l'ajoute au sous-graphe. Ensuite, on met à jour les distances des sommets voisins de celui ajouté. La mise à jour s'opère comme suit : la nouvelle distance du sommet voisin est le minimum entre la distance existante et celle obtenue en ajoutant le poids de l'arc entre sommet voisin et sommet ajouté à la distance du sommet ajouté. On continue ainsi jusqu'à épuisement des sommets (ou jusqu'à sélection du sommet d'arrivée). Exemple : Chemin le plus court de x à y : 2 9 aa 2 8 xa 2 ga 6 3 Étape initiale x(0) a(2x) a ∞ 2 (x) b(3x) ea ha 3 1 ya 2 5 ca ba x 0 1 da 4 fa b ∞ 3 (x) c ∞ ∞ d ∞ ∞ e ∞ ∞ f ∞ ∞ g ∞ 8 (x) h ∞ ∞ y ∞ ∞ 3 (x) ∞ 2+9 11 (a) ∞ ∞ 8 (x) ∞ ∞ ∞ 11 (a) ∞ ∞ 3+6 8 (x) < 9 (b) ∞ ∞ 10 (g) 10 (g) ∞ ∞ ∞ ∞ 8 (x) g(8x) c(9g) h(10g) d(11a) e(12d) 9 (g) 11 (a) 11 (a) 11 (a) ∞ ∞ ∞ 12 (d) ∞ ∞ 15 (h) 15 (h) 12 + 2 15 (h) 14 (e) ∞ f(14e) Distance entre x et y : 18 18 (e) Chemin à l’envers (suivre les parenthèses) : y – f – e – d – a – x Plus court chemin : x, a, d, e, f, y 1 9 da ea aa 2 2 8 2 ga xa ha 2 3 6 5 1 3 ca fa ba ya 4 Nombre chromatique Colorer un graphe signifie attribuer une couleur à chacun de ses sommets de manière que deux sommets reliés par une arête soient de couleur différente. L'utilisation du nombre minimal de couleurs est le nombre chromatique. Le nombre chromatique n’est défini que pour les graphes sans boucles et ne prend pas en compte la multiplicité des arêtes (revient donc à considérer des graphes simples). Théorème : Le nombre chromatique d’un graphe est inférieur ou égal à d + 1, où d est le plus grand degré des sommets. Propriétés : Tout graphe contenant un triangle complet nécessite au moins trois couleurs. Tout graphe contenant un quadrilatère complet nécessite au moins quatre couleurs. Algorithme et exemple : ca ba ga ha aa fa ea da On trie les sommets dans l’ordre décroissant de leur degré (sans tenir compte de l’ordre pour les sommets de même degré) : d(b) d(d) d(f) d(a) d(e) d(g) d(h) d(c) 3 3 3 2 2 2 2 1 On choisit une couleur pour le premier sommet du tableau, et on le colorie avec ainsi que tous les sommets qui ne lui sont pas adjacents et qui ne sont pas adjacents entre eux (en suivant l’ordre du tableau) : d(b) d(d) d(f) d(a) d(e) d(g) d(h) d(c) 3 3 3 2 2 2 2 1 ca b ga ha aa f ea da On réitère le processus jusqu’à la coloration de tous les sommets du graphe : d(b) d(d) d(f) d(a) d(e) d(g) d(h) d(c) 3 3 3 2 2 2 2 1 b a c g h f e d Le nombre chromatique de ce graphe est donc : 3 3 <= d +1 3 <= 4