Sie sind auf Seite 1von 62

Universit Saad Dahlab Blida1

Facult des Sciences


Dpartement dInformatique
Licence dInformatique
Semestre 3 (2me anne)
Algorithmique et Structures de Donnes

CHAPITRE IV:
RCURSIVIT

Mme AROUSSI

2016-2017

Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/


PLAN DU CHAPITRE IV

Dfinition

volution dun appel rcursif

Types de la rcursivit

Paradigme Diviser pour rgner

Conception dun algorithme rcursif

Complexit des algorithmes rcursifs


2
DFINITION
Un algorithme est dit rcursif lorsquil est auto-

rfrent: il fait rfrence lui-mme dans sa dfinition.

Autrement dit, un algorithme est dit rcursif s'il est dfini

en fonction de lui-mme, directement ou indirectement.

3
EXEMPLE
Exemple : la factorielle n!

Itratif Rcursif

n! = 1 * 2 * ... * n n! = n * (n-1)!

Facto (n: entier): entier Facto (n: entier): entier

Dbut Dbut

F1; retourner n*Facto (n-1);

Pour i2 n faire Fin

FF*i;

retourner F;
4
Fin
VOLUTION DUN APPEL RCURSIF
L'excution d'un appel rcursif passe par deux phases, la
phase de descente et la phase de la remonte :
Dans la phase de descente, chaque appel rcursif fait son tour
un appel rcursif.
Facto (n: entier): entier
Dbut
retourner n*Facto (n-1);
Facto(4) 4 * Facto(3)
Fin
Facto(3) 3 * Facto(2)

Facto(2) 2 * Facto(1)

Facto(1) 1 * Facto(0)
5

Facto(4) 0 * Facto(-1)
VOLUTION DUN APPEL RCURSIF
CONDITION DARRT
Puisqu'un algorithme rcursif s'appelle lui-mme, il est
impratif qu'on prvoit une condition d'arrt la
rcursion, sinon le programme ne s'arrte jamais!

Exemple 1: la factorielle n!
Version prcdente Version correcte

Facto (n: entier): entier Facto (n: entier): entier


Dbut Dbut
retourner n*Facto (n-1); Si (n=1) alors retourner 1
Fin Sinon retourner n*Facto (n-1); 6
Fin
VOLUTION DUN APPEL RCURSIF
En arrivant la condition terminale, on commence la phase de la
remonte qui se poursuit jusqu' ce que l'appel initial soit termin,
ce qui termine le processus rcursif. Facto (n: entier): entier
Dbut
Si (n=1) alors retourner 1
Sinon retourner n*Facto (n-1);
Fin

24

Phase de la remonte
Facto(4) 4 * Facto(3)
6
Facto(3) 3 * Facto(2)
1
2 7
Facto(2) 2 * Facto(1)
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
8
U0 = U1 = 1)
EXERCICE 1
1. La somme des n premiers

Itratif Rcursif

Som (n) = 0+ 1 + 2 + ... + n Som (n) = n + Som (n-1)

Som (n: entier): entier Som (n: entier): entier


Dbut
Dbut
Si n = 0 alors
S0; retourner (0)

Pour i1 n faire Sinon


retourner (Som(n-1) +n)
SS+i;
Fin
retourner S;
9
Fin
EXERCICE 1
2. La somme de deux entiers a et b

1re solution 2re solution

a+b = a+(b-1)+1 a+b = (a-1)+b+1

Som (a,b: entier): entier Som (a,b: entier): entier

Dbut Dbut
Si b = 0 alors Si a = 0 alors
retourner (a) retourner (b)
Sinon Sinon
retourner (Som(a, b-1) +1) retourner (Som(a-1, b) +1)
Fin Fin
10
EXERCICE 1
3. Le produit de deux entiers a et b

1re solution 2re solution

a*b = a*(b-1)+a a*b = (a-1)*b+b

Prod (a,b: entier): entier Prod (a,b: entier): entier

Dbut Dbut
Si a = 0 ou b = 0 alors Si a = 0 ou b = 0 alors
retourner (0) retourner (0)
Sinon Sinon
retourner (Prod(a, b-1) +a) retourner (Prod(a-1, b) +b)
Fin Fin
11
EXERCICE 1
4. La puissance ab (a et b deux entiers positifs)

itratif Rcursif

ab = a*a*a*......*a, b fois ab = ab-1 * a

Puiss (a,b: entier): entier Puiss (a,b: entier): entier

Dbut Dbut

P1; Si b = 0 alors
retourner (1)
Pour i1 b faire
Sinon
PP*a; retourner (Puiss(a, b-1) *a)

