SlideShare une entreprise Scribd logo
1  sur  62
Télécharger pour lire hors ligne
CHAPITRE IV:
RÉCURSIVITÉ
Université Saad Dahlab – Blida1
Faculté des Sciences
Département d’Informatique
Licence d’Informatique
Semestre 3 (2ème année)
Algorithmique et Structures de Données
Mme AROUSSI
2016-2017
Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/
 Définition
 Évolution d’un appel récursif
 Types de la récursivité
 Paradigme « Diviser pour régner »
 Conception d’un algorithme récursif
 Complexité des algorithmes récursifs
2
PLAN DU CHAPITRE IV
3
 Un algorithme est dit récursif lorsqu’il est auto-
référent: il fait référence à lui-même dans sa définition.
 Autrement dit, un algorithme est dit récursif s'il est défini
en fonction de lui-même, directement ou indirectement.
DÉFINITION
4
 Exemple : la factorielle n!
Itératif
n! = 1 * 2 * ... * n
Récursif
n! = n * (n-1)!
Facto (n: entier): entier
Début
F1;
Pour i2 à n faire
FF*i;
retourner F;
Fin
Facto (n: entier): entier
Début
retourner n*Facto (n-1);
Fin
EXEMPLE
5
 L'exécution d'un appel récursif passe par deux phases, la
phase de descente et la phase de la remontée :
 Dans la phase de descente, chaque appel récursif fait à son tour
un appel récursif.
ÉVOLUTION D’UN APPEL RÉCURSIF
Facto(4)  4 * Facto(3)
Facto(3)  3 * Facto(2)
Facto(2)  2 * Facto(1)
Facto(1)  1 * Facto(0)
Facto(4)  0 * Facto(-1)
Facto (n: entier): entier
Début
retourner n*Facto (n-1);
Fin
6
 Puisqu'un algorithme récursif s'appelle lui-même, il est
impératif qu'on prévoit une condition d'arrêt à la
récursion, sinon le programme ne s'arrête jamais!
 Exemple 1: la factorielle n!
Version précédente Version correcte
Facto (n: entier): entier
Début
retourner n*Facto (n-1);
Fin
Facto (n: entier): entier
Début
Si (n=1) alors retourner 1
Sinon retourner n*Facto (n-1);
Fin
ÉVOLUTION D’UN APPEL RÉCURSIF
CONDITION D’ARRÊT
7
 En arrivant à la condition terminale, on commence la phase de la
remontée qui se poursuit jusqu'à ce que l'appel initial soit terminé,
ce qui termine le processus récursif.
ÉVOLUTION D’UN APPEL RÉCURSIF
Facto(4)  4 * Facto(3)
Facto(3)  3 * Facto(2)
Facto(2)  2 * Facto(1)
24
1
2
6
Phasedelaremontée
Facto (n: entier): entier
Début
Si (n=1) alors retourner 1
Sinon retourner n*Facto (n-1);
Fin
8
EXERCICE 1
1. Som (n) calcule la somme des n premiers naturels
2. Som (a, b) calcule la somme des entiers a et b
3. Prod (a, b) calcule le produit de entiers a et b
4. Puiss (a, b) calcule a puissance b
5. Quotient (a, b) calcule le quotient de a par b
6. Reste (a, b) calcule le reste de division de a par b
7. PGCD (a, b) calcule le Plus Grand Commun Diviseur entre a et b
8. Fib (n) calcule la suite de Fibonacci (Un = Un-1 + Un-2 si n > 1, sinon
U0 = U1 = 1)
9
1. La somme des n premiers
Itératif
Som (n) = 0+ 1 + 2 + ... + n
Récursif
Som (n) = n + Som (n-1)
Som (n: entier): entier
Début
S0;
Pour i1 à n faire
SS+i;
retourner S;
Fin
Som (n: entier): entier
Début
Si n = 0 alors
retourner (0)
Sinon
retourner (Som(n-1) +n)
Fin
EXERCICE 1
10
2. La somme de deux entiers a et b
1ère solution
a+b = a+(b-1)+1
2ère solution
a+b = (a-1)+b+1
Som (a,b: entier): entier
Début
Si b = 0 alors
retourner (a)
Sinon
retourner (Som(a, b-1) +1)
Fin
Som (a,b: entier): entier
Début
Si a = 0 alors
retourner (b)
Sinon
retourner (Som(a-1, b) +1)
Fin
EXERCICE 1
11
3. Le produit de deux entiers a et b
1ère solution
a*b = a*(b-1)+a
2ère solution
a*b = (a-1)*b+b
Prod (a,b: entier): entier
Début
Si a = 0 ou b = 0 alors
retourner (0)
Sinon
retourner (Prod(a, b-1) +a)
Fin
Prod (a,b: entier): entier
Début
Si a = 0 ou b = 0 alors
retourner (0)
Sinon
retourner (Prod(a-1, b) +b)
Fin
EXERCICE 1
12
4. La puissance ab (a et b deux entiers positifs)
itératif
ab = a*a*a*......*a, b fois
Récursif
ab = ab-1 * a
Puiss (a,b: entier): entier
Début
P1;
Pour i1 à b faire
PP*a;
retourner P;
Fin
Puiss (a,b: entier): entier
Début
Si b = 0 alors
retourner (1)
Sinon
retourner (Puiss(a, b-1) *a)
Fin
EXERCICE 1
13
5. Le quotient et le reste de la division de a par b (a et b
deux entiers positifs)
Quotient
a div b = (a-b) div b+ 1
Reste de la division
a mod b = (a-b) mod b
Quotient(a,b: entier): entier
Début
Si ab alors
retourner (0)
Sinon
retourner (Quotient(a-b, b) +1)
Fin
Reste (a,b: entier): entier
Début
Si ab alors
retourner (a)
Sinon
retourner (Reste(a-b, b))
Fin
EXERCICE 1
14
7. Le Plus Grand Commun Diviseur entre a et b (a et b
deux entiers positifs)
PGCD(a,b: entier): entier
Début
Si a=b alors retourner (a)
Sinon
Si a b alors retourner (PGCD(a, b-a))
Sinon retourner (PGCD(a-b, b))
Fin
EXERCICE 1
15
8. La suite de Fibonacci
EXERCICE 1
Fib(n: entier): entier
Début
Si n = 0 ou n = 1 alors retourner (1)
Sinon
retourner (Fib (n-1)+Fib(n-2))
Fin
16
 Un module récursif est dit terminal si aucun
traitement n'est effectué à la remontée d'un appel
récursif (sauf le retour du module).
RÉCURSIVITÉ TERMINALE VS NON TERMINALE
Reste de la division
a mod b = (a-b) mod b
Reste (a,b: entier): entier
Début
Si ab alors
retourner (a)
Sinon
retourner (Reste(a-b, b))
Fin
Reste(13,4)
Reste(9, 4)
Reste (5, 4)
Reste (1, 4)
1
17
 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).
RÉCURSIVITÉ TERMINALE VS NON TERMINALE
Factoriel
n! = n * (n-1)!
Facto (n: entier): entier
Début
Si (n=1) alors
retourner 1
Sinon
retourner n*Facto (n-1);
Fin
Fact(4)
4 * Fact(3)
3 * Fact (2)
2 * Fact(1)
1
18
RÉCURSIVITÉ TERMINALE VS NON TERMINALE
Exercice 1 Algorithme Type
Som (n) Si n = 0 alors retourner (0)
Sinon retourner (Som(n-1) +n)
Non terminale
Som (a,b) Si b = 0 alors retourner (a)
Sinon retourner (Som(a, b-1) +1)
Non terminale
Prod (a,b) Si a = 0 ou b = 0 alors retourner (0)
Sinon retourner (Prod(a, b-1) +a)
Non terminal e
Puissa (a, b) Si b = 0 alors retourner (1)
Sinon retourner (Puiss(a, b-1) *a)
Non terminale
Quotient (a,b) Si ab alors retourner (0)
Sinon
retourner (Quotient(a-b, b) +1)
Non terminale
19
RÉCURSIVITÉ TERMINALE VS NON TERMINALE
Exercice 1 Algorithme Type
PCGD (a, b) Si a=b alors retourner (a)
Sinon
Si a b alors
retourner (PGCD(a, b-a))
Sinon retourner (PGCD(a-b, b))
Terminale
Fib (n) Si n = 0 ou n = 1 alors retourner (1)
Sinon
retourner (Fib (n-1)+Fib(n-2))
Non terminale
Comb (p, n) Si p = 0 ou p = n alors retourner (1)
Sinon
retourner
(Comb(p,n-1)+Comb(p-1, n-1))
Non terminale
20
 PARFOIS, il est possible de transformer un module
