Licence 1 MASS - Algorithmique et Calcul Formel S. Verel, M.-E. Voge www.i3s.unice.fr/ verel 23 mars 2007
Objectifs de la séance 3 écrire des algorithmes récursifs avec un seul test rechercher un élément dans un tableau par dichotomie récursivement Questions principales du jour : Comment écrire ce que l on ne connait pas encore? S. Verel, M.-E. Voge
Plan Principe de la récursivité 1 Principe de la récursivité Decendre ou monter un escalier Couper un gâteau 2 Définition Algorithmes classiques 3 S. Verel, M.-E. Voge
Les puissances de a Decendre ou monter un escalier Couper un gâteau Objectif : Calculer a n en "travaillant" le moins possible on sait que a n = a a n 1... Itératif : chouette! on connaît a 0!!! Récusif : si seulement on connaissait a n 1... S. Verel, M.-E. Voge
L escalier & la puissance a n = a a n 1 Decendre ou monter un escalier Couper un gâteau arrivee depart arrivee depart n n 1 0 a^0 = 1 ITERATIF 1 0 a^0 = 1 RECURSIF départ : info connue monter vers résultat arêt en haut : n boucle pour départ : info cherchée descendre vers connue arêt en bas : 0 monter vers résultat comment??? S. Verel, M.-E. Voge
Construction de l algorithme récursif Decendre ou monter un escalier Couper un gâteau on sait : 1 monter/descendre d une marche : a n = a a n 1 2 a 0 = 1 mais : plusieurs marches... comment faire le reste du travail? Solution : appel récursif l agorithme fait une partie du travail (descendre/monter une marche) demande à un algorithme de faire le reste : lui même S. Verel, M.-E. Voge
Exemple d exécution Calcul de la puissance Decendre ou monter un escalier Couper un gâteau Algorithme puissance(a : réel, n : entier): : réel début si n = 0 alors retourner 1 retourner puissance(a, n-1) * a fin S. Verel, M.-E. Voge
Exemple d exécution Calcul de la puissance Decendre ou monter un escalier Couper un gâteau Calcul de (1.5) 3 : a = 1.5 et n = 3. 1. puissance(1.5, 3) 2. > puissance(1.5, 2) 3. -> puissance(1.5, 1) 4. -> puissance(1.5, 0) = 1 5. -> puissance(1.5, 1) = 1 * 1.5 = 1.5 6. > puissance(1.5, 2) = 1.5 * 1.5 = 2.25 7. puissance(1.5, 3) = 2.25 * 1.5 = 3.375 S. Verel, M.-E. Voge
Autre problème : le PGCD Decendre ou monter un escalier Couper un gâteau monter/descendre : PGCD(a, b) = PGCD(b, a modulo b) PGCD(a, 0) = a S. Verel, M.-E. Voge
Exemple du calcul du pgcd Decendre ou monter un escalier Couper un gâteau Algorithme PGCD(a, b : entier): : entier début 1: si b = 0 alors 2: retourner a 3: 4: c a modulo b 5: retourner PGCD(b, c) 6: fin S. Verel, M.-E. Voge
Exécution de l algorithme Decendre ou monter un escalier Couper un gâteau Pour a = 72 et b = 34 1. PGCD(72, 34) 2. b 0 5. c = 4 6. PGCD(34, 4) 2. b 0 5. c = 2 6. PGCD(4, 2) 2. b 0 5. c = 0 6. PGCD(2, 0) 2. b = 0 3. PGCD = 2 S. Verel, M.-E. Voge
Une autre vision de la récursivité Decendre ou monter un escalier Couper un gâteau Problème : manger un gâteau énorme gâteau, seulement une bouchée à la fois, on sait couper en deux tout morceau de gâteau, on le coupe en petits morceaux et on les mange! Exemple : recherche dichotomique dans un tableau trié tableau T de n cases, vérifier seulement une case à la fois, on sait réduire la taille de T (jouer sur les indices), on le coupe en petits tableaux et on cherche dans chacun! S. Verel, M.-E. Voge
Recherche dichotomique Recherche dans un tableau de nombres entiers ordonnés Decendre ou monter un escalier Couper un gâteau Algorithme recherche(n :entier, t :tableau d entiers, a, b : entier): : booléen variable c : entier début si a > b alors retourner Faux // il ne reste plus de cases à vérifier c (a + b)/2 // on coupe si t[c] = n alors retourner Vrai // on est tombé juste sur la bonne case si t[c] < n alors retourner recherche(n, t, c+1, b) // on cherche dans une partie retourner recherche(n, t, a, c-1) // on cherche dans l autre fin S. Verel, M.-E. Voge
Exécution de l algorithme Decendre ou monter un escalier Couper un gâteau t : 2 5 6 8 11 15 20 1. recherche(6, t, 0, 6) 2 5 6 8 11 15 20 1. c = 3 1. t[3] > 6 2. > recherche(6, t, 0, 2) 2 5 6 8 11 15 20 2. c = 1 2. t[1] < 6 3. -> recherche(6, t, 2, 2) 2 5 6 8 11 15 20 3. c = 2 3. t[2] = 6 3. -> recherche(6, t, 2, 2) = Vrai 4. > recherche(6, t, 0, 2) = Vrai 5. recherche(6, t, 0, 6) = Vrai S. Verel, M.-E. Voge
Points communs et IMPORTANTS Decendre ou monter un escalier Couper un gâteau 1 appel récursif UNIQUEMENT sur données plus petites marche du dessous : n 1 au lieu de n, (b,a mod b) au lieu de (a,b), demi-morceau de gâteau : demi-tableau, 2 faire le travail pour passer à des données plus petites monter/descendre une marche : n en fonction de n 1, couper le gˆteau, 3 identifier les cas à résoudre sans appel récursif : première marche : n = 0, (a, 0), bouchée de gâteau : une case de tableau, 4 s arrêter à temps, plus de sens : dernière marche : n < 0, plus que des bouchées : a > b : pas de case, S. Verel, M.-E. Voge
Decendre ou monter un escalier Couper un gâteau Structure de ces algorithmes : exemple du PGCD Base : où on s arrête, pas d appel récursif si b = 0 alors retourner a... Hérédité : calcul à partir de paramètres plus "petits" si b = 0 alors...... retourner PGCD(b, c) fin S. Verel, M.-E. Voge
Définition (informelle) Définition Algorithmes classiques Un algorithme récursif est un algorithme qui fait appel à lui-même dans le corps de sa propre définition. Il existe deux types d algorithmes récursifs : les algorithmes récursifs qui se terminent : au bout d un nombre fini d opérations, l algorithme s arrête. les algorithmes récursifs qui ne se terminent pas : on peut imaginer que l algorithme continue "éternellement" de calculer. S. Verel, M.-E. Voge
Exemples Principe de la récursivité Définition Algorithmes classiques Algorithme calcul1(n : entier): : réel début si n = 0 alors retourner 2 retourner 1 2 (n 1) + 2 fin calcul1 n est pas un algorithme résursif S. Verel, M.-E. Voge
Exemples Principe de la récursivité Définition Algorithmes classiques Algorithme calcul2(n : entier): : réel début si n = 0 alors retourner 2 retourner 1 2 calcul2(n-1) +2 fin calcul2 est un algorithme résursif qui se termine S. Verel, M.-E. Voge
Exemples Principe de la récursivité Définition Algorithmes classiques Algorithme calcul3(n : entier): : réel début si n = 0 alors retourner 2 retourner 1 2 calcul3(n-2)+2 fin calcul3(n) est un algorithme résursif : si n est pair, calcul3 se termine si n est impair, calcul3 ne se termine pas S. Verel, M.-E. Voge
A méditier Calcul de la puissance Principe de la récursivité Définition Algorithmes classiques Algorithme puissanceterminale(a : réel, n : entier, acc : réel): : réel début si n = 0 alors retourner acc retourner puissanceterminale(a, n 1, acc a) fin Comment s exécute cet algorithme? puissanceterminale(1.5, 3, 1) récursivité terminale : équivalent à une itération résultat final donné par appel récursif condition de "base" = condition arêt boucle tantque S. Verel, M.-E. Voge
Intérêts Principe de la récursivité Définition Algorithmes classiques bien adapté à la résolution de certains problèmes (et pas seulement mathématiques!) algorithmes souvent moins "laborieux" à écrire : moins de variables, beaucoups moins de boucles. une résolution par algorithme récursif nécessite souvent de prendre du recul pour résoudre le problème (avantage!) S. Verel, M.-E. Voge
Définition Algorithmes classiques Parallèle entre principe de récurrence et algorithme récursif définition mathématique par récurrence très proche définition d un algorithme récursif (cf. puissance) Modes de calcul proches : a 3 = a.a 2 = a.a.a 1 = a.a.a Souvent, définition mathématique valide lorsque algorithme récursif associé se termine. S. Verel, M.-E. Voge
Définition Algorithmes classiques Parallèle entre principe de récurrence et algorithme récursif Base : initialisation de la récurrence si b = 0 alors retourner a... Hérédité : calcul à partir de paramètres plus "petits" si b = 0 alors...... retourner PGCD(b, c) fin S. Verel, M.-E. Voge
Calcul de la factorielle Définition Algorithmes classiques Factorielle { 1, si n = 0 n! = n.(n 1)!, Algorithme factorielle(n : entier): : entier début si n = 0 alors retourner 1 retourner n * factorielle(n-1) fin S. Verel, M.-E. Voge
Exécution de l algorithme Définition Algorithmes classiques Calcul de 3!. 1. factorielle(3) = 3 * factorielle(2) 2. > factorielle(2) = 2 * factorielle(1) 3. -> factorielle(1) = 1 * factorielle(0) 4. -> factorielle(0) = 1 5. -> factorielle(1) = 1 * 1 = 1 6. > factorielle(2) = 2 * 1 = 2 7. factorielle(3) = 3 * 2 = 6 S. Verel, M.-E. Voge
Recherche dichotomique Recherche d un mot dans un dictionnaire Définition Algorithmes classiques début pages de recherche <- dictionnaire tant que mot lu n est pas le mot recherché faire lire mot médian des pages de recherche si le mot lu est plus petit que mot recherché alors pages de recherche <- pages à droite du mot lu pages de recherche <- pages à gauche du mot lu fin tant que retourner (mot lu) fin S. Verel, M.-E. Voge
Recherche dichotomique Recherche d un mot dans un dictionnaire Définition Algorithmes classiques Algorithme recherche(m : mot, l : liste): : booléen variable lu : mot début lu median(l) si lu = m alors retourner Vrai si lu < m alors retourner recherche( liste à droite de lu) retourner recherche( liste à gauche de lu) fin Incomplet (jamais Faux)!! S. Verel, M.-E. Voge
Recherche dichotomique Recherche d un mot dans un dictionnaire Définition Algorithmes classiques Algorithme recherche(m : mot, l : liste): : booléen variable lu : mot début si l est vide alors retourner Faux lu median(l) si lu = m alors retourner Vrai si lu < m alors retourner recherche( liste à droite de lu) retourner recherche( liste à gauche de lu) S. Verel, M.-E. Voge
Quand utiliser un algorithme récursif? Est-ce que le problème dépend d un (ou plusieurs) paramètre(s)? Est-il possible de résoudre le problème lorsque la (les) valeur(s) du paramètre est "petite(s)"? Est-il possible de résoudre le problème à l aide de la résolution du problème portant sur une (des) "plus petite(s)" valeur(s) du paramètre? Si oui, oui, oui alors la résolution par un algorithme récursif est à envisager. S. Verel, M.-E. Voge
Tours de Hanoï (Édouard Lucas 1842-1891) Le problème des tours de Hanoï consiste à déplacer N disques de diamètres différents d une tour de départ à une tour d arrivée en passant par une tour intermédiaire et ceci en un minimum de coups, tout en respectant les règles suivantes : on ne peut déplacer plus d un disque à la fois, on ne peut placer un disque que sur un autre disque plus grand que lui ou sur un emplacement vide. S. Verel, M.-E. Voge
Comment résoudre ce problème? Est-ce que le problème dépend d un (ou plusieurs) paramètre(s)? Oui le nombre de disques. Est-il possible de résoudre le problème lorsque la (les) valeur(s) du paramètre est "petite(s)"? Oui lorsque le nombre de disque est 1. Est-il possible de résoudre le problème à l aide de la résolution du problème portant sur une (des) "plus petite(s)" valeur(s) du paramètre? Oui... S. Verel, M.-E. Voge
Algorithme récursif Algorithme hanoi(n : entier, A : caractère, B : caractère, C : caractère ): : rien début si n = 1 alors écrire("déplacer ", A, " vers ", C) hanoi(n-1, A, C, B) ; écrire("déplacer ", A, " vers ", C) hanoi(n-1, B, A, C) ; fin S. Verel, M.-E. Voge
Exécution de l algorithme Hanoi(2, a, b, c ) Hanoi(3, a, b, c ) Hanoi(4, a, b, c ) Quel est le nombre de déplacements en fonction de n? Pour tout entier n 1, C n = 2 n 1. A démontrer par récurrence... Pour n = 64, les moines d Hanoi y sont encore... S. Verel, M.-E. Voge
Somme des cubes Calculer S(n) = 1 3 + 2 3 + 3 3 +... + n 3 Est-ce que le problème dépend d un (ou plusieurs) paramètre(s)? Oui n. Est-il possible de résoudre le problème lorsque la (les) valeur(s) du paramètre est "petite(s)"? Oui pour n = 0 ou n = 1 Est-il possible de résoudre le problème à l aide de la résolution du problème portant sur une (des) "plus petite(s)" valeur(s) du paramètre? Oui, S(n) = S(n 1) + n 3 S. Verel, M.-E. Voge
Somme des cubes Algorithme Algorithme sommecube(n : entier): : entier début si n = 0 alors retourner 0 retourner sommecube(n-1) +n 3 fin S. Verel, M.-E. Voge
Exécution de l algorithme Calcul de S(3) 1. sommecube(3) 2. > sommecube(2) 3. -> sommecube(1) 4. -> sommecube(0) = 0 5. -> sommecube(1) = 0 + 1 3 = 1 6. > sommecube(2) = 1 + 2 3 = 9 7. sommecube(3) = 9 + 3 3 = 18 S. Verel, M.-E. Voge
Régionnement du plan Etant donné un nombre n de droites, calculer le nombre R n maximum de régions du plan obtenus Est-ce que le problème dépend d un (ou plusieurs) paramètre(s)? Oui le nombre n de droites. Est-il possible de résoudre le problème lorsque la (les) valeur(s) du paramètre est "petite(s)"? Oui pour n = 0 ou n = 1 Est-il possible de résoudre le problème à l aide de la résolution du problème portant sur une (des) "plus petite(s)" valeur(s) du paramètre? Oui, en comptant le nombre régions ajoutées lorsqu on ajoute une droite à n 1 droites : une région supplémentaire par droite coupée, plus une dernière région. S. Verel, M.-E. Voge
Régionnement du plan Algorithme Algorithme region(n : entier): : entier début si n = 0 alors retourner 1 retourner region(n-1) +n fin S. Verel, M.-E. Voge
Objectifs de la séance 3 écrire des algorithmes récursifs comme par exemple celui calculant la factorielle et recherchant un élément par dichotomie Questions principales du jour : Comment écrire ce que l on ne connait pas encore? S. Verel, M.-E. Voge
Travail de documentation Trouver de la documentation en rapport avec l ensemble de l enseignement. Quels sont vos premières références? S. Verel, M.-E. Voge