retourner P; Fin
12
Fin
EXERCICE 1
5. Le quotient et le reste de la division de a par b (a et b
deux entiers positifs)

Quotient Reste de la division

a div b = (a-b) div b+ 1 a mod b = (a-b) mod b

Quotient(a,b: entier): entier Reste (a,b: entier): entier

Dbut Dbut
Si ab alors Si ab alors
retourner (0) retourner (a)
Sinon Sinon
retourner (Quotient(a-b, b) +1) retourner (Reste(a-b, b))
13
Fin Fin
EXERCICE 1
7. Le Plus Grand Commun Diviseur entre a et b (a et b
deux entiers positifs)

PGCD(a,b: entier): entier

Dbut
Si a=b alors retourner (a)
Sinon
Si a b alors retourner (PGCD(a, b-a))
Sinon retourner (PGCD(a-b, b))
14
Fin
EXERCICE 1
8. La suite de Fibonacci

Fib(n: entier): entier

Dbut
Si n = 0 ou n = 1 alors retourner (1)
Sinon
retourner (Fib (n-1)+Fib(n-2))
Fin
15
RCURSIVIT TERMINALE VS NON TERMINALE
Un module rcursif est dit terminal si aucun
traitement n'est effectu la remonte d'un appel
rcursif (sauf le retour du module).
Reste de la division
Reste(13,4)
a mod b = (a-b) mod b

Reste(9, 4) Reste (a,b: entier): entier


Dbut
Reste (5, 4)
Si ab alors
retourner (a)
Reste (1, 4)
Sinon

1 retourner (Reste(a-b, b))16


Fin
RCURSIVIT TERMINALE VS NON TERMINALE
Un module rcursif est dit non terminal si le rsultat
de l'appel rcursif est utilis pour raliser un traitement
(en plus du retour du module).

Factoriel
Fact(4)
n! = n * (n-1)!

4 * Fact(3) Facto (n: entier): entier


Dbut
3 * Fact (2) Si (n=1) alors
retourner 1
2 * Fact(1)
Sinon
retourner n*Facto (n-1);
17
1
Fin
RCURSIVIT TERMINALE VS NON TERMINALE

Exercice 1 Algorithme Type


Som (n) Si n = 0 alors retourner (0) Non terminale
Sinon retourner (Som(n-1) +n)
Som (a,b) Si b = 0 alors retourner (a) Non terminale
Sinon retourner (Som(a, b-1) +1)
Prod (a,b) Si a = 0 ou b = 0 alors retourner (0) Non terminal e
Sinon retourner (Prod(a, b-1) +a)
Puissa (a, b) Si b = 0 alors retourner (1) Non terminale
Sinon retourner (Puiss(a, b-1) *a)
Quotient (a,b) Si ab alors retourner (0) Non terminale
Sinon
retourner (Quotient(a-b, b) +1)
18
RCURSIVIT TERMINALE VS NON TERMINALE

Exercice 1 Algorithme Type


PCGD (a, b) Si a=b alors retourner (a) Terminale
Sinon
Si a b alors
retourner (PGCD(a, b-a))
Sinon retourner (PGCD(a-b, b))
Fib (n) Si n = 0 ou n = 1 alors retourner (1) Non terminale
Sinon
retourner (Fib (n-1)+Fib(n-2))
Comb (p, n) Si p = 0 ou p = n alors retourner (1) Non terminale
Sinon
retourner
(Comb(p,n-1)+Comb(p-1, n-1)) 19
RCURSIVIT TERMINALE VS NON TERMINALE
PARFOIS, il est possible de transformer un module
rcursif non terminal un module rcursif terminal.

Rcusivit non Rcursivit Terminale


terminale
Fonction Facto (n: entier): resultat 1
entier Procdure Facto (
Dbut n: entier, Var resultat: entier)
Si (n=0) alors Dbut
retourner 1 Si (n 1) alors
Sinon Facto (n-1, n * resultat);
retourner n*Facto (n-1); Fin
Fin
20
RCURSIVIT TERMINALE VS NON TERMINALE

resultat 1
Procdure Facto ( n: entier, Var resultat: entier)
Dbut
Si (n > 1) alors
Facto (n-1, n * resultat);
Fin

Phase de descente

Facto(4,1) Facto(3, 4*1) Facto(2, 3*4) Facto(1, 2*12) Facto(1, 24 )

Phase de la remonte 21
RCURSIVIT TERMINALE VS NON TERMINALE

Fonction non terminale Procdure terminale