récursif non terminal à un module récursif terminal.
RÉCURSIVITÉ TERMINALE VS NON TERMINALE
Récusivité non
terminale
Récursivité Terminale
Fonction Facto (n: entier):
entier
Début
Si (n=0) alors
retourner 1
Sinon
retourner n*Facto (n-1);
Fin
resultat 1
Procédure Facto (
n: entier, Var resultat: entier)
Début
Si (n  1) alors
Facto (n-1, n * resultat);
Fin
21
RÉCURSIVITÉ TERMINALE VS NON TERMINALE
Phase de descente
resultat 1
Procédure Facto ( n: entier, Var resultat: entier)
Début
Si (n > 1) alors
Facto (n-1, n * resultat);
Fin
Facto(4,1)  Facto(3, 4*1)  Facto(2, 3*4)  Facto(1, 2*12)  Facto(1, 24 )
Phase de la remontée
22
RÉCURSIVITÉ TERMINALE VS NON TERMINALE
Fonction non terminale Procédure terminale
Som (n:entier):entier
Si n = 0 alors retourner (0)
Sinon retourner (Som(n-1) +n)
resultat0
Som (n: entier, var resultat:entier)
Si n  0 alors
Som(n-1, resultat +n))
Som (a,b:entier):entier
Si b = 0 alors retourner (a)
Sinon retourner ( Som(a, b-1) +1)
resultata
Som (a,b: entier, var
resultat:entier)
Si b  0 alors
Som(a, b-1, resultat+1)
Prod (a,b:entier):entier
Si a = 0 ou b = 0 alors retourner (0)
Sinon retourner (Prod(a, b-1) +a)
resultat0
Prod ( a,b;: entier, var
resultat:entier)
Si a  0 et b  0 alors
Prod(a, b-1, resultat +a))
23
RÉCURSIVITÉ TERMINALE VS NON TERMINALE
Fonction non terminale Procédure terminale
Puissance ( a, b:entier):entier
Si b = 0 alors retourner (1)
Sinon retourner (Puiss(a, b-1) *a)
resultat1
Puissance (a, b: entier, var
resultat:entier)
Si b  0 alors
Puiss(a, b-1, resultat *a))
Quotient( a,b:entier):entier
Si ab alors retourner (0)
Sinon
retourner (Quotient(a-b, b) +1))
resultat0
Quotient ( a,b: entier, var
resultat:entier)
Si a≥b alors
Quotient(a-b, b, resultat +1))
Fib (n:entier): entier
Si n = 0 ou n = 1 alors retourner (1)
Sinon retourner ( Fib (n-1)+Fib(n-2)) IMPOSSIBLE
Comb (p, n: entier): entier
Si p = 0 ou p = n alors retourner (1)
Sinon
retourner (Comb(p,n-1)+Comb(p-1, n-1))
24
1. La récursivité simple où l’algorithme contient un seul
appel récursif dans son corps.
 Exemple : la fonction factorielle
TYPES DE RÉCURSIVITÉ
Récusivité non terminale Récursivité Terminale
Facto (n: entier): entier
Début
Si (n=0) alors
retourne 1
Sinon
retourne n*Facto (n-1);
Fin
resultat 1
Procédure Facto (
n: entier, Var resultat: entier)
Début
Si (n  1) alors
Facto (n-1, n * resultat);
Fin
25
2. La récursivité multiple où l’algorithme contient plus
d'un appel récursif dans son corps
 Exemple: le calcul de la suite de la suite de Fibonacci
TYPES DE RÉCURSIVITÉ
Fib(n: entier): entier
Si n = 0 ou n = 1 alors retourner (1)
Sinon
retourner (Fib (n-1)+Fib(n-2))
26
TYPES DE RÉCURSIVITÉ
Exercice 1 Algorithme Type
Som (n) Si n = 0 alors retourner (0)
Sinon retourner (Som(n-1) +n)
Simple
Som (a,b) Si b = 0 alors retourner (a)
Sinon retourner (Som(a, b-1) +1)
Simple
Prod (a,b) Si a = 0 ou b = 0 alors retourner (0)
Sinon retourner (Prod(a, b-1) +a)
Simple
Quotient (a,b) Si ab alors retourner (0)
Sinon retourner (Quotient(a-b, b) +1)
Simple
Reste (a, b) Si ab alors retourner (a)
Sinon retourner (Reste(a-b, b))
Simple
Puissance (a, b) Si b = 0 alors retourner (1)
Sinon retourner (Puiss(a, b-1) *a)
Simple
PCGD (a, b) Si a=b alors retourner (a)
Sinon
Si a b alors retourner (PGCD(a, b-a))
Sinon retourner (PGCD(a-b, b))
Multiple
27
3. La récursivité mutuelle: Des modules sont dits mutuellement
récursifs s’ils dépendent les unes des autres
 Exemple 10 : la définition de la parité d'un entier peut être écrite de
la manière suivante :
TYPES DE RÉCURSIVITÉ
28
4. La récursivité imbriquée consiste à faire un appel récursif à
l'intérieur d'un autre appel récursif.
 Exemple 11: La fonction d'Ackermann
TYPES DE RÉCURSIVITÉ
29
EXERCICE 2
 Soit Tab un tableau d’entiers de taille n sur lequel on
veut réaliser les opérations suivantes :
1. Som: qui permet de retourner la somme des
éléments du tableau Tab.
2. Prod: qui permet de retourner le produit des
éléments du tableau Tab.
3. Moyenne: qui permet de retourner la moyenne des
éléments du tableau Tab.
4. RechElt : qui permet de retourner l’indice de
l’élément contenant une valeur donnée
30
 La récursivité est un outil puissant permettant de concevoir
des solutions (simples) sans se préoccuper des détails
algorithmiques internes
 Paradigme Diviser pour Régner: spécifier la solution du
problème en fonction de la (ou des) solution(s) d'un (ou de
plusieurs) sous-problème plus simple(s).
 Comment trouver la solution d'un sous-problème ?
 Ce n'est pas important car on prendra comme hypothèse que
chaque appel récursif résoudra un sous-problème
 Si on arrive à trouver une solution globale en utilisant ces
hypothèses, alors ces dernières (hypothèses) sont forcément
correctes, de même que la solution globale  Cela ressemble à la
« démonstration par récurrence »
PARADIGME « DIVISER POUR RÉGNER »
31
DiviserRégnerCombiner
Problème
Global
Sous
Problème
1
Sous
Problème
2
Sous
Problème
K
Décomposer le problème en k
sous problème de taille
moindre
Sous
Solution
1
Sous
Solution
2
Sous
Solution
K
Chaque sous problème sera résolu par la même décomposition récursive
....jusqu’à l’obtention de sous problèmes triviaux
Solution
Globale
Combinaison des solutions
obtenues
PARADIGME « DIVISER POUR RÉGNER »
32
EXERCICE 2
 Soit Tab un tableau d’entiers de taille n sur lequel on
veut réaliser les opérations suivantes :
5. RechMax : qui permet de retourner l’indice de
l’élément le plus grand du tableau Tab
6. RechMin : qui permet de retourner l’indice de
l’élément le plus petit du tableau Tab
7. RechDicho : qui permet de faire une recherche par
dichotomie d’une valeur donnée dans le cas où le
tableau Tab est trié par ordre croissant
8. Tri_Fusion: qui permet de trier le tableau Tab par
la méthode de fusion.
33
EXERCICE 2 : RECHERCHE MAXIMUM
 Soit Tab un tableau à n éléments, écrire une fonction
