Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Cours 3

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 14

Cours: génie algorithmique

cours 3:La récursivité et


le paradigme ‘’diviser pour régner’’
Dr. Dhouha Maatar Razgallah
2019/2020

Outline
 Algorithmes récursifs
 Application: factorielle
 Application: tours de Hanoi
 Paradigme ‘’diviser pour régner’’
 Application: recherche dichotomique
 Application: recherche maximum

1
Algorithmes récursifs Définition

La récursivité est le fait pour une méthode de s'appeler elle même.


On parle alors de méthode récursive.

Exemple : Le calcul de la factorielle de N.


N != N*(N-1)*(N-2)*…*2*1 , on peut écrire ainsi N != N*(N-1)!

La factorielle de N est définie en fonction de la factorielle de N-1


La fonction a besoin d’elle-même pour donner un résultat
 Pour calculer N! il faut savoir calculer (N-1) ! et pour calculer (N-1) ! Il faut
savoir calculer (N-2) ! et ainsi jusqu’à 1! qui est égal à 1 et qui permet à la
récursivité de s’arrêter après une série d’auto appels.
-> Il est impératif donc de prévoir une condition d’arrêt à la récursion sinon le
programme ne s’arrête jamais!
 A l’opposé de la récursion, l’itération utilise les structures de contrôle
répétitives comme POUR, TANT QUE, REPETER JUSQU'À
3

Algorithmes récursifs Itératif vers récursif

2
Algorithmes récursifs Evolution d’un appel récursif
 L’exécution d’un appel récursif passe par deux phases, la phase de
descente et la phase de remontée.
 Dans la phase de descente, chaque appel récursif fait à son tour un appel
récursif.
 En arrivant à la condition terminale, on commence la phase de remontée
qui se poursuit jusqu’à ce que l’appel initial soit terminé, ce qui termine le
processus récursif.
 Exemple:

Algorithmes récursifs types de récursivité

 Récursivité simple
C’est une fonction qui contient dans son corps un seul appel
récursif.
Exemple: Fonction Factorielle

3
Algorithmes récursifs types de récursivité

 Récursivité multiple
La fonction contient plus qu’un appel récursif dans son corps.
Exemple: Calcul du nombre de combinaisons en se servant de la
relation de Pascal:

Algorithmes récursifs types de récursivité

 Récursivité mutuelle
Des fonctions sont dites mutuelles récursives si elles dépendent
les unes des autres.
Exemple: La définition de la parité.

4
Algorithmes récursifs types de récursivité

 Récursivité imbriquée
ça consiste à faire un appel récursif à l’intérieur d’un autre appel récursif.
Exemple: La fonction d’Ackermann.

Algorithmes récursifs terminale vers non terminale

Récursivité terminale vers non terminale


 Un module récursif est dit terminal si aucun traitement n’est effectué
après la remontée d’un appel récursif (sauf le retour du module).
 Un module récursif est dit non terminal si le résultat de l’appel récursif
est utilisé pour réaliser un traitement (en plus du retour du module).
Exemple: fonction factorielle

10

5
Algorithmes récursifs terminale vers non terminale

Récursivité terminale vers non terminale

11

Algorithmes récursifs Calcul de complexité


 La complexité d’un algorithme récursif se fait par la résolution d’une
équation de récurrence en éliminant la récurrence par substitution de
proche en proche.
 Exemple 1 : La fonction factorielle
(avec T(n) le temps d’exécution nécessaire pour un appel à Facto(n)).

12

6
Algorithmes récursifs Calcul de complexité
 Exemple 1 : La fonction factorielle
Pour calculer la solution générale de cette équation, on peut procéder par
substitution:

13

Algorithmes récursifs Calcul de complexité


 Exemple 2 : Tours de Hanoi
Déplacer n disques (empilés les unes sur les autres) d un piquet (A) vers un
autre (B) en utilisant un troisième (c) comme intermédiaire.
Ce sont des piles donc on ne peut accéder qu’au disque du sommet.
Un disque ne peut jamais être placé au dessus d’un autre plus petit.

14

7
Algorithmes récursifs Calcul de complexité
 Exemple 2 : Tours de Hanoi
Conception de la solution

15