resultat0
Som (n:entier):entier Som (n: entier, var resultat:entier)
Si n = 0 alors retourner (0) Si n 0 alors
Sinon retourner (Som(n-1) +n) Som(n-1, resultat +n))
resultata
Som (a,b:entier):entier Som (a,b: entier, var
Si b = 0 alors retourner (a) resultat:entier)
Sinon retourner ( Som(a, b-1) +1) Si b 0 alors
Som(a, b-1, resultat+1)
resultat0
Prod (a,b:entier):entier Prod ( a,b;: entier, var
Si a = 0 ou b = 0 alors retourner (0) resultat:entier)
Sinon retourner (Prod(a, b-1) +a) Si a 0 et b 0 alors
Prod(a, b-1, resultat +a)) 22
RCURSIVIT TERMINALE VS NON TERMINALE
Fonction non terminale Procdure terminale

resultat1
Puissance ( a, b:entier):entier Puissance (a, b: entier, var
Si b = 0 alors retourner (1) resultat:entier)
Sinon retourner (Puiss(a, b-1) *a) Si b 0 alors
Puiss(a, b-1, resultat *a))
resultat0
Quotient( a,b:entier):entier Quotient ( a,b: entier, var
Si ab alors retourner (0) resultat:entier)
Sinon Si ab alors
retourner (Quotient(a-b, b) +1)) 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) 23
Sinon
retourner (Comb(p,n-1)+Comb(p-1, n-1))
TYPES DE RCURSIVIT

1. La rcursivit simple o lalgorithme contient un seul


appel rcursif dans son corps.
Exemple : la fonction factorielle

Rcusivit non terminale Rcursivit Terminale


Facto (n: entier): entier resultat 1
Dbut Procdure Facto (
Si (n=0) alors n: entier, Var resultat: entier)
retourne 1 Dbut
Sinon Si (n 1) alors
retourne n*Facto (n-1); Facto (n-1, n * resultat);
Fin Fin
24
TYPES DE RCURSIVIT

2. La rcursivit multiple o lalgorithme contient plus


d'un appel rcursif dans son corps
Exemple: le calcul de la suite de la suite de Fibonacci

Fib(n: entier): entier


Si n = 0 ou n = 1 alors retourner (1)
Sinon
retourner (Fib (n-1)+Fib(n-2))
25
TYPES DE RCURSIVIT
Exercice 1 Algorithme Type

Som (n) Si n = 0 alors retourner (0) Simple


Sinon retourner (Som(n-1) +n)
Som (a,b) Si b = 0 alors retourner (a) Simple
Sinon retourner (Som(a, b-1) +1)
Prod (a,b) Si a = 0 ou b = 0 alors retourner (0) Simple
Sinon retourner (Prod(a, b-1) +a)
Quotient (a,b) Si ab alors retourner (0) Simple
Sinon retourner (Quotient(a-b, b) +1)
Reste (a, b) Si ab alors retourner (a) Simple
Sinon retourner (Reste(a-b, b))
Puissance (a, b) Si b = 0 alors retourner (1) Simple
Sinon retourner (Puiss(a, b-1) *a)
PCGD (a, b) Si a=b alors retourner (a) Multiple
Sinon 26
Si a b alors retourner (PGCD(a, b-a))
Sinon retourner (PGCD(a-b, b))
TYPES DE RCURSIVIT

3. La rcursivit mutuelle: Des modules sont dits mutuellement


rcursifs sils dpendent les unes des autres

Exemple 10 : la dfinition de la parit d'un entier peut tre crite de


la manire suivante :

27
TYPES DE RCURSIVIT

4. La rcursivit imbrique consiste faire un appel rcursif


l'intrieur d'un autre appel rcursif.

Exemple 11: La fonction d'Ackermann

28
EXERCICE 2
Soit Tab un tableau dentiers de taille n sur lequel on
veut raliser les oprations suivantes :

1. Som: qui permet de retourner la somme des


lments du tableau Tab.

2. Prod: qui permet de retourner le produit des


lments du tableau Tab.

3. Moyenne: qui permet de retourner la moyenne des


lments du tableau Tab.

4. RechElt : qui permet de retourner lindice de


29
llment contenant une valeur donne
PARADIGME DIVISER POUR RGNER
La rcursivit est un outil puissant permettant de concevoir
des solutions (simples) sans se proccuper des dtails
algorithmiques internes
Paradigme Diviser pour Rgner: spcifier la solution du
problme en fonction de la (ou des) solution(s) d'un (ou de
plusieurs) sous-problme plus simple(s).
Comment trouver la solution d'un sous-problme ?
Ce n'est pas important car on prendra comme hypothse que
chaque appel rcursif rsoudra un sous-problme
Si on arrive trouver une solution globale en utilisant ces
hypothses, alors ces dernires (hypothses) sont forcment
correctes, de mme que la solution globale Cela ressemble 30la
dmonstration par rcurrence
PARADIGME DIVISER POUR RGNER
Problme Dcomposer le problme en k
Diviser