récursive permettant de rechercher de l’indice du
maximum dans Tab en utilisant le paradigme diviser
pour régner
5 8 1 10
5 8 1 10
5 8 1 10
8 10
10
DiviserRégner
Combiner
34
EXERCICE 2 : RECHERCHE MAXIMUM
Fonction RechMax ( Tab: Tableau , indDeb, indFin:entier) : entier
Si ( indDeb = indFin) alors retourner (indDeb)
Sinon
M(indDeb+indFin) div 2 // division du problème en 2 sous-problèmes
k1  RechMax(Tab, indDeb, m ) // régner sur le 1er sous-problème
k2 RechMax(Tab, m+1, indFin) // régner sur le 2ème sous-problème
// Combiner les solutions
Si (Tab[k1] > Tab[k2]) alors retourner (k1)
Sinon retourner (k2)
35
 Le principe est de trier deux tableaux de taille N/2 et
ensuite de les fusionner de sorte à ce que le tableau final
soit trié.
EXERCICE 2 : TRI PAR FUSION
PRINCIPE
7 3 18 13 7
7 3 18 13 7
3 7 18
3 7 7 13 18
7
3 7
3
187 3
7 13
13 7
36
 DIVISER: Diviser le tableau en deux tableaux:
T [debut..fin] = T1[debut..milieu] + T2[milieu+1..fin]
 REGNER: trier (par fusion) les deux tableaux
 COMBINER: combiner les 2 tableaux de telle manière
que le tableau T reste trie
EXERCICE 2 : TRI PAR FUSION
PARADIGME DIVISER POUR RÉGNER
37
Tri_Fusion (T: tableau, debut, fin : entier)
Debut
Si (debut<fin) alors
milieu  (debut + fin) /2
Tri_Fusion(T, debut, milieu);
Tri_fusion (T, milieu + 1, fin);
Interclasser (T, debut, milieu, fin)
FSI
Fin
EXERCICE 2 : TRI PAR FUSION
38
Procédure Interclasser(T: tableau, debut, milieu, fin: entier)
Debut
Tmp: tableau temporaire du taille fin-debut+1
i 0; i1  debut, i2  milieu + 1;
Tant que (i1≤milieu) et (i2 ≤ fin) faire
Si (T[i1]<T[i2]) alors Tmp[i]T[i1]; i1++;
Sinon Tmp [i]T[i2]; i2++;
i++;
Tant que (i1milieu) faire Tmp[i]T[i1]; i1++; i++;
Tant que (i2fin) faire Tmp[i]T[i2]; i2++; i++;
Pour idebut à fin faire T[i]=tmp[i-debut]; // recopier le tableau
Fin
EXERCICE 2 : TRI PAR FUSION
PROCÉDURE « INTERCLASSER »
39
EXERCICE 2 : RECHERCHE DICHOTOMIQUE
 Soit Tab un tableau trié (ordre croissant) à n éléments.
 La recherche par dichotomie compare l‘élément à rechercher x avec
l‘élément en position m situé au milieu du sous-tableau :
 si Tab[m] = x : on a trouvé l‘élément en position m
 si Tab[m] > x : il est impossible que x se trouve après la position
m dans le tableau. Il reste à traiter uniquement la moitié
inférieure du tableau
 De même si Tab[m] < x : il reste à traiter uniquement la moitié
supérieure du tableau
 On continue ainsi la recherche jusqu’à trouver l’élément ou bien
aboutir sur un tableau de taille nulle, x n'est pas présent et la
recherche s'arrête.
40
EXERCICE 2 : RECHERCHE DICHOTOMIQUE
Fonction RechDicho(Tab :Tableau, borneinf, bornesup, x :entier) : bool
Si (borneinf<=bornesup) alors
mil  (borneinf+bornesup) DIV 2 ;
Si (Tab[mil]=x) Alors retourner (vrai)
Sinon
Si (Tab[mil]>x) Alors
Retourner (RechDicho(Tab, borneinf, mil-1, x))
Sinon
Retourner(RechDicho(Tab, mil+1, bornesup, x))
Sinon
Retourner (Faux)
41
 Dans un module récursif (procédure ou fonction) les
paramètres doivent être clairement spécifiés
 Dans le corps du module, il doit y avoir:
 un ou plusieurs cas particuliers: ce sont les cas simples qui ne
nécessitent pas d'appels récursifs
 un ou plusieurs cas généraux: ce sont les cas complexes qui sont
résolus par des appels récursifs
 L'appel récursif d'un cas général doit toujours mener vers
un des cas particuliers
CONCEPTION D’UN ALGORITHME RÉCURSIF
42
 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 : la fonction factorielle
Facto (n: entier): entier
Début
Si (n=1) alors retourner 1
Sinon retourner n*Facto (n-1);
Fin
COMPLEXITÉ DES ALGORITHMES RÉCURSIFS
43
COMPLEXITÉ DES ALGORITHMES RÉCURSIFS
 Pour calculer la solution générale de cette équation, on
peut procéder par substitution :
O (T) = O (n)
44
COMPLEXITÉ DES ALGORITHMES RÉCURSIFS
THÉORÈME 1 DE RÉSOLUTION DE LA RÉCURRENCE
 Équations de récurrence linéaires:
 Exemple : Factorielle
i.e. T(n) = T(n-1) + f(n) avec a = 1, T(0) = 0, f(n) = b;
O (T) = O (n)
45
 Équations de récurrence linéaires:
 Exemple : T(n) = 2*T(n-1) + c avec T(0) = 0
