Information, Calcul, Communication Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne fait partie de son cours d’introduction à l’information, à la communication, et au calcul. Il s’inscrit dans le 1er module du cours qui offre une 1ere approche des notions de calcul et d’information. Information, Calcul, Communication 1. Information & Calcul – Leçon 2: Conception des Algorithmes Clip 3: Récursion – Principe et exemple J. Sam, J-C. Chappelier, R. Boulic, commentaire: P. Janson
Plan de la leçon Introduction Approche descendante Sommaire Divide & conquer Récursion Principe Exemple: les tours de Hanoï Terminaison Exemple: somme des N premiers nombres entiers Déroulement Exemple: tri par insertion Programmation dynamique Exemple: calcul du plus court chemin Sommaire Le clip précédent de cette leçon a décrit la méthode de conception d’algorithmes «Divide & Conquer» comme un archétype des méthodes de conception descendante. Il a aussi souligné que cette méthode mène souvent à des algorithmes dits récursifs. Tel est le sujet du présent clip.
Récursion Principe de base Subdiviser le problème à résoudre en des sous-problèmes qui lui sont identiques mais d’une moindre dimension (donc on espère: plus simples) Exemples Raisonnement par récurrence en mathématiques Algorithmes dits récursifs (le sujet du présent clip) (Par exemple: recherche par dichotomie (leçon 1, clip 5)) 1 Le principe de ce qu’on appelle la récursion est de subdiviser le problème à résoudre en des sous-problèmes qui lui sont en fait identiques, sauf que leur ordre de grandeur est inférieur (en termes de volumes de données) de telle sorte qu’on peut espérer qu’ils soient plus simples à résoudre. 2 On rencontre communément cette notion de récursion en pratique: ◮ Un de meilleurs exemples est le raisonnement par récurrence en mathématiques. ◮ Un autre exemple est précisément les algorithmes récursifs qui sont le sujet du présent clip. ◮ Nous avons d’ailleurs déjà rencontré un premier exemple de ces algorithmes dans la 1e leçon sans en avoir souligné explicitement le caractère récursif: la recherche par dichotomie.
Exemple: les tours de Hanoï – Définition du problème Déplacer une pyramide de disques de tailles croissantes, d’un pilier à un autre En ne déplaçant qu’un seul disque à la fois En ne posant un disque que sur un pilier vide ou sur un disque plus grand En utilisant un seul pilier de transition (c’est-à-dire 3 piliers au total) origine transition destination Pour illustrer plus explicitement ce concept de récursion, prenons un problème dont la solution est récursive par excellence: Le problème dit des tours de Hanoï. Ce problème, illustré par la présente figure, consiste à déplacer d’un pilier à un autre une pyramide de disques de tailles croissantes. Le problème serait trivial s’il n’était soumis à une série de conditions: 1°/ les disques sont hypothétiquement «tellement lourds» qu’on ne peut en déplacer qu’un seul à la fois. 2°/ quand on déplace un disque on ne peut le déposer que sur un disque plus grand ou sur un pilier vide. 3°/ on ne dispose au total que de trois piliers, - celui sur lequel est empilée la pyramide originale, - celui sur lequel elle doit être déplacée, et - un seul pilier de transition supplémentaire. Pour une explication plus détaillée de la notion de récursion et du problème des tours de Hanoï, nous vous recommandons vivement le videoclip de Christian Queinnec. © User:Evanherk (Wikimedia Commons) Voir explication plus détaillée sur http://moodle.epfl.ch/mod/url/view.php?id=870920
Exemple: les tours de Hanoï – Idée de base Imaginons qu’il existe une solution pour une pile de N disques Imaginons en plus que passer de N disques à N+1 disques soit facile Le problème étant trivial dans le cas d’une pile de 1 disque (voire 2 disques) les deux hypothèses ci-dessus permettraient de le résoudre en général pour n’importe quel nombre de disques puisque la 2e hypothèse permet par récurrence de bâtir une solution pour n’importe quel N à partir de la solution triviale pour N=1 La solution récursive de ce problème des tours de Hanoï se fonde sur deux hypothèses et une évidence. 1 La 1e hypothèse est qu’on imagine qu’il existe une solution pour le cas d’une pyramide de N disques. 2 La 2e hypothèse est qu’on imagine que si la 1e hypothèse est vérifiée, il soit facile de bâtir sur la solution pour N disques une solution pour N+1 disques. 3 L’évidence est que le problème est trivial si N=1 (et même si N=2). Donc si on arrive à vérifier les deux hypothèses le problème serait résolu en général puisque la 2e hypothèse permet par récurrence de bâtir une solution pour n’importe quel N à partir de la solution triviale pour N=1.
Exemple: les tours de Hanoï – Vérification des hypothèses 1. Point de départ Reste donc à vérifier que nos hypothèses tiennent la route. Pour ce faire, prenons par exemple une pyramide de départ de 5 disques à déplacer du pilier A au pilier C. A B C
Exemple: les tours de Hanoï – Vérification des hypothèses 2. 1e étape Si on accepte la 1e hypothèse (il existe une solution pour N=4 disques) les N (N=4) disques supérieurs du pilier A peuvent être déplacés au pilier B Si on accepte la 1e hypothèse pour N=4, c’est à-dire qu’il existe une solution pour déplacer 4 disques d’un pilier à un autre, il est donc possible de déplacer par exemple les 4 disques supérieurs du pilier A au pilier B. A B C
Exemple: les tours de Hanoï – Vérification des hypothèses 3. 2e étape Il est alors trivial de transférer le N+1e (5e) disque de A à C Ce déplacement effectué, on voit bien que le dernier disque restant sur A peut être déplacé sur C. A B C
Exemple: les tours de Hanoï – Vérification des hypothèses 4. Etape finale Si on accepte à nouveau la 1e hypothèse (il existe une solution pour N=4 disques) comme à la 1e étape, il est de également possible de déplacer les N (N=4) disques supérieurs du pilier B au pilier C … et le but est atteint, prouvant ainsi la 2e hypothèse: S’il existe une solution pour N disques elle peut être trivialement étendue à N+1 disques Or la solution est triviale pour 1 disque (voire 2 disques) donc par récursion elle est extensible à n’importe quel nombre de disques Enfin si on accepte à nouveau, comme à la 1e étape, la 1e hypothèse pour N=4, c’est à-dire qu’il existe une solution pour déplacer 4 disques d’un pilier à un autre, il est de nouveau possible de déplacer les 4 disques de la 1e étape du pilier B au pilier C, ce qui serait une solution au problème pour N=5. 1 Ce faisant nous avons atteint le but et au passage prouvé la validité de nos deux hypothèses de départ. En effet, nous avons prouvé que si nous avions une solution pour N (=4), bâtir sur elle une solution pour N+1 (=5) est trivial. Or nous savons que de toute évidence le cas N=1 (et même N=2) est trivial. Donc en vertu de l’inférence juste démontrée, on peut l’utiliser pour bâtir une solution pour n’importe quel N à partir de la solution pour N=1. A B C
déplacer 1 disque de origine à destination Algorithme récursif Tours de Hanoï entrée: 1 pyramide de N disques 3 piliers origine, transition, destination sortie: 1 pyramide de N disques sur le pilier destination Il résulte de la réflexion que nous venons de suivre que l’algorithme des tours de Hanoï peut être décrit de la façon récursive suivante: 1 Comme tout algorithme il porte un nom … «Tours de Hanoï» 2 Comme tout algorithme il attend un certain nombre de données en entrée, en l’occurrence 1 pyramide de N disques et 3 piliers appelés ici origine, transition, et destination 3 Comme tout algorithme il produit un certain résultat en sortie, en l’occurrence la même pyramide de N disques déplacée du pilier origine au pilier destination. 4 Maintenant l’algorithme lui-même n’a de sens que si N>0. 5 Si N=1 il se résume au cas trivial qui consiste à déplacer le seul disque du pilier origine au pilier destination. 6 Dans tous les autres cas (N>1) l’algorithme se divise en deux parties qui réappliquent chacune le même algorithme récursivement. La 1e de ces applications récursives vise à déplacer une pyramide de N-1 disques du pilier origine au pilier transition en utilisant comme transition le pilier destination. 7 La 2e de ces applications récursives vise à re-déplacer la pyramide de N-1 disques du pilier transition où l’a laissée la 1e application récursive au pilier destination en utilisant cette fois comme transition le pilier origine. Si N > 0 Tours de Hanoï entrée: n−1, origine, destination, transition déplacer 1 disque de origine à destination Tours de Hanoï entrée: n−1, transition, origine, destination
Exécution de l’algorithme A -> C Hanoi (2, A, C, B) A -> B C -> B 1 Si on imagine maintenant cet algorithme opérant sur une pyramide de 3 disques, on va voir que le problème original est décomposé de façon descendante en trois sous-problèmes consécutifs suivant la méthode «Divide & Conquer» appliquée de façon récursive. 2 Le 1er est une invocation récurrente du même algorithme sur une pyramide d’ordre N-1 (=2) qui échange en plus des rôles des piliers transition et destination. 3 Le 2e se réduit au cas trivial N=1. 4 Et le 3e est une invocation récurrente du même algorithme sur une pyramide d’ordre N-1 (=2) qui échange cette fois les rôles des piliers origine et transition. 5 Le 1er et le 3e de ces sous-problèmes sont chacun à leur tour décomposés de façon récursive en trois nouveaux sous-sous-problèmes dont chacun se réduit en fait au cas trivial N=1 (certes chaque fois avec les différents piliers jouant des rôles différents). Nous vous recommandons vivement de visionner l’animation GIF de cet algorithme sur wikimedia pour le cas N=4. Hanoi (3, A, B, C) A -> C B -> A Hanoi (2, B, A,C) B -> C A -> C Voir demo sur https://upload.wikimedia.org/wikipedia/commons/6/60/Tower_of_Hanoi_4.gif