Graphes¶
Warning
Ce cours a été automatiquement traduit des transparents de M.Noyer par Lorentzo et Elowan et mis en forme par Mehdi, nous ne nous accordons en aucun cas son travail, ce site à pour seul but d’être plus compréhensible pendant les périodes de révision que des diaporamas.
Crédits¶
- Wikipédia : théorie des graphes
- Wikipédia : graphes simples
- Toujours le Mansuy.
Historique¶
Les sept ponts de Königsberg¶
Un article du mathématicien suisse Leonhard Euler, présenté à l’Académie de Saint-Pétersbourg en 1735 puis publié en 1741.
Trouver une promenade à partir d’un point donné qui fasse revenir à ce point en passant une fois et une seule par chacun des sept ponts de la ville de Königsberg : Circuit eulérien.
Euler fut sans doute le premier à proposer un traitement mathématique de la question, suivi par Vandermonde.
Figure – Abstraction du problème des 7 ponts de Königsberg
Théorème
Un graphe connexe admet un circuit eulérien si et seulement si tous ses sommets sont de degré pair.
Ici un des sommets a
Graphes, représentation, sous-graphes¶
Informellement¶
Un graphe est un ensemble de points dans lequel on fait apparaître une ou plusieurs relations(s) entre deux points. Ces relations sont en général représentées par des flèches ou par des segments. Dans le premier cas, le graphe est dit orienté et les liens sont appelés des arcs. Dans le second, le graphe est dit non orienté et les liens sont souvent appelés des arêtes.
Les points sont appelés les sommets (en référence aux polyèdres) ou les nœuds (en références à la loi des nœuds).
Figure – Un graphe orienté avec des arcs - un graphe non orienté et ses arêtes.
Exemple : plan d’une ville.
Figure – Un multigraphe non orienté : ses arêtes multiples en bleu et ses boucles en rouge.
En anglais, sommet se dit vertice, arête se dit undirected edge et arc se dit directed edge.
Les arêtes multiples ne sont pas au programme.
Graphe simple non orienté¶
La définition suivante ne s’applique pas aux graphes avec arêtes multiples.
Définition: Graphe simple non orienté
Un graphe (simple) non orienté
La lettre
Certains auteurs utilisent un vocabulaire spécial pour les graphes non orientés. Par exemple, une arête (undirected edge) désigne un arc.
Soit
relie les sommets et , et sont adjacents ou encore voisins est incidente avec et ou encore et sont incidents avec .
Graphe simple orienté¶
Au programme ne figurent que les graphes avec au plus un seul arc d’un sommet à un autre.
Définition: Graphe simple orienté
Un graphe simple orienté
est appelé l’ensemble des sommets de ,- Et
est un ensemble de couples d’éléments de appelé l’ensemble des arcs de .
La lettre
Un arbre est un cas particulier de graphe orienté simple.
Mais pour certains auteurs, un arbre est un graphe non orienté connexe et acyclique (voir plus loin pour les définitions).
Un arc est noté
va de à est l’extrémité initiale de est l’extrémité terminale de est un voisin de . est incident à et
Degré¶
Dans un graphe général (orienté ou non), on appelle degré d’un sommet
f
Matrice d’adjacence sommets-sommets¶
Définition: Matrice d'adjacence
Soit
Remarque
- La matrice d’adjacence dépend de la numérotation des sommets. Il faut que cette numérotation soit connue pour comprendre la matrice.
une numérotation des sommets correspond une unique matrice d’ajacence sommets-sommets.- Inadaptée pour les arêtes (ou les arcs) multiples. Présence de boucle si
. Graphe non orienté matrice symétrique.
Liste d’adjacence¶
Définition: Liste d'adjacence
Soit
On appelle liste d’adjacence de
Remarque
Si une numérotation des sommets est choisie, on peut se contenter de donner la liste des voisins. La première liste donne les voisins du premier sommet, la seconde celle du second sommet etc...
Exemple de repésentation¶
Cas non orienté¶
Figure - Un graphe étiqueté non orienté
Matrice d'adjacence¶
Matrice symétrique
Liste d'adjacence¶
ouCas orienté¶
Figure - Un graphe étiqueté orienté
Matrice d'adjacence¶
Matrice non symétrique
Liste d'adjacence¶
ouMatrices d’adjacence : quelle représentation ?¶
En Ocaml ou C, les matrices d’adjacence sont simplement représentées par des matrices carrées c.a.d. des tableaux à deux dimensions avec même nombre de lignes que de colonnes.
A la place de
Implicitement on considère que les sommets sont des nombres. Ou alors on dispose d’un tableau de correspondance entre les sommets et leurs numéros (utile si les sommets contiennent des informations).
Avec un tel choix :
- il est facile de supprimer ou d’ajouter un arc entre deux sommets existants.
- On teste en
si deux sommets sont voisins. - Ajouter un sommet nécessite en général une copie de la matrice (complexité quadratique).
- Place mémoire perdue importante si beaucoup de sommets et matrice creuse.
Listes d’adjacence en Ocaml : quelle représentation ?¶
En Ocaml pour un graphe
On peut considérer une liste
- Avantages : pas de place mémoire perdue ; possibilité d’ajouter un nouveau sommet après avoir vérifié que ce sommet n’est pas déjà dans la liste.
- Inconvénients : Accès à la liste d’adjacence de
en ; test de voisinage entre et en ; ajout d’un arc en .
On peut préferer gérer un tableau de listes
- Avantage : l’accès à la liste d’adjacence de
est en ; test de voisinage avec en ; ajout d’un arc en (il faut vérifier que l’arc n’est pas déjà présent - usage de list.mem -). - Inconvénient : pour ajouter un sommet, il faut recopier le tableau.
Listes d’adjacence en C : quelle représentation ?¶
Tableau de liste de chaînes¶
Dans le même esprit qu’en Ocaml, pour représenter
Tableau
Accès direct à un sommet via
Complexité spatiale optimale en
Figure – Un tableau de liste chaînée de successeurs. (F. Pesseaux)
- ici il y a des étiquettes sur les arcs;
- si nom
index de tableau : besoin d'une fonction nom index
Partage physique des sommets¶
On peut aussi partager physiquement les sommets.
- Chaque sommet est représenté 1 et 1 seule fois.
- Chaque sommet est associé à une liste dont les éléments pointent sur ses successeurs.
Figure – Partage physique des données (F.Pesseaux)
-
Chaque sommet vient avec son nom, un pointeur sur sa liste de sommets voisins (qui est une liste de pointeurs sur sommets) et une étiquette (visité ou non) ;
-
une liste de sommets contient un pointeur sur sommet et un pointeur sur le mailllon suivant.
Sous-graphes¶
Convention :
-
Un sous-graphe est un graphe contenu dans un autre graphe : "
est un sous-graphe de si , et pour tout arc (resp. arête) de , les extrémités sont dans ".
On supprime des arcs et des sommets avec la contrainte qu’il ne faut pas conserver d’arc dont une extrémité a été supprimée de l’ensemble des sommets. -
Un sous-graphe couvrant (ou graphe partiel) est un sous-graphe ayant le même ensemble de sommets que le graphe qui le contient. "
est un sous-graphe couvrant de (ou couvre ) si et ." On garde tous les sommets, on enlève certains arcs. -
Un sous-graphe induit est un sous-graphe défini par un sous ensemble de sommets. "
est un sous-graphe induit de si, pour tout , l’existence d’un lien entre et dans est équivalente à l’existence d’un lien entre et dans ."
On enlève des sommets, toutes les arêtes correspondant à ces sommets et uniquement celles-là.
Exemples
Chaînes et chemins, connexité¶
Accessibilité¶
Chaînes et Chemins¶
Soit
- Un chemin d’un sommet
à un sommet est une séquence de (au moins 2) sommets = y dans laquelle chaque admet pour voisin. - Un sommet
est accessible depuis s’il existe un chemin de à . - La longueur d’un chemin est égale au nombre d’arêtes qui la constituent.
- Un chemin simple est une chemin qui ne contient pas plusieurs fois une même arête/arc (on dit aussi eulérien).
- Un chemin élémentaire est une chemin qui ne passe pas plusieurs fois par un même sommet.
- élémentaire
simple. - En CPGE, les chaînes sont souvent élémentaires (pas de doublon de sommet sauf pour définir les cycles).
- Certains auteurs utilisent le mot chaîne pour désigner les chemins dans les graphes non orientés.
Cycles et circuits¶
-
Un chemin est dit simple si chacun de ses arcs/arêtes n’est emprunté qu’une fois.
-
Un cycle
est un chemin dont les extrémités sont confondues : , c’est à dire qu’aucun arc/arête n’y figure deux fois. - Remarque : le sommet répété peut varier. Le cycle
, , , est considéré comme égal au cycle , , , . - Un cycle est dit élémentaire si, lorsqu’on enlève un arc quelconque et une extrémité de cet arc, le chemin restant est élémentaire.
- Un graphe est acyclique s’il ne possède aucun cycle.
- Certains auteurs distinguent la notion de circuit (pour les graphes
orientés) de celle de cycle (pour les graphes non orientés). Dans un graphe non orienté, la plupart du temps, on considère qu’un cycle est simple et possède au moins
arêtes (les boucles ne sont alors pas considérées comme des cycles).
Existence de chemin élémentaire (Propriété de König)¶
Proposition
S’il existe un chemin de
Preuve en TD.
Distance et diamètre¶
La distance entre deux sommets
Il s’agit bien d’une distance au sens mathématiques. En particulier, elle vérifie l’inégalité triangulaire
Le diamètre d’un graphe
Connexité¶
Relation de connexité¶
- La connexité dans un graphe non orienté est une relation binaire entre deux sommets :
et sont en relation de connexité si et seulement si est accessible depuis . - Comme le graphe est non orienté, si
est accessible depuis , alors est accessible depuis . - La connexité est une relation d’équivalence.
- Les classes d’équivalences sont appelées composantes connexes. La composante connexe d’un sommet
est notée ici et vaut :
- Un graphe est dit connexe si il possède une seule composante connexe.
- La connexité est étendue aux graphes orientés en ne tenant pas compte du sens des arcs.
Relation de forte connexité¶
La relation de forte connexité est une relation binaire entre sommets d’un graphe orienté :
- il existe un chemin de
à et il existe un chemin de à - ou bien
.
Les classes d’équivalence de la relation de forte connexité sont appelées composantes fortement connexes. La composante fortement connexe de
Elle vérifie
On dit qu’un graphe est fortement connexe si et seulement si il est constitué d’une seule composante fortement connexe, c’est à dire si pour tout couple de sommet
Connexité : exemple
Graphe connexe (quand on ne considère pas le sens des flèches).
- Sommets accessibles(qui partent de
) depuis . - Sommets coaccessibles(qui viennent vers
) depuis . est l’intersection des accessibles et des coaccessibles.
Isthme¶
Définition: Isthme
Une arête
Une seule composante connexe.
Deux composantes connexes après suppression de
Proposition
Soit
Preuve
Soit
- Supposons que
soit un isthme. Supprimer met , dans deux composantes connexes différentes. Cela veut dire qu’il n’existe pas de chemin de à qui ne passe pas par . Et donc, n’est sur aucun cycle. - Si
n’appartient à aucun cycle, supposons qu’il y ait un chemin allant de à ne passant pas par (on peut le prendre élémetaire). En y ajoutant , on obtient un cycle passant par : ABSURDE. Si on supprime , on ne peut donc plus joindre depuis . Alors , sont dans deux différentes. On en déduit que est un istme.
Nombre d’arêtes et de sommets¶
Proposition
Soit
connexe , acyclique (i.e. pas de cycle simple) .
Corollaire
Si
Remarque Ce sont des conditions nécessaires, pas suffisantes (exo : donner des contre-exemples).
Preuve
Si non orienté est connexe, ¶
Par récurrence forte :
- Vrai si
. Alors . Le graphe est connexe et - Si
, il faut qu’il y ait une arête entre les deux sommets pour que le graphe soit connexe. Alors . - Cas de base : OK. (Remarque : on pourrait ajouter des boucles ça ne changerait rien).
-
Si
pour et tout . Soit connexe à sommets. Tout sommet possède au moins une arête incidente car est connexe.- Si
possède un sommet de degré , n’est sur aucune chaîne simple joignant deux autres sommets. On supprime et son unique arrête adjacente, le sous-graphe obtenu est connexe à sommets. Par HR le nombre d’arêtes de est . En remettant l’arête de , on a au moins arêtes dans . - Sinon, tous les degrés sont
. La somme des degrés dans un graphe est car toutes les arêtes sont comptées deux fois. On a donc Donc . OK
- Si
Si est non orienté sans boucle a au moins arêtes, il n’est pas acyclique¶
On raisonne par contraposée sur
- Précisons : pas de cycle simple :
n’est pas un cycle car la même arête est emprunté deux fois - Si le graphe (qui est sans boucle) a au plus deux sommets, il ne possède pas de cycle simple puisqu’il y a au plus une arête qu’on ne peut pas emprunter deux fois (en CPGE, il n’y a pas de multigraphe : il existe au plus une arête entre deux sommets).
- Pour
. S’il y a arêtes, le graphe tout entier est un cycle.
On considère des graphes non orientés à au moins
- Cas de base
. S’il y a arêtes, le graphe tout entier est un cycle. -
Supposons
pour et tout . Soit à sommets et arêtes. On montre qu’il possède un cycle. Considérons un sommet quelconque .- S’il n’y a pas d’arête incidente à
, le graphe privé de a sommets et arêtes. Il y a un cycle par HR. -
Si il existe une arête incidente à
qui n’est pas un isthme elle est alors sur un cycle et possède donc un cycle : OK. -
Si toutes arête
-incidente est un isthme, soit . Retirons . Alors se retrouve dans une composante connexe différente de celle de .
Séparons la composante connexe de et ses arêtes (formant un sous graphe ) du reste du graphe (notons ce reste). possède, disons sommets , l’autre . possède arêtes et en a avec .- Si
, il y a un cycle dans par HR donc dans puisque est un sous-graphe de : Prouvé. - Sinon,
donc et le sous-graphe par HR a un cycle donc aussi. CQFD
- S’il n’y a pas d’arête incidente à
Caractérisation des arbres non enracinés¶
Définition : Arbre non enraciné
On appelle arbre non enraciné tout graphe non orienté sans boucle acyclique et connexe.
Remarque
On dit en général arbre plutôt que arbre non enraciné mais cette appelation amène des confusions avec la notion d’arbre définie inductivement des chapitres précédents.
Proposition
Soit un graphe non orienté sans boucle
-
-
-
On a déjà vu les sens directs.
Preuve
Si acyclique et ¶
Si
Ce nouveau cycle passe par l’arête
Puisque cycle il y a, c’est que
Donc pour tous sommets
Si est connexe et ¶
Si
Alors il y a un autre chemin de
Mais alors le nouveau graphe
Graphes particuliers¶
Arbres et forêts¶
Pour certains auteurs, un arbre est un graphe non orienté connexe et acyclique. S’il a
Comme il y a conflit avec la définition du cours, ces graphes non orientés connexes acycliques sont dits arbres non enracinés (on l’a déjà vu).
À contrario, on parle des objets du premier chapitre (définis inductivement) comme des arbres.
Dans un arbre non enraciné, on peut choisir une racine. Il y a alors un chemin unique de la racine à tous les sommets (cela se montre). La présence de la racine induit alors une orientation. La structure ainsi construite est ce que certains auteurs appellent arborescence ou arbre enraciné (cf def
Une arborescence n’est pas encore un des objets que nous manipulons sous le nom d’arbres. Il n’y a pas, dans les arborescences de notion comme fils gauche et fils droit. Il manque une notion de latéralisation.
Forêts¶
Une forêt est un graphe non orienté acyclique, c’est une union disjointe d’arbres non enracinés (qui en sont les composantes connexes).
Exemple
Racine, arborescence¶
Définition: Racine et Arborescence
Un sommet
On dit qu’un graphe orienté
Exemple
Graphes non orientés particuliers¶
Statut de cette section¶
Cette section donne quelques exemples de graphes particuliers sans qu’aucune preuve ne soit donnée.
Etoiles, peignes, chenilles¶
Etoile : Un arbre dont un sommet est adjacent à tous les autres.
Chenille : arbre tel que tout sommet de degré
Peigne : Bon j'ai vraiment besoin de décrire ça ?
Graphe planaire¶
Un graphe est planaire si on peut le dessiner sans qu’aucune arête n’en coupe une autre.
4-coloriabilité : les sommets d’un graphe planaire peuvent être coloriés avec
Graphe complet, tournoi¶
Un graphe complet est un graphe non orienté où tous les sommets sont deux à deux adjacents.
Un tournoi est un graphe orienté obtenu à partir d’un graphe complet en orientant chaque arête.
Graphe biparti¶
Un graphe biparti
Les arbres (et plus généralement les forêts) sont des graphes bipartis.
Graphe biparti complet¶
Un graphe est dit biparti complet (ou encore est appelé une biclique) s’il est biparti et contient le nombre maximal d’arêtes. Si
Un peu de OCAML¶
Liste d’adjacence¶
Les sommets sont numérotés de
Voir TD pour les exercices
Matrice d’adjacence¶
Voir TD pour les exercices
Parcours de graphes¶
Présentation¶
Définition¶
En théorie des graphes, un parcours de graphe est un algorithme consistant à explorer les sommets d’un graphe de proche en proche à partir d’un sommet initial. Un cas particulier important est le parcours d’arbre.
Un parcours d’un graphe permet de choisir, à partir des sommets visités, le sommet suivant à visiter.
Le problème consiste à déterminer un ordre sur les visites des sommets.
Une fois le choix fait, l’ordre des visites induit une numérotation des sommets visités (l’ordre de leur découverte) et un choix sur l’arc ou l’arête utilisé pour atteindre un nouveau sommet à partir des sommets déjà visités.
Les arcs ou arêtes distingués forment une arborescence ou un arbre, et les numéros des sommets sont croissants sur les chemins de l’arborescence ou les chaînes de l’arbre depuis la racine.
Finalité¶
Les algorithmes de parcours ne sont pas une fin en eux-mêmes. Ils servent comme outil pour étudier une propriété globale du graphe, par exemple :
- Connexité et forte connexité
- Existence d’un circuit ou d’un cycle et, le cas échéant, définition d’un ordre total sur les sommets compatible avec le sens des arcs (ce qu’on appelle tri topologique)
- Calcul des plus courts chemins (notamment l’algorithme de Dijkstra)
- Calcul d’un arbre recouvrant (notamment l’algorithme de Prim)
- Algorithmes pour les flots maximums (comme l’algorithme de Ford-Fulkerson).
- Coloration des sommets etc.
Analyse¶
La difficulté de l’exploration consiste à éviter de visiter plusieurs fois un même sommet. Pour cela on met en oeuvre un marquage des sommets par des couleurs. Lors d’une exploration, chaque sommet passe par trois couleurs :
bleu
tant que la visite du sommet n’a pas commencéevert
dès que sa visite commence et tant le traitement n’est pas terminérouge
dès que le traitement est terminé
L’exploration à partir d’un sommet s ne permet pas nécessairement d’explorer tout le graphe (il peut y avoir plusieurs
Parcours à partir d’un sommet¶
On gère une structure
Dès qu’un sommet bleu est abordé, il devient vert. Suivant les traitements, on peut choisir de traiter
Graphe de liaison induit¶
Soit
Pour un parcours depuis
- on débute avec le graphe (
) - lors du passage du parcours par un sommet
vert on ajoute chaque voisin bleu et l’arête (resp. arc) (resp. ) au graphe induit (mais peut-être pas tous en même temps). - On construit ainsi un graphe connexe ayant
sommets et arêtes, autrement dit un arbre ou une arborescence.
Le graphe de liaison induit par une exploration complète de
Tableau de couleurs¶
-
On colorie tous les sommets en bleu
puis on lance l’exploration de n’importe quel sommet. -
Lors d’un parcours, chaque sommet entre au plus une fois dans l’accumulateur
Verts
, et n’en sort qu’au plus une fois (quand il devient rouge). -
On s’arrange pour que ces opérations d’entrée et de sortie dans/de l’accumulateur sont de coût constant. Pour réaliser cette condition, la solution que nous adoptons consiste à utiliser un tableau de couleurs
.
Parcours en largeur d'abord¶
Algorithme¶
L’ensemble des sommets Verts est représenté par une file (bibliothèque OCAML queue par exemple)
Variant de boucle tant que
: nombre de sommets bleus + nombre de sommets verts. L’algorithme termine.
Animation du parcours en largeur d'abord :
A la fin on obtient :
Avec en rouge le graphe de liaison induit.
Deux arborescences de racines respectives
Coût des opérations de file¶
Pour un graphe
- Tous les sommets sont coloriés en bleu exactement une fois au début puis plus jamais :
. - Un sommet finit toujours par entrer dans la file (soit du fait de la boucle tant que , soit du fait de Largeur). Du fait des tests de couleurs, il n’y entre qu’une fois.
- Un sommet finit toujours par quitter la file car l’algorithme termine.
- Les opérations d’enfilement/défilement sont en
. Le coût total de gestion de file est en .
Gestion des listes d’adjacence¶
Pour un graphe
- Une liste d’adjacence donnée n’est balayée qu’une fois et une seule (puisque chaque sommet est ajouté dans la file puis défilé une fois et une seule). Chaque élément de cette liste donne lieu à des opérations de coloriage/enfilement en
. - La somme des longueurs des listes d’adjacence est en
. Donc le temps total consacré au balayage des listes d’adjacence est en . - Enfin la coloration initiale est en
. - Le total des opérations est en
pour le parcours en largeur.
Propriétés du parcours en largeur d’abord¶
Considérons un parcours en largeur depuis un sommet
est le premier sommet rouge. Un sommet devient rouge avant ses sucesseurs dans l’ordre de parcours.- Un sommet rouge n’a que des sommets adjacents verts ou rouges (en exo).
- Si un sommet
est rouge alors il existe une chaîne/chemin allant de à constituée uniquement de sommets rouges (en exo). - Si un sommet
est vert alors il existe une chaîne/chemin allant de à constituée uniquement de sommets verts ou rouges (en exo). - A la fin du parcours tous les sommets sont soit bleus, soit rouges (et la file des verts est vide).
Conséquence : à la fin de l’appel de Largeur
les sommets rouges sont tous les sommets accessibles à partir de
Preuve : accessiblité = coloration en rouge
Posons
- Au tour
, sort de la file et devient rouge. Alors il y a un chemin rouge de à . Et tous les voisins de deviennent verts : donc il y a un chemin rouge/vert vers eux. -
Supposons la propriété vraie au tour
. Soit le sommet défilé au tour . Il faut vérifier la propriété pour le nouveau sommet rouge et les nouveaux verts. devient rouge. Puisque était dans la file, il y a été placé par un sommet qui est devenu rouge. Par HR, il y a un chemin rouge de à et donc (en ajoutant l’arc ) de à .- Tout sommet
qui devient vert est un voisin de . Comme il y a un chemin rouge de à , il y a un chemin rouge/vert de à .
-
Si un sommet
est rouge, il y a un chemin (rouge) depuis vers donc est accessible. -
Réciproquement. On montre que si un sommet est à une distance
de , alors il est rouge à la fin du BFS.-
Vrai pour la distance
. est accessible depuis et il est rouge. Cas de base OK. -
Si la propriété est vraie pour tout sommet accesible à la distance k de
, soit à la distance (s’il n’existe pas de sommet à la distance , il n’en existe pas non plus à une distance supérieure et la propriété est prouvée). -
Alors le prédécesseur
de dans un PCC de à est à la distance de (un sous-chemin de PCC est un PCC). Par HR, il devient rouge à un moment. -
Donc si
est bleu au moment où devient rouge, alors le marque en vert et finit par devenir rouge. Et si est déjà marqué quand devient rouge, alors devient rouge. (Tout sommet qui entre dans la file en sort et devient rouge)
-
Parcours en profondeur d'abord¶
Présentation¶
Principe : on explore le graphe à partir d’un sommet
Ainsi l’exploration s’effectue en suivant le plus loin possible une chaîne issue de
On gère une pile des sommets verts (bibliothèque OCAML listes ou stack, python : listes ou classe deque)
Algorithme¶
On utilise une pile pour gérer les sommets verts.
En pratique¶
Un même nœud
Solution : considérer les listes de voisins comme des piles. On dépile jusqu’à trouver un sommet bleu. Les voisins dépilés ne reviennent jamais dans la pile de voisins. Cela impose de faire une copie du graphe (
Nombre d’opérations due à un sommet¶
On analyse le nombre d’opérations engendrées par la présence d’un sommet donné
- Le sommet
entre toujours dans la pile (soit du fait de la boucletant que
, soit du fait deProfondeur
). Le coloriage assure que le sommet ne revient pas dans la pile verte quand il l’a quittée. - Le sommet
apparaît au plus fois au sommet de la pile (s’en convaincre avec le graphe ). - A chaque apparition au sommet de la pile verte, il y a une recherche d’un voisin bleu (on peut la rendre AU TOTAL en
pour tout l’algo) ; un coloriage/empilement dans la pile verte parfois (au plus fois). est dépilé puis colorié en rouge une seule fois.
La présence de
Complexité totale¶
Pour un graphe
- On somme les nombres d’opérations occasionnées par chaque sommet pour obtenir la complexité totale.
- Le nombre total d’opération est (majoré par un nombre) proportionnel à
- Même si on ajoute le coût d’initialisation en
et la copie en , l’ensemble reste en
Observations¶
Les invariants suivants sont maintenus
- A tout moment, la pile décrit un chemin entre
(la base) et le haut de la pile. - Lorsqu’on colorie un sommet
en vert, tous les sommets bleus accessibles à partir de seront coloriés en rouges avant que ne le soit. - A la fin du parcours, l’ensemble des sommets rouges est l’ensemble des sommets accessibles à partir de
qui étaient bleus au moment l’entrée de dans la pile.
Animation du parcours en largeur d'abord :
A la fin on obtient :
Vocabulaire¶
Soit
- un arc de
liaison
si et seulement si - un arc
retour
si et seulement si est un descendant de dans . - un arc
avant
si et seulement si est un descendant de dans et (on prend de l’avance par rapport au cheminement normal dans ) - un arc couvrant sinon (tous les autres arcs).
Variante¶
Certains auteurs, gèrent le parcours en profondeur comme le parcours en largeur mais utilisent juste une pile et non une file.
Dans ce type de parcours, un même sommet n’apparaît qu’une seule fois au sommet de la pile verte.
Dès qu’un sommet apparaît au sommet de la pile, il est dépilé (une fois pour toute) et on ajoute en une seule fois tous ses voisins bleus au sommet de la pile. Un sommet devient alors rouge avant ses successeurs.
L’écriture du programme est alors plus simple, puisqu’une même liste de voisins n’est parcourue qu’une fois pour toute (alors qu’avec ma version, on la parcourt "par bouts" en
En revanche, on perd une propriété importante : la pile ne décrit plus exactement un chemin de la base au sommet mais est un simple accumulateur de sommets rencontrés.
A noter qu’il n’y a plus vraiment de raison d’utiliser trois couleurs ; deux suffisent.
Graphes acyclique¶
Généralités¶
Graphe acyclique
: un graphe qui ne contient pas de circuit/cycle.
Certain problèmes n’ont de solution que pour des graphes acycliques : plus court chemin, ordonnancement...
Si un graphe est acyclique on peut concevoir des algorithmes qui s’arrangent pour traiter tous les prédecesseurs d’un sommet donné avant de traiter ce sommet (variante du parcours en profondeur).
Propiétés¶
Cas des graphes orientés¶
Propriétés
Un graphe contient un circuit si et seulement si lors du parcours en profondeur l’un des successeurs du sommet en haut de la pile verte est déjà vert.
Exemple
Autre façon de dire que le graphe est acyclique : le graphe de liaison induit par un parcours en profondeur d’un graphe sans circuit ne génère aucun arc retour.
Il y a des arcs retour (en vert)
L’algorithme pour la détection de circuit dans un graphe est une variante du parcours en profondeur : quand on examine les arcs issus du sommet de la pile, il suffit de regarder si un arc ne pointe pas vers un nœud vert. On s’arête dès que c’est le cas.
Preuve de la méthode
On montre que la présence d’un cycle est équivalente à l’existence d’un arc retour.
S'il existe un arc retour¶
- Si la pile verte
a sommets, le dernier sommet vert a été ajouté parce qu’il existe un arc de à (notations Python). - Par récurrence, on obtient l’existence d’un chemin de tout sommet dans la pile vers les sommets supérieurs.
- Donc si on empile un sommet, et qu’un de ses successeurs est déjà vert (ce qui est la définition d’un arc retour), il y a un cycle.
S'il existe un cycle (Réciproque)¶
Supposons l’existence d’un cycle. On peut le considérer sans doublon (sinon enlever des sommets juqu’à ce qu’il ne contienne que des sommets distincts).
Soit
- Le second sommet du cycle sera vert avant que
devienne rouge puisque c’est un voisin de . - De proche en proche, on établit que à un moment tous les sommets du cycle sont dans la pile. Donc, le dernier sommet du cycle avant
, notons le , devient vert alors que est encore dans la pile. Comme il y a un arc , cet arc est un arc retour.
Tri topologique¶
Présentation¶
Exemple de problème : étant donné un ensemble de tâche à effectuer avec des contraintes d'antérioroté, on veut construire une liste de ces tâches respectant les contraintes
Représentation : à l'aide d'un graphe orienté où chaque sommet représente une tâche et où chaque arc
La résolution de ce problème consiste à effectuer un tri topologique des sommets du graphes, c'est à dire à construire une liste ordonéee des sommets telle qu'aucun sommet du graphes n'apparaît dans la liste avant l'un de ses prédécesseurs.
On peut représenter les sommets alignés de gauche à droite sans qu'aucun arc n'aille de droite à gauche
Définition: Tri topologique
On appelle tri topologique
d'un graphe orienté
Tri topologique et acyclicité¶
Proposition
Un graphe
Preuve
Graphe acyclique tri topologique¶
Pour trier topologiquement un graphe acyclique orienté contenant
- Supposons
acyclique. Si , c’est que y devient rouge avant . On raisonne par l’absurde en supposant qu’il existe un arc . - Au moment de l’empilement de
(donc quand devient vert), si est bleu, alors est empilé après donc devient rouge avant, ce qui contredit . - Si au moment de l’empilement de
, est déjà rouge, alors , ce qui est absurde. - Donc au moment de l’empilement de
, est vert. Et comme il y a un arc , cela révèle un circuit : absurde.
Tri topologique graphe acyclique¶
Soit
- On suppose qu’existe un circuit élémentaire
et on prend dans ce circuit tel que . - Soit
le prédecesseur de dans . Comme , on a . Contradiction avec .
Composantes fortement connexes (CFC)¶
Observations¶
Soit
Le parcours en profondeur d’un graphe à partir d’un sommet
Principe¶
Définition: Graphe Transposé
Le graphe transposé
Soit
Parcourir en profondeur
Parcourir en profondeur le graphe transposé
L’ensemble des sommets
L’intersection des CFC de
CFC en MPI¶
On verra en MPI une meilleure méthode : l'algorithme de Kosaraju-Sharir.
Idée : Le graphe des CFC est orienté et acyclique et on le parcourt dans l'ordre inverse d'un de ses tris topologiques.