TD3 - LIFL

publicité
TD 3
Département Informatique
Graphes et langages
M2201
2015–2016
Dans ce TD, nous allons étudier un algorithme qui permet de calculer tous les sommets atteignables par
un chemin à partir d’un sommet initial.
Exercice 1 : Analyse d’algorithme : parcours en profondeur d’abord dans un graphe
Dans cette section, nous allons étudier un algorithme de parcours de graphe à partir d’un sommet i0 . On
dira que i est descendant de j s’il existe un chemin allant de j à i.
Dans cet algorithme, on utilise les notations suivantes :
— p(i) : cette valeur permet de savoir si le sommet i a été visité. Lorsque i n’est pas visité, p(i) = 0.
Sinon, p(i) a la valeur du sommet à partir duquel on l’a atteint. Par convention, on fixe p(i0 ) = i0 .
— n(i) est le nombre de successeurs de i qui n’ont pas encore été visités à partir de i. Initialement, cette
valeur est initialisée à |N + (i)| le nombre de successeurs de i.
// initialisation de l’algorithme
pour i = 1, . . . , n faire
p(i) ← 0 ;
n(i) ← |N + (i)| ;
fin
p(i0 ) ← i0 ;
i ← i0 ;
// on continue tant qu’on n’est pas revenu sur i0 en visitant tous ses successeurs
tant que n(i0 ) > 0 ou i 6= i0 faire
// on teste si tous les successeurs de i ont été vus
si n(i) 6= 0 alors
sélectionner parmi les successeurs de i le sommet j venant en position n(i) ;
n(i) ← n(i) − 1 ;
si p(j) = 0 alors
p(j) ← i ;
i←j;
fin
sinon
// on remonte d’un cran en revenant sur le sommet qui a permis d’atteindre i
// on dit qu’on ”ferme” le sommet i
i ← p(i)
fin
fin
Algorithme 1 : Parcours en profondeur d’abord dans un graphe
Q1 : Appliquez l’algorithme au graphe de la Figure 1, avec comme sommet initial 1.
On admettra dans un premier temps qu’on construit pas à pas une arborescence de racine i0 . On rapportera la situation à chaque passage de la boucle tant que en utilisant les conventions suivantes :
— initialement, l’arborescence ne contient que la racine ;
— quand on sélectionne un sommet j tel que p(j) = 0, on ajoute un arc avec un trait plein à l’arborescence ;
— quand on ferme le sommet i, on met l’arc (p(i), i) en pointillé.
Q2
Q3
Q4
Q5
Q6
Q7
:
:
:
:
:
:
Dans quelle situation est-on lorsque dans le test, on a n(i0 ) = 0 et i = i0 ?
Montrez qu’au cours de l’algorithme, on construit une arborescence de racine i0 .
À quelle condition un sommet est-il retiré de l’arborescence ?
Montrez que tout sommet qui est descendant de i0 est atteint au cours de l’algorithme.
Quelle est la complexité de l’algorithme si on utilise une liste de sucesseurs ?
Même question si on utilise une matrice d’adjacence.
2
3
5
1
7
6
4
Figure 1 – Graphe 1
Exercice 2 : Modélisation : la chèvre, le loup, le chou
Un berger cherche à faire passer un chou (un gros), une chèvre, et un loup de l’autre côté de la rivière.
Il ne peut emporter qu’un seul des trois dans sa barque à la fois.
De plus, si la chèvre et le chou sont ensemble sur une rive quand le berger s’éloigne, la chèvre mange le
chou. Si le loup et la chèvre sont ensemble quand le berger s’éloigne, le loup mange la chèvre.
Q8 : Proposez une modélisation du problème sous forme de graphe.
Q9 : Appliquez la méthode de votre choix pour résoudre ce problème informatiquement.
On peut étendre le problème en ajoutant un bâton et une torche enflammée. Cette fois, le berger peut
emporter deux objets ou animaux à la fois.
Si le bâton et le loup sont ensemble quand le berger s’éloigne, le bâton bat le loup. Si le feu et le bâton
sont ensemble quand le berger s’éloigne, le feu brûle le bâton.
Q10 : Appliquez votre méthode sur ce nouveau graphe.
Téléchargement