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

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
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siNarûtö Bàl'Sèm
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithmebadr zaimi
 
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
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de triSana Aroussi
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitivesInforMatica34
 
TD sur les fonctions en Python
TD sur  les fonctions en PythonTD sur  les fonctions en Python
TD sur les fonctions en PythonABDESSELAM ARROU
 
Exercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrigeExercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrigeWajihBaghdadi1
 
Résumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementRésumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementborhen boukthir
 
Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)Hichem Kemali
 
Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrentsmohamed_SAYARI
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheSana Aroussi
 
Serie recurrents & arithmetiques
Serie recurrents & arithmetiquesSerie recurrents & arithmetiques
Serie recurrents & arithmetiquesmohamed_SAYARI
 
Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfMbarkiIsraa
 
Examen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionExamen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionInes Ouaz
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en pythonMariem ZAOUALI
 
cours de complexité algorithmique
cours de complexité algorithmiquecours de complexité algorithmique
cours de complexité algorithmiqueAtef MASMOUDI
 

Tendances (20)

Récursivité
RécursivitéRécursivité
Récursivité
 
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
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 si
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
 
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)
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de tri
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitives
 
TD sur les fonctions en Python
TD sur  les fonctions en PythonTD sur  les fonctions en Python
TD sur les fonctions en Python
 
Recursiviteeeeeeeeee
RecursiviteeeeeeeeeeRecursiviteeeeeeeeee
Recursiviteeeeeeeeee
 
Exercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrigeExercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrige
 
Résumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementRésumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrement
 
Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)
 
Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrents
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de recherche
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
Serie recurrents & arithmetiques
Serie recurrents & arithmetiquesSerie recurrents & arithmetiques
Serie recurrents & arithmetiques
 
Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdf
 
Examen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionExamen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correction
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
cours de complexité algorithmique
cours de complexité algorithmiquecours de complexité algorithmique
cours de complexité algorithmique
 

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
 
Cours DEA Satisfaction et Optimisation sous Contraintes
Cours DEA Satisfaction et Optimisation sous ContraintesCours DEA Satisfaction et Optimisation sous Contraintes
Cours DEA Satisfaction et Optimisation sous Contraintesanonymousmega02
 

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
 
Résumé Algorithme et Programmation
Résumé Algorithme et ProgrammationRésumé Algorithme et Programmation
Résumé Algorithme et Programmation
 
Resume algorithme
Resume algorithmeResume algorithme
Resume algorithme
 
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
 
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
 
Cours DEA Satisfaction et Optimisation sous Contraintes
Cours DEA Satisfaction et Optimisation sous ContraintesCours DEA Satisfaction et Optimisation sous Contraintes
Cours DEA Satisfaction et Optimisation sous Contraintes
 

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 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 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Sana 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 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 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)
 
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

BOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitièresBOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitièresidelewebmestre
 
BOW 2024 - Logement des veaux laitiers en plein air
BOW 2024 - Logement des veaux laitiers en plein airBOW 2024 - Logement des veaux laitiers en plein air
BOW 2024 - Logement des veaux laitiers en plein airidelewebmestre
 
BOW 2024 - 3-3 - Adaptation des bâtiments pour ruminants au changement clima...
BOW 2024 - 3-3 -  Adaptation des bâtiments pour ruminants au changement clima...BOW 2024 - 3-3 -  Adaptation des bâtiments pour ruminants au changement clima...
BOW 2024 - 3-3 - Adaptation des bâtiments pour ruminants au changement clima...idelewebmestre
 
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminantsBow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminantsidelewebmestre
 
BOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcinBOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcinidelewebmestre
 
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcinsBOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcinsidelewebmestre
 
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...idelewebmestre
 
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSKennel
 
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...idelewebmestre
 
Cadre réglementaire et développement de l'agrivoltaïsme en France
Cadre réglementaire et développement de l'agrivoltaïsme en FranceCadre réglementaire et développement de l'agrivoltaïsme en France
Cadre réglementaire et développement de l'agrivoltaïsme en Franceidelewebmestre
 
BOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminantsBOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminantsidelewebmestre
 
Agrivoltaïsme et filière ovine en Dordogne
Agrivoltaïsme et filière ovine en DordogneAgrivoltaïsme et filière ovine en Dordogne
Agrivoltaïsme et filière ovine en Dordogneidelewebmestre
 
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VL
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VLBOW 2024 -3-9 - Matelas de logettes à eau refroidie VL
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VLidelewebmestre
 
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...idelewebmestre
 
BOW 2024 - 3-6 - Adaptation climat chaud Porcs
BOW 2024 - 3-6 - Adaptation climat chaud PorcsBOW 2024 - 3-6 - Adaptation climat chaud Porcs
BOW 2024 - 3-6 - Adaptation climat chaud Porcsidelewebmestre
 
Compersseur d'air a vis atlas copco avec huile
Compersseur d'air a vis atlas copco avec huileCompersseur d'air a vis atlas copco avec huile
Compersseur d'air a vis atlas copco avec huileMBouderbala
 
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitièresBOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitièresidelewebmestre
 
BOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pasBOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pasidelewebmestre
 
BOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitièresBOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitièresidelewebmestre
 

Dernier (20)

BOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitièresBOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitières
 
BOW 2024 - Logement des veaux laitiers en plein air
BOW 2024 - Logement des veaux laitiers en plein airBOW 2024 - Logement des veaux laitiers en plein air
BOW 2024 - Logement des veaux laitiers en plein air
 
BOW 2024 - 3-3 - Adaptation des bâtiments pour ruminants au changement clima...
BOW 2024 - 3-3 -  Adaptation des bâtiments pour ruminants au changement clima...BOW 2024 - 3-3 -  Adaptation des bâtiments pour ruminants au changement clima...
BOW 2024 - 3-3 - Adaptation des bâtiments pour ruminants au changement clima...
 
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminantsBow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
 
BOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcinBOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcin
 
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcinsBOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
 
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
 
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
 
Note agro-climatique n°2 - 17 Avril 2024
Note agro-climatique n°2 - 17 Avril 2024Note agro-climatique n°2 - 17 Avril 2024
Note agro-climatique n°2 - 17 Avril 2024
 
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
 
Cadre réglementaire et développement de l'agrivoltaïsme en France
Cadre réglementaire et développement de l'agrivoltaïsme en FranceCadre réglementaire et développement de l'agrivoltaïsme en France
Cadre réglementaire et développement de l'agrivoltaïsme en France
 
BOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminantsBOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminants
 
Agrivoltaïsme et filière ovine en Dordogne
Agrivoltaïsme et filière ovine en DordogneAgrivoltaïsme et filière ovine en Dordogne
Agrivoltaïsme et filière ovine en Dordogne
 
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VL
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VLBOW 2024 -3-9 - Matelas de logettes à eau refroidie VL
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VL
 
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
 
BOW 2024 - 3-6 - Adaptation climat chaud Porcs
BOW 2024 - 3-6 - Adaptation climat chaud PorcsBOW 2024 - 3-6 - Adaptation climat chaud Porcs
BOW 2024 - 3-6 - Adaptation climat chaud Porcs
 
Compersseur d'air a vis atlas copco avec huile
Compersseur d'air a vis atlas copco avec huileCompersseur d'air a vis atlas copco avec huile
Compersseur d'air a vis atlas copco avec huile
 
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitièresBOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
 
BOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pasBOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pas
 
BOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitièresBOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitières
 

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