O (T) = O(2n)
COMPLEXITÉ DES ALGORITHMES RÉCURSIFS
THÉORÈME 1 DE RÉSOLUTION DE LA RÉCURRENCE
46
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
 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ème en sous-problèmes.
 Régner: Soit aT (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.
T(n) = a T (n/b) + D(n) + C(n)
 Soit la fonction f (n) la fonction qui regroupe D(n) et C(n). La fonction T(n) est
alors définie :
T(n) = a.T(n / b) + f(n)
47
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
 Pour f (n) = c nk , on a : T(n) = a.T(n / b) + c nk
48
 Pour T(n) = a.T(n / b) + c nk, on a :
 Exercice 2: Recherche du maximum.
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
49
EXERCICE 2 : RECHERCHE MAXIMUM
Fonction maximum ( Tab: Tableau , indDeb, indFin:entier) : entier
Si ( indDeb = indFin) alors retourner (indDeb)
Sinon
M(indDeb+indFin) div 2 // division du problème en 2 sous-problèmes
k1  maximum (Tab, indDeb, m ) // régner sur le 1er sous-problème
k2 maximum (Tab, m+1, indFin) // régner sur le 2ème sous-problème
// Combiner les solutions
Si (Tab[k1] > Tab[k2]) alors retourner (k1)
Sinon retourner (k2)
50
 Pour T(n) = a.T(n / b) + c nk, on a :
 Exercice 2: Recherche du maximum.
T(n) = 2 T(n/2) + c
a = 2 , b = 2, k = 0  a > bk
T(n) = O(n)
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
51
 Pour T(n) = a.T(n / b) + c nk, on a :
 Exercice 2: Recherche dichotomique
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
52
EXERCICE 2 : RECHERCHE DICHOTOMIQUE
Fonction RechDicho(Tab :Tableau, borneinf, bornesup, x :entier) : bool
Si (borneinf<=bornesup) alors
mil  (borneinf+bornesup) DIV 2 ;
Si (Tab[mil]=x) Alors retourner (vrai)
Sinon
Si (Tab[mil]>x) Alors
Retourner (RechDicho(Tab, borneinf, mil-1, x))
Sinon
Retourner(RechDicho(Tab, mil+1, bornesup, x))
Sinon
Retourner (Faux)
53
 Pour T(n) = a.T(n / b) + c nk, on a :
 Exercice 2: Recherche dichotomique
T(n) = T(n/2) + c
a = 1 , b = 2, k = 0  a = bk
T(n) = O(log(n))
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
54
 Pour T(n) = a.T(n / b) + c nk, on a :
 Exercice 2: Tri par Fusion
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
55
Tri_Fusion (T: tableau, debut, fin : entier)
Debut
Si (debut<fin) alors
milieu  (debut + fin) /2
Tri_Fusion(T, debut, milieu);
Tri_fusion (T, milieu + 1, fin);
Interclasser (T, debut, milieu, fin)
FSI
Fin
EXERCICE 2 : TRI PAR FUSION
56
Procédure Interclasser(T: tableau, debut, milieu, fin: entier)
Debut
Tmp: tableau temporaire du taille fin-debut+1
i 0; i1  debut, i2  milieu + 1;
Tant que (i1≤milieu) et (i2 ≤ fin) faire
Si (T[i1]<T[i2]) alors Tmp[i]T[i1]; i1++;
Sinon Tmp [i]T[i2]; i2++;
i++;
Tant que (i1milieu) faire Tmp[i]T[i1]; i1++; i++;
Tant que (i2fin) faire Tmp[i]T[i2]; i2++; i++;
Pour idebut à fin faire T[i]=tmp[i-debut]; // recopier le tableau
Fin
EXERCICE 2 : TRI PAR FUSION
PROCÉDURE « INTERCLASSER »
57
 Pour T(n) = a.T(n / b) + c nk, on a :
 Exercice 2: Tri par Fusion
T(n) = 2 T(n/2) + n
a = 2 , b = 2, k = 1  a = bk
T(n) = O(n log n)
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
58
 Pour T(n) = a.T(n / b) + c nk, on a :
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
59
 Pour T(n) = a.T(n / b) + c nk, on a :
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
60
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
THÉORÈME 3 DE RÉSOLUTIONS DE RÉCURRENCE
 Équations de récurrence linéaires sans second membre (f(n) = cte)
 A une telle équation, on peut associer un polynôme:
 La résolution de ce polynôme nous donne m racines ri ( avec
m<=k).
 La solution de l’équation de récurrence est ainsi donnée par :
 Cette solution est en général exponentielle
61
 Exercice 1 : La suite de Fibonacci
COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »
THÉORÈME 3 DE RÉSOLUTIONS DE RÉCURRENCE
SOURCES DE CE COURS
 Frédéric Vivien, Algorithmique avancée, École Normale Supérieure de Lyon, 2002.,
pp. 93. Disponible sur http://perso.ens-lyon.fr/frederic.vivien/Enseignement/Algo-
2001-2002/Cours.pdf
 Slim Msfar, Algorithmique et Complexité, 2012, pp 104. Disponible sur
http://p835.phpnet.org/testremorque/upload/catalogue/coursalgorithmi.pdf
 Walid-Khaled Hidouci, La récursivité, École nationale Supérieure d’Informatique,
pp 107. Disponible sur hidouci.esi.dz/algo/cours_recursivite.pdf
 La récursivité, Cours d’ Algorithmique et Structures de données dynamiques, École
nationale Supérieure d’Informatique, Année Universitaire 2009-2010.
62

Contenu connexe

Tendances

Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données IIRiadh Bouslimi
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerSana Aroussi
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage CMohamed Lahby
 
Examen principal + Correction ASD
Examen principal + Correction ASDExamen principal + Correction ASD
Examen principal + Correction ASDInes Ouaz
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI Mansouri Khalifa
 
Chap04 les-algorithme-de-tri-et-de-recherche
Chap04 les-algorithme-de-tri-et-de-rechercheChap04 les-algorithme-de-tri-et-de-recherche
Chap04 les-algorithme-de-tri-et-de-rechercheRiadh Harizi
 
Exercices en turbo pascal sur les nombres
Exercices en turbo pascal sur les nombresExercices en turbo pascal sur les nombres
Exercices en turbo pascal sur les nombressalah fenni
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfsalah fenni
 
Serie recurrents & arithmetiques
Serie recurrents & arithmetiquesSerie recurrents & arithmetiques
Serie recurrents & arithmetiquesmohamed_SAYARI
 
exercices-corriges-dalgorithmique
exercices-corriges-dalgorithmiqueexercices-corriges-dalgorithmique
exercices-corriges-dalgorithmiquefast xp
 
Les algorithmes d'arithmetique
Les algorithmes d'arithmetiqueLes algorithmes d'arithmetique
Les algorithmes d'arithmetiquemohamed_SAYARI
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de triSana Aroussi
 
Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Sana Aroussi
 
Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)Ines Ouaz
 

Tendances (20)

Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données II
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régner
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
02 correction-td smi-s3-algo2
02 correction-td smi-s3-algo202 correction-td smi-s3-algo2
02 correction-td smi-s3-algo2
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage C
 
Serie
SerieSerie
Serie
 
Examen principal + Correction ASD
Examen principal + Correction ASDExamen principal + Correction ASD
Examen principal + Correction ASD
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
 
Serie2
Serie2Serie2
Serie2
 
Chap04 les-algorithme-de-tri-et-de-recherche
Chap04 les-algorithme-de-tri-et-de-rechercheChap04 les-algorithme-de-tri-et-de-recherche
Chap04 les-algorithme-de-tri-et-de-recherche
 
Exercices en turbo pascal sur les nombres
Exercices en turbo pascal sur les nombresExercices en turbo pascal sur les nombres
Exercices en turbo pascal sur les nombres
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdf
 
Serie recurrents & arithmetiques
Serie recurrents & arithmetiquesSerie recurrents & arithmetiques
Serie recurrents & arithmetiques
 
exercices-corriges-dalgorithmique
exercices-corriges-dalgorithmiqueexercices-corriges-dalgorithmique
exercices-corriges-dalgorithmique
 
Les algorithmes d'arithmetique
Les algorithmes d'arithmetiqueLes algorithmes d'arithmetique
Les algorithmes d'arithmetique
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de tri
 
Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)
 
Les enregistrements
Les enregistrements Les enregistrements
Les enregistrements
 
Algorithmes de tri
Algorithmes de triAlgorithmes de tri
Algorithmes de tri
 
Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)
 

Similaire à Chapitre 4 récursivité

chap 3 complexité (3).pdf
chap 3 complexité (3).pdfchap 3 complexité (3).pdf
chap 3 complexité (3).pdfdonixwm
 
Résumé Algorithme et Programmation
Résumé Algorithme et ProgrammationRésumé Algorithme et Programmation
Résumé Algorithme et Programmationborhen boukthir
 
rc.pdf
rc.pdfrc.pdf
rc.pdfDOUA9
 
LES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATIONLES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATIONborhen boukthir
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018salah fenni
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)DriNox NordisTe
 
Algèbre & Trigonométrie ( DUT )
Algèbre & Trigonométrie ( DUT )Algèbre & Trigonométrie ( DUT )
Algèbre & Trigonométrie ( DUT )FATIHA AKEF
 
Cours fourier
Cours fourier Cours fourier
Cours fourier Raed Ammar
 
Cours-maths3-2eme-Annee-ST.pdf
Cours-maths3-2eme-Annee-ST.pdfCours-maths3-2eme-Annee-ST.pdf
Cours-maths3-2eme-Annee-ST.pdfArsalanTlm
 