Global sous problme de taille


moindre

Sous Sous Sous


Problme Problme Problme
1 2 K

Chaque sous problme sera rsolu par la mme dcomposition rcursive


Rgner

....jusqu lobtention de sous problmes triviaux


Sous Sous Sous
Solution Solution Solution
1 2 K
Combiner

Combinaison des solutions


Solution obtenues
Globale 31
EXERCICE 2 : RECHERCHE MAXIMUM
Soit Tab un tableau n lments, crire une fonction
rcursive permettant de rechercher de lindice du
maximum dans Tab en utilisant le paradigme diviser
pour rgner

5 8 1 10
Diviser

5 8 1 10
Rgner

5 8 1 10

8 10
32

Combiner 10
EXERCICE 2
Soit Tab un tableau dentiers de taille n sur lequel on
veut raliser les oprations suivantes :

5. RechMax : qui permet de retourner lindice de


llment le plus grand du tableau Tab

6. RechMin : qui permet de retourner lindice de


llment le plus petit du tableau Tab

7. RechDicho : qui permet de faire une recherche par


dichotomie dune valeur donne dans le cas o le
tableau Tab est tri par ordre croissant
33
8. Tri_Fusion: qui permet de trier le tableau Tab par
la mthode de fusion.
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 problme en 2 sous-problmes

k1 RechMax(Tab, indDeb, m ) // rgner sur le 1er sous-problme

k2 RechMax(Tab, m+1, indFin) // rgner sur le 2me sous-problme

// Combiner les solutions

Si (Tab[k1] > Tab[k2]) alors retourner (k1)

Sinon retourner (k2)


34
EXERCICE 2 : TRI PAR FUSION
PRINCIPE
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. 7 3 18 13 7

7 3 18 13 7

7 3 18 13 7

13 7
3 7
7 13

7 13 18
35

3 7 7 13 18
EXERCICE 2 : RECHERCHE DICHOTOMIQUE
Soit Tab un tableau tri (ordre croissant) n lments.
La recherche par dichotomie compare llment rechercher x avec
llment en position m situ au milieu du sous-tableau :
si Tab[m] = x : on a trouv llment en position m
si Tab[m] > x : il est impossible que x se trouve aprs la position
m dans le tableau. Il reste traiter uniquement la moiti
infrieure du tableau
De mme si Tab[m] < x : il reste traiter uniquement la moiti
suprieure du tableau
On continue ainsi la recherche jusqu trouver llment ou bien
aboutir sur un tableau de taille nulle, x n'est pas prsent et la
recherche s'arrte.
36
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 37

Retourner (Faux)
EXERCICE 2 : TRI PAR FUSION
PARADIGME DIVISER POUR RGNER

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 manire

que le tableau T reste trie

38
EXERCICE 2 : TRI PAR FUSION
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 39

Fin
EXERCICE 2 : TRI PAR FUSION
PROCDURE INTERCLASSER
Procdure 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 (i1milieu) et (i2 fin) faire
Si (T[i1]<T[i2]) alors Tmp[i]T[i1]; i1++;
Sinon Tmp [i]T[i2]; i2++;
i++;
Tant que (i1milieu) faire Tmp[i]T[i1]; i1++; i++;
Tant que (i2fin) faire Tmp[i]T[i2]; i2++; i++;
Pour idebut fin faire T[i]=tmp[i-debut]; // recopier le tableau 40

Fin
CONCEPTION DUN ALGORITHME RCURSIF

Dans un module rcursif (procdure ou fonction) les


paramtres doivent tre clairement spcifis

Dans le corps du module, il doit y avoir:


un ou plusieurs cas particuliers: ce sont les cas simples qui ne
ncessitent pas d'appels rcursifs

un ou plusieurs cas gnraux: ce sont les cas complexes qui sont


rsolus par des appels rcursifs

L'appel rcursif d'un cas gnral doit toujours mener vers


un des cas particuliers 41
COMPLEXIT DES ALGORITHMES RCURSIFS
La complexit dun algorithme rcursif se fait par la
rsolution dune quation de rcurrence en liminant la
rcurrence par substitution de proche en proche.
Exemple : la fonction factorielle
Facto (n: entier): entier
Dbut
Si (n=1) alors retourner 1
Sinon retourner n*Facto (n-1);
Fin

42
COMPLEXIT DES ALGORITHMES RCURSIFS
Pour calculer la solution gnrale de cette quation, on
peut procder par substitution :

