Notes de cours IFT 2125 Fouilles des graphes (rappel) version 0.75

Notes de cours IFT 2125
Fouilles des graphes
(rappel)
version 0.75
le 10 d´ecembre 2013
NB. Les versions inf´erieures `a 1.0 sont pr´eliminaires et il faut les lire soigneusement. Des
erreurs rapport´ees donnent des points suppl´ementaires au rapporteur.
Soit G= (V, E) un graphe. Pour l’explorer, on cherche des algorithmes qui visitent tous
les sommets. Les principaux, qui sont `a la base d’autres algorithmes, sont la FEP, fouille en
profondeur, et la F EL, fouille en largeur (depth-first search, DFS, et breadth-first search,
BFS). Il y a plusieurs mani`eres de les d´ecrire. Par exemple, la FEP peut-ˆetre r´ecursive :
Algorithme 1 FEP(G)
Marquer tout sommet de Vnon-visit´e
Pour tout sommet vde Vnon-visit´e faire
DFS(v)
DFS(v)
Marquer vvisit´e Pour tout uN(v)non-visit´e faire DFS(u)
Mais les deux approches se ressemblent beaucoup et on peut les r´eunir dans un seul
algorithme non-r´ecursif comprennat une structure de donn´ee SD ind´etermin´ee - elle sera
soit pile, soit queue, suivant si on veut la FEP ou la FEL. L’autre diff´erence est le moment
o`u on marque les sommets comme visit´es : dans la FEP, on les marque au moment de la
sortie de la pile, dans la FEL c’est au moment de l’ajout `a la queue.
Soit donc SD une des deux structures de donn´ees et soit AJOUT (v, SD) et RET (SD)
les proc´edures qui ajoutent le sommet v`a la structure et en retirent le sommet suivant.
Rappelons que dans une queue, on ajoute les sommets `a la fin et on les retire au d´ebut
(premier entr´e - premier sorti) tandis que dans une pile, on ajoute les sommets devant et
on les retire devant (dernier entr´e - premier sorti). On peut alors ´ecrire uRET (SD)
pour indiquer que c’est le sommet uqui est retir´e de la SD. Les impl´ementations de ces
structures sont ´etud´ees en IFT 2015, par exemple. On obtient quelque chose comme (NB.
les commandes qui commencent par (FEX) sont execut´ees si et seulement si on fait FEX,
X∈ {P, L}):
Algorithme 2 FEX(G)
Marquer tout sommet de Vnon-visit´e
Pour tout sommet vde Vnon-visit´e faire
SD vide
(FEL) Marquer vvisit´e
1
AJOUT(v,SD)
tant que SD n’est pas vide faire
uRET(SD)
(FEP) Marquer uvisit´e
Pour tout xN(u)non-visit´e faire
(FEL) Marquer xvisit´e
AJOUT(x,SD)
Dans les exercices suivant, vous pouvez parfois modifier l’agorithme g´en´erique FEX,
parfois il vaut mieux faire la FEP et la FEL s´eparement.
Exercice 1 On peut num´eroter les sommets dans l’ordre dans lequel on les visite. Modifiez
l’algorithme pour qu’il le fasse.
Exercice 2 La FEP et la FEL cr´ee chacune une arborescence (si le graphe est connexe)
avec comme racine le premier sommet choisi. Modifier l’algorithme pour qu’il retourne cette
arborescence.
Exercice 3 Si le graphe est orient´e, on peut suivre les arcs dans le bon sens. Modifier
l’algorihme pour le faire.
Exercice 4 Pour trouver un ordre topologique d’un graphe orient´e D= (V, A), on num´erote
les sommets par une FEP, mais au moment o`u la proc´edure fait demi-tour, i.e. au moment
ou un sommet n’a plus de voisin non-visit´es (comme on a vu en classe, pour obtenir l’ordre
topologique, on inverse cette num´erotation). Modifier l’algorithme pour qu’il soit retourne
un ordre topologique de D, soit rentourne un circuit en disant qu’un tel ordre n’existe pas
parce que le graphe contient un circuit.
Consid´erons la FEP. On commence par un sommet que l’on prend comme racine d’une
arborescence. Quand on visite un sommet upour la premi`ere fois (comme enfant du sommet
vque l’on vient de visiter), on lui attribue un num´ero f ep(u) (le suivant, dans l’ordre, la
racine ayant le num´ero 1) et on “mets” (implicitement, m`eme si l’exercice 2 vous demande
de rendre l’op´eration explicite) l’arˆete uv dans l’arborescence. Si xy est une arˆete du graphe
qui n’est dans l’abroberescence cr´ee par la FEP, elle relie forc´ement deux sommets d’une
mˆeme branche de l’arborescence, i.e., l’un des deux sommets est descendant de l’autre.
Exercice 5 Pourquoi?
Dans ce cas tous les sommets entre xet ysur la branche sont dans un cycle et on ne peut
pas les d´econnecter entre eux par l’enl`evemen d’un seul sommet. Ceci sugg`ere une proedure
pour trouver les points d’articulation et des blocs d’un graphe (voir les d´efinitions).
En faisant une FEP, ´etiqueter chaque sommet ulors de la premi˜ere visite par une couple
(fep(u), up(u)); cette premi`ere fois up(u) = f ep(u). A chaque visite ult´erieure de u– i.e. en
2
y remontant d’un de ces enfants v– mettre `a jour up(u)min{up(v), up(u)}. Chaque fois
que l’on consid`ere un voisin zde ud´ej`a visit´e, mettre `a jour up(u)min{f ep(z), up(u)}.
Chaque fois que la mise-`a-jour laisse up(u)up(v), uest un point d’articulation. La racine
est exceptionnelle - elle est point d’articulation si et seulement si elle a plus qu’un enfant.
Exercice 6 Pourquoi?
Exercice 7 Ecrivez un algorithme (pas un programme, un algorithme en pseudo-code, avec
du fran¸cais ou de l’anglais) qui prend en entr´ee un graphe Get sort les points d’articulation
de Gainsi que les blocs de G. Notons qu’un points d’articulation peut-ˆetre dans plusiuers
blocs et que les blocs sont en fait des composantes 2-connnexe sauf s’il sont des arˆetes.
3
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !