Algorithmique - Semestre d’Automne 2011/2012 ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE Sections d’Informatique et de Systèmes de Communication 28 November 2011 Serie d’exercices 10 1. Recherche dans un labyrinthe On aimerait utiliser l’algorithme DFS du cours pour trouver la sortie d’un labyrinthe. Notre modéle de labyrinthe est un graphe dont les sommets sont des chambres et les arêtes sont des portes entre les chambres. L’un des nœuds est le départ, et un autre nœud est la sortie. a) Donner une variante de l’algorithme DFS qui donne explicitement le chemin des nœuds visités. On précise que simplement voir si un nœud est marqué n’est pas considéré une visite de ce nœud. Indice: En déscendant, il faut mémoriser le retour á prendre afin d’obtenir une suite de sommets adjacents. b) Montrer qu’une arête quelconque apparaı̂t au plus deux fois sur le chemin. c) Montrer que le chemin pour trouver la sortie est de longueur au plus 2n − 3. d) Donner une famille de graphes (pour des n arbitrairement grands) avec un sommet de départ tel que tout chemin de longueur 2n − 4 omet au moins un sommet. e) Montrer que dans un graphe quelconque, tout chemin de longueur < n − 1 omet au moins un sommet. 2. Tri topologique Voici un graphe orienté: a) Trier les sommets de ce graphe topologiquement. b) Prouver le théorème 7.3. du cours. 3. L’algorithme de Dijkstra Considérer le graphe suivant: 1 Algorithmique - Semestre d’Automne 2011/2012 6 10 4 12 2 1 3 2 1 2 3 1 4 9 2 2 1 1 1 5 3 3 6 1 11 6 6 7 8 4 10 a) Appliquer l’algorithme de Dijkstra sur ce graphe. Commencer au sommet 1. b) Modifier l’algorithme de Dijkstra pour qu’il fournisse pour chaque sommet v le plus court chemin du sommet de départ s à v et l’ensemble des sommets qui font partie de ce chemin. 4. Dijkstra et Moore-Bellman-Ford On considére un graphe G = (V, E) avec des poids pi sur les arêtes (i ∈ E), et deux sommets s et t. a) Si l’on multiplie les poids par une constante, le plus court chemin de s á t reste-t-il le même? b) Si l’on ajoute aux poids une constante c, le plus court chemin de s á t, reste-t-il le même ? c) Si les poids des arêtes sont non-negatifs, on peut appliquer ou bien Dijkstra ou bien MooreBellman-Ford. Lequel des algorithmes est alors préférable? Donner une famille de graphes tel que si le nombre de sommets n croı̂t, l’un des algorithmes est O(1) tandis que l’autre O(n3 ). 5. Dijkstra et Programmation Dynamique a) Comment peut-on se servir de l’algorithme de Dijkstra pour résoudre le probléme du Knapsack 0/1? b) Utiliser l’algorithme de Dijkstra pour résoudre le probléme LCS. (Donner la construction du graphe.) c) Comparer dans chacun des cas ci-dessus le nombre d’arêtes du graphe obtenu avec le temps de parcours de l’algorithme classique DP pour résoudre le probléme. d) Peut-on utiliser l’algorithme de Dijkstra pour résoudre le probléme de disposition optimale de parenthéses? 2