43

O (T) = O (n)
COMPLEXIT DES ALGORITHMES RCURSIFS
THORME 1 DE RSOLUTION DE LA RCURRENCE

quations de rcurrence linaires:

Exemple : Factorielle

i.e. T(n) = T(n-1) + f(n) avec a = 1, T(0) = 0, f(n) = b;

44

O (T) = O (n)
COMPLEXIT DES ALGORITHMES RCURSIFS
THORME 1 DE RSOLUTION DE LA RCURRENCE

quations de rcurrence linaires:

Exemple : T(n) = 2*T(n-1) + c avec T(0) = 0

O (T) = O(2n) 45
COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER

Le temps d'excution dun algorithme diviser pour rgner se dcompose


suivant les trois tapes du paradigme de base :

Diviser: le problme en a sous-problmes chacun de taille 1/b de la


taille du problme initial. Soit D(n) le temps ncessaire la division du
problme en sous-problmes.

Rgner: Soit aT (n/b) le temps de rsolution des a sous-problmes.

Combiner: Soit C(n) le temps ncessaire pour construire la solution


finale partir des solutions aux sous-problmes.

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 dfinie :
46

T(n) = a.T(n / b) + f(n)


COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER
THORME 2 DE RSOLUTION DE LA RCURRENCE

Pour f (n) = c nk , on a : T(n) = a.T(n / b) + c nk

47
COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER
THORME 2 DE RSOLUTION DE LA RCURRENCE

Pour T(n) = a.T(n / b) + c nk, on a :

Exercice 2: Recherche du maximum.

48
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 problme en 2 sous-problmes

k1 maximum (Tab, indDeb, m ) // rgner sur le 1er sous-problme

k2 maximum (Tab, m+1, indFin) // rgner sur le 2me sous-problme


// Combiner les solutions

Si (Tab[k1] > Tab[k2]) alors retourner (k1)

Sinon retourner (k2)


49
COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER
THORME 2 DE RSOLUTION DE LA RCURRENCE

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) 50
COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER
THORME 2 DE RSOLUTION DE LA RCURRENCE

Pour T(n) = a.T(n / b) + c nk, on a :

Exercice 2: Recherche dichotomique

51
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 52

Retourner (Faux)
COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER
THORME 2 DE RSOLUTION DE LA RCURRENCE

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))
53
COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER
THORME 2 DE RSOLUTION DE LA RCURRENCE

Pour T(n) = a.T(n / b) + c nk, on a :

Exercice 2: Tri par Fusion

54
EXERCICE 2 : TRI PAR FUSION
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 55

Fin
EXERCICE 2 : TRI PAR FUSION
PROCDURE INTERCLASSER
Procdure 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 (i1milieu) et (i2 fin) faire
Si (T[i1]<T[i2]) alors Tmp[i]T[i1]; i1++;
Sinon Tmp [i]T[i2]; i2++;
i++;
Tant que (i1milieu) faire Tmp[i]T[i1]; i1++; i++;
Tant que (i2fin) faire Tmp[i]T[i2]; i2++; i++;
Pour idebut fin faire T[i]=tmp[i-debut]; // recopier le tableau 56

Fin
COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER
THORME 2 DE RSOLUTION DE LA RCURRENCE

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)


57
COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER
THORME 2 DE RSOLUTION DE LA RCURRENCE

Pour T(n) = a.T(n / b) + c nk, on a :

58
COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER
THORME 2 DE RSOLUTION DE LA RCURRENCE

Pour T(n) = a.T(n / b) + c nk, on a :

59
COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER
THORME 3 DE RSOLUTIONS DE RCURRENCE

quations de rcurrence linaires sans second membre (f(n) = cte)

A une telle quation, on peut associer un polynme:

La rsolution de ce polynme nous donne m racines ri ( avec


m<=k).

La solution de lquation de rcurrence est ainsi donne par :

Cette solution est en gnral exponentielle


60
COMPLEXIT DES ALGORITHMES DIVISER POUR RGNER
THORME 3 DE RSOLUTIONS DE RCURRENCE

Exercice 1 : La suite de Fibonacci

61
SOURCES DE CE COURS
Frdric Vivien, Algorithmique avance, cole Normale Suprieure 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 rcursivit, cole nationale Suprieure dInformatique,


pp 107. Disponible sur hidouci.esi.dz/algo/cours_recursivite.pdf

La rcursivit, Cours d Algorithmique et Structures de donnes dynamiques, cole


nationale Suprieure dInformatique, Anne Universitaire 2009-2010.

62

Das könnte Ihnen auch gefallen