Algorithmes récursifs Calcul de complexité


 Exemple 2 : Tours de Hanoi

16

8
Calcul de complexité

Rappel Sommation

17

Paradigme ‘’diviser pour régner’’ Principe


Principe:

Spécifier la solution du problème en fonction de la (ou des) solution(s) d’un


(ou de plusieurs) sous-problème(s) plus simple(s) traité(s) de façon récursive.

Le paradigme ‘’diviser pour régner’’ parcourt trois étapes à chaque appel
récursif à savoir:
Diviser: le problème en un certain nombre de sous-problèmes de taille
moindre.
Régner: sur les sous-problèmes en les résolvant d’une façon récursive ou
directement si la taille d’un sous-problème est assez réduite.
Combiner: les solutions des sous-problèmes en une solution globale
pour le problème initial.

18

9
Paradigme ‘’diviser pour régner’’ Principe

Principe:

19

Paradigme ‘’diviser pour régner’’ Complexité


Formule de complexité:

Le temps d’exécution d’un algorithme ‘’diviser pour régner’’ se décompose


suivant les trois étapes du paradigme de base.
Diviser: le problème en a sous-problèmes chacun de taille 1/b de la taille
du problème initial. Soit D(n) le temps nécessaire à la division du problèmes
en sous-problèmes.
Régner: soit a T(n/b) le temps de résolution des a sous-problèmes.
Combiner: soit C(n) le temps nécessaire pour construire la solution finale
à partir des solutions aux sous-problèmes.

Finalement le temps d’exécution global de l’algorithme est :


T(n) = a T(n/b) +D(n) + C(n)
Soit la fonction f(n) qui regroupe D(n) et C(n). T(n) est alors définie:
T(n) = a T(n/b) +f(n) 20

10
Paradigme ‘’diviser pour régner’’ Complexité

Théorème de résolution de la récurrence

21

Paradigme ‘’diviser pour régner’’ recherche dichotomique

Exemple: recherche dichotomique

Soit Tab un tableau trié (ordre croissant) à n éléments.

 La recherche par dichotomie compare l’élément cherché x avec l’élément en


position m situé en position du milieu du sous-tableau:

• Si Tab[m] =x: alors on a trouvé l’élément x en position m.


• Si Tab[m] > x: il est possible que x se trouve avant la position m du tableau.
Il reste à traiter uniquement la moitié inférieure du tableau.
• Enfin Si Tab[m] < x: il est possible que x se trouve après la position m.
Il reste à traiter uniquement la moitié supérieure du tableau.

 On continue ainsi la recherche jusqu’à trouver l’élément ou bien aboutir à un


tableau de taille nulle, dans ce cas x n’est pas présent et la recherche s’arrête.
22

11
Paradigme ‘’diviser pour régner’’ recherche dichotomique

Exemple: recherche dichotomique


Fonction dicho _recursif (T:tab, borneinf,bornesup: entier; x: entier):booleen
Debut T(n)
Si (borneinf<= bornesup) alors
mil ← (borneinf + bornesup) div 2
si (T[mil] = x) alors
retourner (vrai)
sinon
si (T[mil] > x) alors
retourner dicho_recursif(T, borneinf, mil-1, x)
sinon T(n/2)
retourner dicho_recursif(T, mil+1, bornesup, x)
finsi
Finsi
sinon
retourner (faux) T(n) = T(n/2) +C
Finsi 23
Fin

Paradigme ‘’diviser pour régner’’ recherche dichotomique

Complexité de recherche dichotomique


D’après le théorème du paradigme ’’diviser pour régner’’, on a:

Complexité de l’algorithme de recherche dichotomique

24

12
Paradigme ‘’diviser pour régner’’ Recherche maximum

 Exemple : Recherche maximum


Soit Tab un tableau à n éléments, écrire une fonction récursive permettant de
rechercher l’indice du maximum dans Tab en utilisant le paradigme
‘’diviser pour régner’’.

25

Paradigme ‘’diviser pour régner’’ Complexité


 Exemple : Recherche maximum

26

13
Paradigme ‘’diviser pour régner’’ Complexité
 Exemple : Recherche maximum

 Complexité de l’algorithme de recherche du maximum

27

14

Vous aimerez peut-être aussi