Algorithmes récursifs

Documents pareils
Initiation à l algorithmique

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Corrigé des TD 1 à 5

Algorithmique et structures de données I

STAGE IREM 0- Premiers pas en Python

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

4. Les structures de données statiques

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Quelques algorithmes simples dont l analyse n est pas si simple

CORRECTION EXERCICES ALGORITHME 1

Algorithmique et Programmation, IMA

La fonction exponentielle


Logiciel Libre Cours 3 Fondements: Génie Logiciel

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

Correction du baccalauréat S Liban juin 2007

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Architecture des Systèmes d Information Architecture des Systèmes d Information

Algorithme. Table des matières

Algorithmes et mathématiques. 1. Premiers pas avec Python. Exo Hello world!

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

1 Recherche en table par balayage

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

IUT de Laval Année Universitaire 2008/2009. Fiche 1. - Logique -

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

Initiation à LabView : Les exemples d applications :

Cours d algorithmique pour la classe de 2nde

Licence Sciences et Technologies Examen janvier 2010

Initiation à la programmation en Python

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Représentation d un entier en base b

C f tracée ci- contre est la représentation graphique d une

Exercices - Polynômes : corrigé. Opérations sur les polynômes

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

Exercices de dénombrement

Définitions. Numéro à préciser. (Durée : )

Recherche dans un tableau

Durée de L épreuve : 2 heures. Barème : Exercice n 4 : 1 ) 1 point 2 ) 2 points 3 ) 1 point

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Algorithmique et programmation : les bases (VBA) Corrigé

III- Raisonnement par récurrence

Introduction à MATLAB R

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Feuille TD n 1 Exercices d algorithmique éléments de correction

Texte Agrégation limitée par diffusion interne

Cours d Informatique

Quelques Algorithmes simples

Raisonnement par récurrence Suites numériques

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Programmation C++ (débutant)/instructions for, while et do...while

Cours d Algorithmique et de Langage C v 3.0

Continuité et dérivabilité d une fonction

MIS 102 Initiation à l Informatique

Les algorithmes de base du graphisme

Qu est-ce qu une probabilité?

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Glossaire des nombres

ÉPREUVE COMMUNE DE TIPE Partie D

THEME : CLES DE CONTROLE. Division euclidienne

Puissances d un nombre relatif

Nombres premiers. Comment reconnaître un nombre premier? Mais...

Exercices - Nombres complexes : corrigé. Formes algébriques et trigonométriques, module et argument

Les nombres entiers. Durée suggérée: 3 semaines

Chapitre 1 Qu est-ce qu une expression régulière?

Par combien de zéros se termine N!?

Programmation avec Xcas ou Python

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Introduction à l algorithmique et à Java

Items étudiés dans le CHAPITRE N5. 7 et 9 p 129 D14 Déterminer par le calcul l'antécédent d'un nombre par une fonction linéaire

Probabilités conditionnelles Loi binomiale

Rappels sur les suites - Algorithme

ARBRES BINAIRES DE RECHERCHE

Découverte de Python

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Resolution limit in community detection

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Vous revisiterez tous les nombres rencontrés au collège, en commençant par les nombres entiers pour finir par les nombres réels.

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Cours d initiation à la programmation en C++ Johann Cuenin

Résolution de systèmes linéaires par des méthodes directes

Cours 1 : Qu est-ce que la programmation?

Bases de programmation. Cours 5. Structurer les données

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

TOUT CE QU IL FAUT SAVOIR POUR LE BREVET

Chapitre VI - Méthodes de factorisation

Maple: premiers calculs et premières applications

ALGORITHMIQUE ET PROGRAMMATION En C

Cours d arithmétique Première partie

Statistiques Descriptives à une dimension

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

POKER ET PROBABILITÉ

Activités numériques [13 Points]

Conversion d un entier. Méthode par soustraction

L ALGORITHMIQUE. Algorithme

Transcription:

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