Algorithmique Amp Programmation (R Sum
Algorithmique  Amp  Programmation (R SumAlgorithmique  Amp  Programmation (R Sum
Algorithmique Amp Programmation (R SumAmy Isleb
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétudeSana Aroussi
 
bac tun 1.pdf
bac tun 1.pdfbac tun 1.pdf
bac tun 1.pdflescours
 

Similaire à Chapitre 4 récursivité (20)

chap 3 complexité (3).pdf
chap 3 complexité (3).pdfchap 3 complexité (3).pdf
chap 3 complexité (3).pdf
 
Resume algorithme
Resume algorithmeResume algorithme
Resume algorithme
 
Résumé Algorithme et Programmation
Résumé Algorithme et ProgrammationRésumé Algorithme et Programmation
Résumé Algorithme et Programmation
 
rc.pdf
rc.pdfrc.pdf
rc.pdf
 
coursAlgo_V5.pdf
coursAlgo_V5.pdfcoursAlgo_V5.pdf
coursAlgo_V5.pdf
 
LES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATIONLES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATION
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018
 
Fic00126
Fic00126Fic00126
Fic00126
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)
 
transparents-Algo-complexite.pdf
transparents-Algo-complexite.pdftransparents-Algo-complexite.pdf
transparents-Algo-complexite.pdf
 
Ch2_ la récursivité.pdf
Ch2_ la récursivité.pdfCh2_ la récursivité.pdf
Ch2_ la récursivité.pdf
 
Algèbre & Trigonométrie ( DUT )
Algèbre & Trigonométrie ( DUT )Algèbre & Trigonométrie ( DUT )
Algèbre & Trigonométrie ( DUT )
 
Cours fourier
Cours fourier Cours fourier
Cours fourier
 
Cours-maths3-2eme-Annee-ST.pdf
Cours-maths3-2eme-Annee-ST.pdfCours-maths3-2eme-Annee-ST.pdf
Cours-maths3-2eme-Annee-ST.pdf
 
Algorithmique Amp Programmation (R Sum
Algorithmique  Amp  Programmation (R SumAlgorithmique  Amp  Programmation (R Sum
Algorithmique Amp Programmation (R Sum
 
Gele2511 ch3
Gele2511 ch3Gele2511 ch3
Gele2511 ch3
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétude
 
246242769 sequence-1-pdf
246242769 sequence-1-pdf246242769 sequence-1-pdf
246242769 sequence-1-pdf
 
bac tun 1.pdf
bac tun 1.pdfbac tun 1.pdf
bac tun 1.pdf
 
cours algorithme
cours algorithmecours algorithme
cours algorithme
 

Plus de Sana Aroussi

Gestion des threads
Gestion des threadsGestion des threads
Gestion des threadsSana Aroussi
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court cheminSana Aroussi
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheSana Aroussi
 
Chapitre 5 arbres binaires
Chapitre 5 arbres binairesChapitre 5 arbres binaires
Chapitre 5 arbres binairesSana Aroussi
 
Chapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesChapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesSana Aroussi
 
Chapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminChapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminSana Aroussi
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheSana Aroussi
 
Chapitre 6 hachage statique
Chapitre 6 hachage statiqueChapitre 6 hachage statique
Chapitre 6 hachage statiqueSana Aroussi
 
Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesSana Aroussi
 
Chapitre iv entrées sorties et bus
Chapitre iv entrées sorties et busChapitre iv entrées sorties et bus
Chapitre iv entrées sorties et busSana Aroussi
 
Chapitre iii interruptions
Chapitre iii interruptionsChapitre iii interruptions
Chapitre iii interruptionsSana Aroussi
 
Chapitre ii mémoires
Chapitre ii mémoiresChapitre ii mémoires
Chapitre ii mémoiresSana Aroussi
 
Chapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsChapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsSana Aroussi
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétudeSana Aroussi
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsSana Aroussi
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéSana Aroussi
 

Plus de Sana Aroussi (20)

Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Gestion des threads
Gestion des threadsGestion des threads
Gestion des threads
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court chemin
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de recherche
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Chapitre 5 arbres binaires
Chapitre 5 arbres binairesChapitre 5 arbres binaires
Chapitre 5 arbres binaires
 
Chapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesChapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiques
 
Chapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminChapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court chemin
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de recherche
 
Chapitre 6 hachage statique
Chapitre 6 hachage statiqueChapitre 6 hachage statique
Chapitre 6 hachage statique
 
Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentielles
 
Chapitre 1 rappel
Chapitre 1   rappelChapitre 1   rappel
Chapitre 1 rappel
 
Chapitre iv entrées sorties et bus
Chapitre iv entrées sorties et busChapitre iv entrées sorties et bus
Chapitre iv entrées sorties et bus
 
Chapitre iii interruptions
Chapitre iii interruptionsChapitre iii interruptions
Chapitre iii interruptions
 
Chapitre ii mémoires
Chapitre ii mémoiresChapitre ii mémoires
Chapitre ii mémoires
 
Chapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsChapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récents
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétude
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutons
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalité
 

Dernier

comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestionyakinekaidouchi1
 
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfWBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfSophie569778
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfInstitut de l'Elevage - Idele
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...Institut de l'Elevage - Idele
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfInstitut de l'Elevage - Idele
 
GAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesGAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesInstitut de l'Elevage - Idele
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...Institut de l'Elevage - Idele
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfInstitut de l'Elevage - Idele
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...Institut de l'Elevage - Idele
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)Sana REFAI
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...Institut de l'Elevage - Idele
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de planchermansouriahlam
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...Institut de l'Elevage - Idele
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfmia884611
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusInstitut de l'Elevage - Idele
 
GAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéGAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéInstitut de l'Elevage - Idele
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageInstitut de l'Elevage - Idele
 

Dernier (20)

comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestion
 
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfWBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdf
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
 
CAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptxCAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptx
 
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdfJTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
 
GAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesGAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentes
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdf
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdf
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
 
GAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéGAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversité
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
 

Chapitre 4 récursivité

  • 1. CHAPITRE IV: RÉCURSIVITÉ Université Saad Dahlab – Blida1 Faculté des Sciences Département d’Informatique Licence d’Informatique Semestre 3 (2ème année) Algorithmique et Structures de Données Mme AROUSSI 2016-2017 Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/
  • 2.  Définition  Évolution d’un appel récursif  Types de la récursivité  Paradigme « Diviser pour régner »  Conception d’un algorithme récursif  Complexité des algorithmes récursifs 2 PLAN DU CHAPITRE IV
  • 3. 3  Un algorithme est dit récursif lorsqu’il est auto- référent: il fait référence à lui-même dans sa définition.  Autrement dit, un algorithme est dit récursif s'il est défini en fonction de lui-même, directement ou indirectement. DÉFINITION
  • 4. 4  Exemple : la factorielle n! Itératif n! = 1 * 2 * ... * n Récursif n! = n * (n-1)! Facto (n: entier): entier Début F1; Pour i2 à n faire FF*i; retourner F; Fin Facto (n: entier): entier Début retourner n*Facto (n-1); Fin EXEMPLE
  • 5. 5  L'exécution d'un appel récursif passe par deux phases, la phase de descente et la phase de la remontée :  Dans la phase de descente, chaque appel récursif fait à son tour un appel récursif. ÉVOLUTION D’UN APPEL RÉCURSIF Facto(4)  4 * Facto(3) Facto(3)  3 * Facto(2) Facto(2)  2 * Facto(1) Facto(1)  1 * Facto(0) Facto(4)  0 * Facto(-1) Facto (n: entier): entier Début retourner n*Facto (n-1); Fin
  • 6. 6  Puisqu'un algorithme récursif s'appelle lui-même, il est impératif qu'on prévoit une condition d'arrêt à la récursion, sinon le programme ne s'arrête jamais!  Exemple 1: la factorielle n! Version précédente Version correcte Facto (n: entier): entier Début retourner n*Facto (n-1); Fin Facto (n: entier): entier Début Si (n=1) alors retourner 1 Sinon retourner n*Facto (n-1); Fin ÉVOLUTION D’UN APPEL RÉCURSIF CONDITION D’ARRÊT
  • 7. 7  En arrivant à la condition terminale, on commence la phase de la remontée qui se poursuit jusqu'à ce que l'appel initial soit terminé, ce qui termine le processus récursif. ÉVOLUTION D’UN APPEL RÉCURSIF Facto(4)  4 * Facto(3) Facto(3)  3 * Facto(2) Facto(2)  2 * Facto(1) 24 1 2 6 Phasedelaremontée Facto (n: entier): entier Début Si (n=1) alors retourner 1 Sinon retourner n*Facto (n-1); Fin
  • 8. 8 EXERCICE 1 1. Som (n) calcule la somme des n premiers naturels 2. Som (a, b) calcule la somme des entiers a et b 3. Prod (a, b) calcule le produit de entiers a et b 4. Puiss (a, b) calcule a puissance b 5. Quotient (a, b) calcule le quotient de a par b 6. Reste (a, b) calcule le reste de division de a par b 7. PGCD (a, b) calcule le Plus Grand Commun Diviseur entre a et b 8. Fib (n) calcule la suite de Fibonacci (Un = Un-1 + Un-2 si n > 1, sinon U0 = U1 = 1)
  • 9. 9 1. La somme des n premiers Itératif Som (n) = 0+ 1 + 2 + ... + n Récursif Som (n) = n + Som (n-1) Som (n: entier): entier Début S0; Pour i1 à n faire SS+i; retourner S; Fin Som (n: entier): entier Début Si n = 0 alors retourner (0) Sinon retourner (Som(n-1) +n) Fin EXERCICE 1
  • 10. 10 2. La somme de deux entiers a et b 1ère solution a+b = a+(b-1)+1 2ère solution a+b = (a-1)+b+1 Som (a,b: entier): entier Début Si b = 0 alors retourner (a) Sinon retourner (Som(a, b-1) +1) Fin Som (a,b: entier): entier Début Si a = 0 alors retourner (b) Sinon retourner (Som(a-1, b) +1) Fin EXERCICE 1
  • 11. 11 3. Le produit de deux entiers a et b 1ère solution a*b = a*(b-1)+a 2ère solution a*b = (a-1)*b+b Prod (a,b: entier): entier Début Si a = 0 ou b = 0 alors retourner (0) Sinon retourner (Prod(a, b-1) +a) Fin Prod (a,b: entier): entier Début Si a = 0 ou b = 0 alors retourner (0) Sinon retourner (Prod(a-1, b) +b) Fin EXERCICE 1
  • 12. 12 4. La puissance ab (a et b deux entiers positifs) itératif ab = a*a*a*......*a, b fois Récursif ab = ab-1 * a Puiss (a,b: entier): entier Début P1; Pour i1 à b faire PP*a; retourner P; Fin Puiss (a,b: entier): entier Début Si b = 0 alors retourner (1) Sinon retourner (Puiss(a, b-1) *a) Fin EXERCICE 1
  • 13. 13 5. Le quotient et le reste de la division de a par b (a et b deux entiers positifs) Quotient a div b = (a-b) div b+ 1 Reste de la division a mod b = (a-b) mod b Quotient(a,b: entier): entier Début Si ab alors retourner (0) Sinon retourner (Quotient(a-b, b) +1) Fin Reste (a,b: entier): entier Début Si ab alors retourner (a) Sinon retourner (Reste(a-b, b)) Fin EXERCICE 1
  • 14. 14 7. Le Plus Grand Commun Diviseur entre a et b (a et b deux entiers positifs) PGCD(a,b: entier): entier Début Si a=b alors retourner (a) Sinon Si a b alors retourner (PGCD(a, b-a)) Sinon retourner (PGCD(a-b, b)) Fin EXERCICE 1
  • 15. 15 8. La suite de Fibonacci EXERCICE 1 Fib(n: entier): entier Début Si n = 0 ou n = 1 alors retourner (1) Sinon retourner (Fib (n-1)+Fib(n-2)) Fin
  • 16. 16  Un module récursif est dit terminal si aucun traitement n'est effectué à la remontée d'un appel récursif (sauf le retour du module). RÉCURSIVITÉ TERMINALE VS NON TERMINALE Reste de la division a mod b = (a-b) mod b Reste (a,b: entier): entier Début Si ab alors retourner (a) Sinon retourner (Reste(a-b, b)) Fin Reste(13,4) Reste(9, 4) Reste (5, 4) Reste (1, 4) 1
  • 17. 17  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). RÉCURSIVITÉ TERMINALE VS NON TERMINALE Factoriel n! = n * (n-1)! Facto (n: entier): entier Début Si (n=1) alors retourner 1 Sinon retourner n*Facto (n-1); Fin Fact(4) 4 * Fact(3) 3 * Fact (2) 2 * Fact(1) 1
  • 18. 18 RÉCURSIVITÉ TERMINALE VS NON TERMINALE Exercice 1 Algorithme Type Som (n) Si n = 0 alors retourner (0) Sinon retourner (Som(n-1) +n) Non terminale Som (a,b) Si b = 0 alors retourner (a) Sinon retourner (Som(a, b-1) +1) Non terminale Prod (a,b) Si a = 0 ou b = 0 alors retourner (0) Sinon retourner (Prod(a, b-1) +a) Non terminal e Puissa (a, b) Si b = 0 alors retourner (1) Sinon retourner (Puiss(a, b-1) *a) Non terminale Quotient (a,b) Si ab alors retourner (0) Sinon retourner (Quotient(a-b, b) +1) Non terminale
  • 19. 19 RÉCURSIVITÉ TERMINALE VS NON TERMINALE Exercice 1 Algorithme Type PCGD (a, b) Si a=b alors retourner (a) Sinon Si a b alors retourner (PGCD(a, b-a)) Sinon retourner (PGCD(a-b, b)) Terminale Fib (n) Si n = 0 ou n = 1 alors retourner (1) Sinon retourner (Fib (n-1)+Fib(n-2)) Non terminale Comb (p, n) Si p = 0 ou p = n alors retourner (1) Sinon retourner (Comb(p,n-1)+Comb(p-1, n-1)) Non terminale
  • 20. 20  PARFOIS, il est possible de transformer un module récursif non terminal à un module récursif terminal. RÉCURSIVITÉ TERMINALE VS NON TERMINALE Récusivité non terminale Récursivité Terminale Fonction Facto (n: entier): entier Début Si (n=0) alors retourner 1 Sinon retourner n*Facto (n-1); Fin resultat 1 Procédure Facto ( n: entier, Var resultat: entier) Début Si (n  1) alors Facto (n-1, n * resultat); Fin
  • 21. 21 RÉCURSIVITÉ TERMINALE VS NON TERMINALE Phase de descente resultat 1 Procédure Facto ( n: entier, Var resultat: entier) Début Si (n > 1) alors Facto (n-1, n * resultat); Fin Facto(4,1)  Facto(3, 4*1)  Facto(2, 3*4)  Facto(1, 2*12)  Facto(1, 24 ) Phase de la remontée
  • 22. 22 RÉCURSIVITÉ TERMINALE VS NON TERMINALE Fonction non terminale Procédure terminale Som (n:entier):entier Si n = 0 alors retourner (0) Sinon retourner (Som(n-1) +n) resultat0 Som (n: entier, var resultat:entier) Si n  0 alors Som(n-1, resultat +n)) Som (a,b:entier):entier Si b = 0 alors retourner (a) Sinon retourner ( Som(a, b-1) +1) resultata Som (a,b: entier, var resultat:entier) Si b  0 alors Som(a, b-1, resultat+1) Prod (a,b:entier):entier Si a = 0 ou b = 0 alors retourner (0) Sinon retourner (Prod(a, b-1) +a) resultat0 Prod ( a,b;: entier, var resultat:entier) Si a  0 et b  0 alors Prod(a, b-1, resultat +a))
  • 23. 23 RÉCURSIVITÉ TERMINALE VS NON TERMINALE Fonction non terminale Procédure terminale Puissance ( a, b:entier):entier Si b = 0 alors retourner (1) Sinon retourner (Puiss(a, b-1) *a) resultat1 Puissance (a, b: entier, var resultat:entier) Si b  0 alors Puiss(a, b-1, resultat *a)) Quotient( a,b:entier):entier Si ab alors retourner (0) Sinon retourner (Quotient(a-b, b) +1)) resultat0 Quotient ( a,b: entier, var resultat:entier) Si a≥b alors Quotient(a-b, b, resultat +1)) Fib (n:entier): entier Si n = 0 ou n = 1 alors retourner (1) Sinon retourner ( Fib (n-1)+Fib(n-2)) IMPOSSIBLE Comb (p, n: entier): entier Si p = 0 ou p = n alors retourner (1) Sinon retourner (Comb(p,n-1)+Comb(p-1, n-1))
  • 24. 24 1. La récursivité simple où l’algorithme contient un seul appel récursif dans son corps.  Exemple : la fonction factorielle TYPES DE RÉCURSIVITÉ Récusivité non terminale Récursivité Terminale Facto (n: entier): entier Début Si (n=0) alors retourne 1 Sinon retourne n*Facto (n-1); Fin resultat 1 Procédure Facto ( n: entier, Var resultat: entier) Début Si (n  1) alors Facto (n-1, n * resultat); Fin
  • 25. 25 2. La récursivité multiple où l’algorithme contient plus d'un appel récursif dans son corps  Exemple: le calcul de la suite de la suite de Fibonacci TYPES DE RÉCURSIVITÉ Fib(n: entier): entier Si n = 0 ou n = 1 alors retourner (1) Sinon retourner (Fib (n-1)+Fib(n-2))
  • 26. 26 TYPES DE RÉCURSIVITÉ Exercice 1 Algorithme Type Som (n) Si n = 0 alors retourner (0) Sinon retourner (Som(n-1) +n) Simple Som (a,b) Si b = 0 alors retourner (a) Sinon retourner (Som(a, b-1) +1) Simple Prod (a,b) Si a = 0 ou b = 0 alors retourner (0) Sinon retourner (Prod(a, b-1) +a) Simple Quotient (a,b) Si ab alors retourner (0) Sinon retourner (Quotient(a-b, b) +1) Simple Reste (a, b) Si ab alors retourner (a) Sinon retourner (Reste(a-b, b)) Simple Puissance (a, b) Si b = 0 alors retourner (1) Sinon retourner (Puiss(a, b-1) *a) Simple PCGD (a, b) Si a=b alors retourner (a) Sinon Si a b alors retourner (PGCD(a, b-a)) Sinon retourner (PGCD(a-b, b)) Multiple
  • 27. 27 3. La récursivité mutuelle: Des modules sont dits mutuellement récursifs s’ils dépendent les unes des autres  Exemple 10 : la définition de la parité d'un entier peut être écrite de la manière suivante : TYPES DE RÉCURSIVITÉ
  • 28. 28 4. La récursivité imbriquée consiste à faire un appel récursif à l'intérieur d'un autre appel récursif.  Exemple 11: La fonction d'Ackermann TYPES DE RÉCURSIVITÉ
  • 29. 29 EXERCICE 2  Soit Tab un tableau d’entiers de taille n sur lequel on veut réaliser les opérations suivantes : 1. Som: qui permet de retourner la somme des éléments du tableau Tab. 2. Prod: qui permet de retourner le produit des éléments du tableau Tab. 3. Moyenne: qui permet de retourner la moyenne des éléments du tableau Tab. 4. RechElt : qui permet de retourner l’indice de l’élément contenant une valeur donnée
  • 30. 30  La récursivité est un outil puissant permettant de concevoir des solutions (simples) sans se préoccuper des détails algorithmiques internes  Paradigme Diviser pour Régner: spécifier la solution du problème en fonction de la (ou des) solution(s) d'un (ou de plusieurs) sous-problème plus simple(s).  Comment trouver la solution d'un sous-problème ?  Ce n'est pas important car on prendra comme hypothèse que chaque appel récursif résoudra un sous-problème  Si on arrive à trouver une solution globale en utilisant ces hypothèses, alors ces dernières (hypothèses) sont forcément correctes, de même que la solution globale  Cela ressemble à la « démonstration par récurrence » PARADIGME « DIVISER POUR RÉGNER »
  • 31. 31 DiviserRégnerCombiner Problème Global Sous Problème 1 Sous Problème 2 Sous Problème K Décomposer le problème en k sous problème de taille moindre Sous Solution 1 Sous Solution 2 Sous Solution K Chaque sous problème sera résolu par la même décomposition récursive ....jusqu’à l’obtention de sous problèmes triviaux Solution Globale Combinaison des solutions obtenues PARADIGME « DIVISER POUR RÉGNER »
  • 32. 32 EXERCICE 2  Soit Tab un tableau d’entiers de taille n sur lequel on veut réaliser les opérations suivantes : 5. RechMax : qui permet de retourner l’indice de l’élément le plus grand du tableau Tab 6. RechMin : qui permet de retourner l’indice de l’élément le plus petit du tableau Tab 7. RechDicho : qui permet de faire une recherche par dichotomie d’une valeur donnée dans le cas où le tableau Tab est trié par ordre croissant 8. Tri_Fusion: qui permet de trier le tableau Tab par la méthode de fusion.
  • 33. 33 EXERCICE 2 : RECHERCHE MAXIMUM  Soit Tab un tableau à n éléments, écrire une fonction récursive permettant de rechercher de l’indice du maximum dans Tab en utilisant le paradigme diviser pour régner 5 8 1 10 5 8 1 10 5 8 1 10 8 10 10 DiviserRégner Combiner
  • 34. 34 EXERCICE 2 : RECHERCHE MAXIMUM Fonction RechMax ( Tab: Tableau , indDeb, indFin:entier) : entier Si ( indDeb = indFin) alors retourner (indDeb) Sinon M(indDeb+indFin) div 2 // division du problème en 2 sous-problèmes k1  RechMax(Tab, indDeb, m ) // régner sur le 1er sous-problème k2 RechMax(Tab, m+1, indFin) // régner sur le 2ème sous-problème // Combiner les solutions Si (Tab[k1] > Tab[k2]) alors retourner (k1) Sinon retourner (k2)
  • 35. 35  Le principe est de trier deux tableaux de taille N/2 et ensuite de les fusionner de sorte à ce que le tableau final soit trié. EXERCICE 2 : TRI PAR FUSION PRINCIPE 7 3 18 13 7 7 3 18 13 7 3 7 18 3 7 7 13 18 7 3 7 3 187 3 7 13 13 7
  • 36. 36  DIVISER: Diviser le tableau en deux tableaux: T [debut..fin] = T1[debut..milieu] + T2[milieu+1..fin]  REGNER: trier (par fusion) les deux tableaux  COMBINER: combiner les 2 tableaux de telle manière que le tableau T reste trie EXERCICE 2 : TRI PAR FUSION PARADIGME DIVISER POUR RÉGNER
  • 37. 37 Tri_Fusion (T: tableau, debut, fin : entier) Debut Si (debut<fin) alors milieu  (debut + fin) /2 Tri_Fusion(T, debut, milieu); Tri_fusion (T, milieu + 1, fin); Interclasser (T, debut, milieu, fin) FSI Fin EXERCICE 2 : TRI PAR FUSION
  • 38. 38 Procédure Interclasser(T: tableau, debut, milieu, fin: entier) Debut Tmp: tableau temporaire du taille fin-debut+1 i 0; i1  debut, i2  milieu + 1; Tant que (i1≤milieu) et (i2 ≤ fin) faire Si (T[i1]<T[i2]) alors Tmp[i]T[i1]; i1++; Sinon Tmp [i]T[i2]; i2++; i++; Tant que (i1milieu) faire Tmp[i]T[i1]; i1++; i++; Tant que (i2fin) faire Tmp[i]T[i2]; i2++; i++; Pour idebut à fin faire T[i]=tmp[i-debut]; // recopier le tableau Fin EXERCICE 2 : TRI PAR FUSION PROCÉDURE « INTERCLASSER »
  • 39. 39 EXERCICE 2 : RECHERCHE DICHOTOMIQUE  Soit Tab un tableau trié (ordre croissant) à n éléments.  La recherche par dichotomie compare l‘élément à rechercher x avec l‘élément en position m situé au milieu du sous-tableau :  si Tab[m] = x : on a trouvé l‘élément en position m  si Tab[m] > x : il est impossible que x se trouve après la position m dans le tableau. Il reste à traiter uniquement la moitié inférieure du tableau  De même si Tab[m] < x : il reste à traiter uniquement la moitié supérieure du tableau  On continue ainsi la recherche jusqu’à trouver l’élément ou bien aboutir sur un tableau de taille nulle, x n'est pas présent et la recherche s'arrête.
  • 40. 40 EXERCICE 2 : RECHERCHE DICHOTOMIQUE Fonction RechDicho(Tab :Tableau, borneinf, bornesup, x :entier) : bool Si (borneinf<=bornesup) alors mil  (borneinf+bornesup) DIV 2 ; Si (Tab[mil]=x) Alors retourner (vrai) Sinon Si (Tab[mil]>x) Alors Retourner (RechDicho(Tab, borneinf, mil-1, x)) Sinon Retourner(RechDicho(Tab, mil+1, bornesup, x)) Sinon Retourner (Faux)
  • 41. 41  Dans un module récursif (procédure ou fonction) les paramètres doivent être clairement spécifiés  Dans le corps du module, il doit y avoir:  un ou plusieurs cas particuliers: ce sont les cas simples qui ne nécessitent pas d'appels récursifs  un ou plusieurs cas généraux: ce sont les cas complexes qui sont résolus par des appels récursifs  L'appel récursif d'un cas général doit toujours mener vers un des cas particuliers CONCEPTION D’UN ALGORITHME RÉCURSIF
  • 42. 42  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 : la fonction factorielle Facto (n: entier): entier Début Si (n=1) alors retourner 1 Sinon retourner n*Facto (n-1); Fin COMPLEXITÉ DES ALGORITHMES RÉCURSIFS
  • 43. 43 COMPLEXITÉ DES ALGORITHMES RÉCURSIFS  Pour calculer la solution générale de cette équation, on peut procéder par substitution : O (T) = O (n)
  • 44. 44 COMPLEXITÉ DES ALGORITHMES RÉCURSIFS THÉORÈME 1 DE RÉSOLUTION DE LA RÉCURRENCE  Équations de récurrence linéaires:  Exemple : Factorielle i.e. T(n) = T(n-1) + f(n) avec a = 1, T(0) = 0, f(n) = b; O (T) = O (n)
  • 45. 45  Équations de récurrence linéaires:  Exemple : T(n) = 2*T(n-1) + c avec T(0) = 0 O (T) = O(2n) COMPLEXITÉ DES ALGORITHMES RÉCURSIFS THÉORÈME 1 DE RÉSOLUTION DE LA RÉCURRENCE
  • 46. 46 COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER »  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ème en sous-problèmes.  Régner: Soit aT (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. T(n) = a T (n/b) + D(n) + C(n)  Soit la fonction f (n) la fonction qui regroupe D(n) et C(n). La fonction T(n) est alors définie : T(n) = a.T(n / b) + f(n)
  • 47. 47 COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER » THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE  Pour f (n) = c nk , on a : T(n) = a.T(n / b) + c nk
  • 48. 48  Pour T(n) = a.T(n / b) + c nk, on a :  Exercice 2: Recherche du maximum. COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER » THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
  • 49. 49 EXERCICE 2 : RECHERCHE MAXIMUM Fonction maximum ( Tab: Tableau , indDeb, indFin:entier) : entier Si ( indDeb = indFin) alors retourner (indDeb) Sinon M(indDeb+indFin) div 2 // division du problème en 2 sous-problèmes k1  maximum (Tab, indDeb, m ) // régner sur le 1er sous-problème k2 maximum (Tab, m+1, indFin) // régner sur le 2ème sous-problème // Combiner les solutions Si (Tab[k1] > Tab[k2]) alors retourner (k1) Sinon retourner (k2)
  • 50. 50  Pour T(n) = a.T(n / b) + c nk, on a :  Exercice 2: Recherche du maximum. T(n) = 2 T(n/2) + c a = 2 , b = 2, k = 0  a > bk T(n) = O(n) COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER » THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
  • 51. 51  Pour T(n) = a.T(n / b) + c nk, on a :  Exercice 2: Recherche dichotomique COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER » THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
  • 52. 52 EXERCICE 2 : RECHERCHE DICHOTOMIQUE Fonction RechDicho(Tab :Tableau, borneinf, bornesup, x :entier) : bool Si (borneinf<=bornesup) alors mil  (borneinf+bornesup) DIV 2 ; Si (Tab[mil]=x) Alors retourner (vrai) Sinon Si (Tab[mil]>x) Alors Retourner (RechDicho(Tab, borneinf, mil-1, x)) Sinon Retourner(RechDicho(Tab, mil+1, bornesup, x)) Sinon Retourner (Faux)
  • 53. 53  Pour T(n) = a.T(n / b) + c nk, on a :  Exercice 2: Recherche dichotomique T(n) = T(n/2) + c a = 1 , b = 2, k = 0  a = bk T(n) = O(log(n)) COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER » THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
  • 54. 54  Pour T(n) = a.T(n / b) + c nk, on a :  Exercice 2: Tri par Fusion COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER » THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
  • 55. 55 Tri_Fusion (T: tableau, debut, fin : entier) Debut Si (debut<fin) alors milieu  (debut + fin) /2 Tri_Fusion(T, debut, milieu); Tri_fusion (T, milieu + 1, fin); Interclasser (T, debut, milieu, fin) FSI Fin EXERCICE 2 : TRI PAR FUSION
  • 56. 56 Procédure Interclasser(T: tableau, debut, milieu, fin: entier) Debut Tmp: tableau temporaire du taille fin-debut+1 i 0; i1  debut, i2  milieu + 1; Tant que (i1≤milieu) et (i2 ≤ fin) faire Si (T[i1]<T[i2]) alors Tmp[i]T[i1]; i1++; Sinon Tmp [i]T[i2]; i2++; i++; Tant que (i1milieu) faire Tmp[i]T[i1]; i1++; i++; Tant que (i2fin) faire Tmp[i]T[i2]; i2++; i++; Pour idebut à fin faire T[i]=tmp[i-debut]; // recopier le tableau Fin EXERCICE 2 : TRI PAR FUSION PROCÉDURE « INTERCLASSER »
  • 57. 57  Pour T(n) = a.T(n / b) + c nk, on a :  Exercice 2: Tri par Fusion T(n) = 2 T(n/2) + n a = 2 , b = 2, k = 1  a = bk T(n) = O(n log n) COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER » THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
  • 58. 58  Pour T(n) = a.T(n / b) + c nk, on a : COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER » THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
  • 59. 59  Pour T(n) = a.T(n / b) + c nk, on a : COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER » THÉORÈME 2 DE RÉSOLUTION DE LA RÉCURRENCE
  • 60. 60 COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER » THÉORÈME 3 DE RÉSOLUTIONS DE RÉCURRENCE  Équations de récurrence linéaires sans second membre (f(n) = cte)  A une telle équation, on peut associer un polynôme:  La résolution de ce polynôme nous donne m racines ri ( avec m<=k).  La solution de l’équation de récurrence est ainsi donnée par :  Cette solution est en général exponentielle
  • 61. 61  Exercice 1 : La suite de Fibonacci COMPLEXITÉ DES ALGORITHMES « DIVISER POUR RÉGNER » THÉORÈME 3 DE RÉSOLUTIONS DE RÉCURRENCE
  • 62. SOURCES DE CE COURS  Frédéric Vivien, Algorithmique avancée, École Normale Supérieure de Lyon, 2002., pp. 93. Disponible sur http://perso.ens-lyon.fr/frederic.vivien/Enseignement/Algo- 2001-2002/Cours.pdf  Slim Msfar, Algorithmique et Complexité, 2012, pp 104. Disponible sur http://p835.phpnet.org/testremorque/upload/catalogue/coursalgorithmi.pdf  Walid-Khaled Hidouci, La récursivité, École nationale Supérieure d’Informatique, pp 107. Disponible sur hidouci.esi.dz/algo/cours_recursivite.pdf  La récursivité, Cours d’ Algorithmique et Structures de données dynamiques, École nationale Supérieure d’Informatique, Année Universitaire 2009-2010. 62