Vous êtes sur la page 1sur 103

Calculs de complexit d'algorithmes

zNotations asymptotiques :
0 et
zComplexit des algorithmes
zExemples de calcul de complexit

Complexits dun algorithme


zUn algorithme partir dune donne tablit
un rsultat .
zLa taille de la donne est mesure par un
entier n.
{complexit temporelle
une fonction de n qui mesure le temps de calcul
pour une donne de taille n
{complexit en mmoire
une fonction de n qui mesure la place mmoire
utilise pour le calcul sur une donne de taille n
2

Complexits temporelles
zDans le pire des cas : donne une borne
suprieure sur le temps de calcul pour
toutes les donnes de taille n
zEn moyenne : fait la moyenne des temps
de calculs pour toutes les donnes de
taille n

Mesure-t-on vraiment le temps de


calcul ?
z Non, car le temps de calcul dpend de la machine
z On value le nombre doprations "lmentaires"
faites (additions, multiplications, etc.)
z On obtient donc une estimation du temps de calcul
une constante multiplicative prs (le temps mis par
la machine pour faire une opration "lmentaire")
z Dans cette estimation, on ne considre que le terme
dominant
4

Dfinitions
zOn dit que f est domine par g
(not f= O (g)) lorsque
n 0 , c > 0 ,

n n 0 , f ( n ) cg ( n )

zOn dit que f est du mme ordre de


grandeur que g et l'on note f = (g)
lorsque f=O(g) et g=O(f).
5

Dfinitions
z f est ngligeable devant g, (not f =o(g))
lorsque f(n)/g(n) tend vers 0 quand n tend
vers l'infini
zOn dit que f est quivalente g lorsque
f(n)/g(n) tend vers 1 lorsque n tend vers
l'infini

Relations entre O, o et autres


zf est ngligeable devant g implique
f est domine par g ?

zf est quivalente g
implique
f est du mme ordre de grandeur que g ?
7

Remarque
zHormis pour l'quivalence, ces notions
sont indpendantes des constantes
multiplicatives non nulles.
Par exemple :
si f est ngligeable devant g,
alors cf est ngligeable devant c'g pour
tout rels c et c' non nuls.

Polynmes et notations O et
zSoit P(n) un polynme en n. Pour quelles
valeurs de p a-t-on P(n)=O(np)?

zPour quelles valeurs de p a-t-on


P(n)=(np)?
9

z Montrer que pour tout entier k, on a

= (n

k +1

i= 0

10

chelle De Comparaison
zExercice
Soient les fonctions
f1(n)=n,
f2(n)=2n,
f4(n)=2n,
f3(n)=n2,
f6(n)=log n, f7(n)=n!, f8(n)= nlog n
f5(n)=nn,
Pour chaque couple (i, j) dire si on a fi=o(fj),

fi=O(fj)
fi=(fj).

11

109 Instructions/secondes
(1 gigaHertz)
n
log n
2n
nlogn
n2
n5

5
3 10-9 s
10 10-9 s
12 10-9 s
25 10-9 s
3 10-6 s

10
4 10-9 s
2 10-8s
3 10-8s
10-7 s
10-4 s

15
4 10-9 s
3 10-8 s
6 10-8s
2,25 10-7 s
7,59 10-4 s

20
5 10-9 s
4 10-8 s
10-7s
4 10-7 s
3 10-3 s

100
7 10-9 s
2 10-7 s
7 10-7s
10-5 s
10 s

2n

32 10-9 s

10-6 s

3,28 10-5 s

10-3 s

n!

120 10-9 s 4 10-3 s

nn

3 10-6 s

1,4 103s=
23 minutes
4,37 108s =
13 ans

2,4 109 s =
77 ans
1017s =
3 107sicles

1,2 1021 s
4 1011 sicles
10147 s
3 10139 sicles
10191s
10 3000 s
3 10181sicles

10 s

1000
10-8 s
2 10-6 s
10-5s
10-3 s
106 s
= 11 jours
10292 s
3 10282 sicles
10 500 s

12

En une Journe, un an jusqu'o peut-on, aller ?


f(n)
n
log(n)
2n
n log(n)
n2
n5
2n
n!
nn

1 jour

9 1013
10310
4.5 1013
2 1012
107
600
32
16
12

1 an
31 1015
16
10
10
15 1015
5 1014
1.7 108
2 000
55
18
13

13

Pourquoi Utiliser O Et Pour Mesurer Des


Complexits?
zExpressions une constante multiplicative
prs, indpendante du temps de calcul
dune instruction de base
zToute instruction de base prend le temps 1
zTerme dominant uniquement donc
expression simple
14

n, cest quoi?
zLa complexit sexprime en fonction de la
taille de la donne
zA vous de dire quelle fonction taille vous
avez choisie
zEt la donne cest quoi ?
15

Rgle 1
Composition Squentielle
zI1 complexit temporelle en (f1(n))
zI2 complexit temporelle en (f2(n))
Le bloc dinstructions
I1 ;
I2
a une complexit temporelle en
(max(f1(n), f2(n)))
16

Rgle 2
if (C) I1 else I2
zvaluation de la condition C est en (f(n))
z De I1 en (f1(n)),
de I2 en (f2(n))
Alors la complexit de linstruction
if (C) I1 else I2
est en O(max(f(n),f1(n),f2(n)))
17

Rgle 3
Boucle for
En supposant que :
zI1 a une complexit temporelle en (f1(n))
z I1 na aucun effet sur les variables i et n,
la complexit temporelle de la boucle
for (int i=0 ; i < n ; i++) {
I1
}
est en (n*f1(n))

18

z Si une instruction I se trouve au cur de


k boucles for imbriques, chacune d'elle
de la forme
for (int im=0 ; im < n ; im++)
o 0 < m < (k+1)
combien de fois l'instruction I est elle
excute ?
19

zSi une instruction I se trouve au cur de k


boucles for imbriques, chacune d'elle de
la forme
for (int im=0 ; im < im-1 ; im++)
o 0 < m < (k+1)
avec i0=n
combien de fois l'instruction I est elle
excute ?
20

Rgle 4
Boucle While (C) {I}
zvaluation de C en (f(n))
zI en (f1(n))
zBoucle while est excute (g(n)) fois
while (C) {
I
}
est en (g(n)*max(f(n),f1(n)))
21

Estimer les complexits des morceaux de codes suivants,


sachant que
linstruction I1 est en (1) et
I1 ne modifie pas les entiers i, j, k et n

for (int i=0 ; i < n ; i++) {


for (int j=i ; j < n ; j++) {
for (int k=0 ; k < j ;
k++) {
I1
}
}
}

22

Estimer les complexits des morceaux de codes suivants, sachant que et les
instructions I1, I2, I3 sont en (1) et ne modifie pas les entiers i, j, k et n

int i=1 ;
int j=1 ;
while (i <n) {
i++ ;
I1 ;
while (( j < n) && Condition) {
j++ ;
I2
}
I3 ;
}

23

Rgle 5
Composition de Mthodes
zmethode1(Classe1 o1) en
O(f1(taille1(o1))
zmethode2(Classe2 o2) en O(f2(taille2(o2))
zmethode2 renvoie un objet de Classe1
La complexit de methode1(methode2(o2))
est en
O(max(f2(taille2(o2)),f1(taille1(methode2(o2))))

24

On connat l'criture d'un nombre en base b, et l'on veut convertir ce nombre en base
usuelle (base dix).
1. On utilise la mthode "convertionDirecte". Quelle en est la complexit?

public int convertionDirecte(int[] a, int b) {


int rsultat =a[0] ;
int auxiliaire ;
for (int rang =1 ; rang < a.length ; rang++) {
if (a[rang] != 0) {
auxiliaire = a[rang] ;
for (int indice =0 ; indice <rang ;
indice ++) {
auxiliaire = auxiliaire *b ;
}
rsultat = rsultat + auxiliaire;
}
}
return rsultat ;
25
}

2. On utilise la mthode "convertionDirecteV2" dans laquelle on mmorise


dans une variable monome brang. Ecrire cette mthode
"convertionDirecteV2" et en donner la complexit ?

26

3. Prouvez que la mthode suivante dite de Horner,


effectue bien le mme travail. Quelle en est la
complexit ?

public int horner(int[] a, int b) {


int n = a.length ;
int rsultat =a[n-1] ;
for (int rang = n-2 ; rang >= 0 ;
rang--){
rsultat = b* rsultat +a[rang] ;
}
return rsultat ;
}
27

On dsire lever l'entier a la puissance n.

Quelle est la complexit de la mthode suivante ?


public int puissance(int n, int a) {
int rsultat = a ;
for(int i =1 ; i <n ;i++){
rsultat=rsultat*a ;
}
return rsultat ;
}
28

Montrez que le code suivant est correct. Quel en est la complexit ?

public int puissance(int n, int a) {


int aux = n ;
int puissanceDea = a ;
int rsultat=1 ;
while ( aux != 0 ) {
if (aux mod 2 == 1) {
rsultat = rsultat * puissanceDea ;
}
aux=aux/2 ;
puissanceDea = puissanceDea * puissanceDea ;
}
return rsultat ;
29
}

Programmation rcursive
zQuelques exemples
zEquations de rcurrences
zQuelques mthodes de rsolution

30

Recherche dichotomique du plus grand


lment

zL contient n lments
zAlgorithme (rcursif)
{Si L contient un seul lment : cest fini
{Sinon :
zCouper L en deux listes L1 et L2 de taille
"presque" identiques
zChercher m1 le max de L1
zChercher m2 le max de L1
zRetourner le max de m1 et m2

31

Combien de comparaisons ?
On note c(n) le nombre de comparaisons
ncessaires pour la recherche
dichotomique du plus grand lment dans
une liste de taille n
zc(1) = 0
z c(n) = c(n/2)+c(n/2)+1
32

Dterminez la complexit de la mthode suivante

int factorial(int n) {
if (n == 0) {
return 1;
}
else {
return (n*factorial(n-1));
}
}
33

Mthode factorielle
zSoit c(n) la nombre de multiplications
effectues dans le calcul de factorial(n).
zOn a c(n)=c(n-1)+1, c(1)=0

34

Recherche du maximum dans une


table de n lments

zSi n=1, renvoyer lunique lment


zSinon calculer rcursivement le maximum
des n-1 premiers lements;
Le comparer avec le dernier lment;
renvoyer le plus grand des deux.
35

Analyse : nombre de comparaisons


effectues
zC(n)= complexit de la recherche du plus
grand parmi n
zc(n)=c(n-1)+1
zc(1)=0

36

Trier une table de n lments


zSi n=1 rien faire
zSinon
{ rechercher le maximum de la table
{ changer le maximum et le dernier lment
{ trier la sous-table constitue des n-1
premiers lments

37

zc(n)=c(n-1)+an+b
zc(1)=1

38

Tours de Hanoi
zCombien de mouvements au minimum
pour dplacer une tour de n disques

39

Tour de Hanoi
public class Towers {
static int nDisks=7;
public static void main(String[]
args){
moveTowers(nDisks,A,B,C);
}
}
40

// Pr-condition : n > 0
public static void moveTowers(int n, char
from, char inter, char to) {
if (n==1) {
moveDisk(1,from,to);
}
else {
moveTowers(n-1,from,to,inter);
moveDisk(n,from,to);
moveTowers(n-1,inter,from,to);
}
}
o moveDisk(n,from,to) peut tre par exemple :
System.out.println(Disk + n + from + from + to + to)
41

Complexit de moveTowers
zc(n)=2c(n-1)+k
(ou c(n)=2c(n-1)+1)
zDonc c(n)=a2n+b
zC(n)=(2n)

42

z On considre deux versions modifies des tours de Hanoi.


Dans chacun des cas, on demande quel est le nombre
minimum de dplacements de disques ncessaires.
z La pile contient initialement 2n disques, de n tailles
diffrentes, il y a deux disques de chaque taille. Les
disques de mme taille sont indistinguables.
z La pile comporte n disques de taille diffrente, mais les 3
piquets sont sur un cercle et les mouvements lmentaires
de disques se font du piquet o est le disque son suivant
dans le sens des aiguilles d'une montre.
43

Nombres De Fibonacci
La suite de Fibonacci
Leonardo de Pise, surnomm Fibonacci
est un mystre de l'histoire des
mathmatiques. Il serait n vers 1175 et
mort en 1240 (?), et aurait vcu toute sa
vie Pise. Il a publi un unique livre, Liber
Abaci (une uvre collective ?).

44

Nombres De Fibonacci
Reproduction des lapins : Possdant au dpart un couple de
lapins , combien de couples de lapins obtient-on en douze mois si
chaque couple engendre tous les mois un nouveau couple
compter du second mois de son existence ?
z
z
z
z
z
z
z
z
z
z
z
z
z

Janvier : 1 couple
Fvrier : 1 couple
Mars : 1 + 1 = 2 couples
Avril : 2 + 1 = 3 couples
Mai : 3 + 2 = 5 couples
Juin : 5 + 3 = 8 couples
Juillet : 8 + 5 = 13 couples
Aot : 13 + 8 = 21 couples
Septembre : 21 + 13 = 34 couples
Octobre : 34 + 21 = 55 couples
Novembre : 55 + 34 = 89 couples
Dcembre : 89 + 55 = 144 couples
Janvier : 144 + 89 = 233 couples

45

Nombres De Fibonacci
z
z
z
z
z
z
z
z
z
z
z
z
z

Janvier : 1 couple
Fvrier : 1 couple
Mars : 1 + 1 = 2 couples
Avril : 2 + 1 = 3 couples
Mai : 3 + 2 = 5 couples
Juin : 5 + 3 = 8 couples
Juillet : 8 + 5 = 13 couples
Aot : 13 + 8 = 21 couples
Septembre : 21 + 13 = 34 couples
Octobre : 34 + 21 = 55 couples
Novembre : 55 + 34 = 89 couples
Dcembre : 89 + 55 = 144 couples
Janvier : 144 + 89 = 233 couples

Le tableau correspond ce qu'on appelle la


suite des nombres de Fibonacci.
46

On note Fn le nombre de couples de lapins au


mois n.
F(n) = nombre de couples au mois (n-1)
+ nombre de couples ns au mois n
= nombre de couples au mois ( n-1)
+ nombre de couples productifs au mois (n-1)
= nombre de couples au mois ( n-1)
+ nombre de couples ns au mois (n-2)
F(n) = F(n-1) + F(n-2)
47

Nombres De Fibonacci
public int fibonacci (int n) {
if (n==0) return 0 ;
else {
if (n==1) return 1 ;
else
return fibonacci(n-1)+fibonacci(n-2);
}
}
48

Analyse de la complexit
zc(n)=c(n-1)+c(n-2)+1
zc(1)=c(0)=1

49

Complexit dune mthode rcursive


...
rsolution dune quation de
rcurrence
zAvec un outil de calcul formel (type maple)
zAvec des thormes de maths

50

Rcurrences linaires
z Dfinition:
Une relation de rcurrence linaire homogne
dordre k , coefficients constants est dfinie par
une quation de la forme

un = a1un 1 + K + ak un k

( R)

Le polynme caractristique associ est

P (r ) = r a1r
k

k 1

K ak 1r ak
51

Solutions dune quation de rcurrence


linaire dordre k
zLensemble des solutions forme un espace
vectoriel de dimension k
zSi r est racine du polynme caractristique
n
alors u n = r
est solution de
lquation.
zCas des racines multiples
52

Mthode du polynme caractristique


zSoit E lquation de rcurrence.
zSoient ri , les q racines du polynme
caractristique de (E), ri ayant multiplicit mi.
zLes solutions de (E) scrivent sous la forme

i=1

P i ( n ) ri

o les Pi(n)sont des polynmes en n de degr


mi-1.
53

Exemple
zDterminer en fonction de u0 et u1, la suite
telle que
zun=un-1-2un-2

54

Rponse

2u1 u0 n
u0
2u1 u0 n u0
) r2
+ i(
) r1 +
i(
un =
2
2
2 7
2 7
1+i 7
r1 =
2

1i 7
r2 =
2

55

Exercice
zUtilisez la mthode du polynme
caractristique pour rsoudre lquation de
rcurrence

= 4u

= 1

n 1

4u

n 2

u1 = 6
56

Exercice
zChaque jour, pour mon goter , je machte
ou
ou
2F
2F
4F
z Soit gn le nombre de choix de goters possibles si lon a n
Francs
{Dterminer g1, g2, g3 et g4
{Dterminer et rsoudre lquation de rcurrence liant les gn

57

zDonnez lensemble des solutions des


quations de rcurrences suivantes :
zun=2un-1 - un-2
zvn=vn-1 + 6vn-2

58

zDterminez la suite un , telle que :


zun = 5un-1 - 8un-2 + 4un-3
zu1 = 3, u2 = 11, u3 = 31

59

Equations non homognes


zSoit R lquation non homogne
n k, un = a1un1 ++ak un k + b(n)
zOn lui associe lquation homogne R
n k, un = a1un1 ++ak un k

zLa diffrence entre deux solutions de R


est une solution de R
60

Espace affine/
Espace vectoriel

zSoit sn une solution particulire de R.


zToute solution de R est obtenue partir
dune solution de R en lui ajoutant sn

61

Une recette de cuisine


zSi lquation est de la forme
il existe une solution particulire l denla forme
n k, un = a1un 1 ++ ak un k + bi Pi (n)
l

b Q (n)
i=1

n
i

i=1

o Qi(n) est un polynme de degr d(Pi)+mi


avec mi=0 si bi nest pas racine du polynme
caractristique, et mi = la multiplicit pour
une racine
62

Exercices

un = 2un 1 + 1,u0 = 0
u n = 2u n 1 + n + 2 ,u1 = 0
n

63

zDonnez lensemble des solutions des


quations de rcurrence suivantes :
zun = 3un-1 - 2un-2 + n
zvn = vn-1 + 6vn-2 + 5n
zwn = wn-1 + 6wn-2 + 3n

64

zRsoudre l'quation de rcurrence


zun = 3un-1 - 2un-2 + n, u0 = 0, u1 = 0

65

zSoit sommeFactoriel, la fonction dfinie


par Evaluer la complexit en nombre de
multiplications des mthodes rcursives
aprs

66

public int sommeFactoriel(int n) {


int factorieln ;
if (n<=1) {
return n+1;
}
else {
factorieln = n * ( sommeFactoriel (n-1)
sommeFactoriel (n-2) ) ;
return sommeFactoriel (n-1) + factorieln ;
}
}
67

public int sommeFactoriel(int n){


int factorieln , somme ;
if (n<=1) {
return n+1;
}
else {
somme = sommeFactoriel (n-1) ;
factorieln= n*(sommesommeFactoriel(n-2)) ;
return somme + factorieln ;
}
}
68

public class DeuxEntiers {


int somme ;
int factoriel;
DeuxEntiers factorieletSommeFactoriel (int n) {
DeuxEntiers resultat ;
if (n==0) {
resultat.somme = 1 ;
resultat.factoriel = 1 ;
return resultat ;
}
else {
resultat = factorieletSommeFactoriel(n-1);
resultat.factoriel = n*resultat.factoriel;
resultat.somme = resultat.somme +
resultat.factoriel ;
return resultat ;
}
}
69
}

public int sommeFactoriel (int n) {


DeuxEntiers resultat ;
resultat=factorieletSommeFactoriel(n) ;
return resultat.somme ;
}

70

Parmi les mthodes rcursives vues en exemple


quelles sont celles dont on peut maintenant
calculer la complexit?

zFactorielle
zTri
zTours de Hanoi
zLes nombres de Fibonnacci
zMais pas la recherche dichotomique
71

Le cas de Fibonacci
zOn obtient une complexit exponentielle
pour la programmation rcursive.
zIl existe des programmations plus
efficaces du calcul du nime nombre de
Fibonacci.

72

Fibonacci V2
public int fibonacci(int n ){
int i =2;
int fiMoins2 = 0 ;
// f(0) = 0
int fiMoins1 = 1 ;
// f(1) = 1
int fi = 1 ;
// f(2) = 1
for (int i =3 ; i < n+1 ; i++) {
// mise jour de fiMoins2 et de fiMoins1
fiMoins2= fiMoins1;
fiMoins1= fi;
// calcul de fi
fi= fiMoins2 + fiMoins1;
// fi est gal au ime terme de la suite
} ;
// fi est le nime terme de la suite pour tout n > 0
if (n==0) return 0 ;
else return fi ;
}

73

Complexit de la V2
zCette fois la complexit est linaire

74

Mthode Rapide
zOn utilise une autre relation dinduction
= F

2 k

2 k +1

2
k

+ F

= (2 F

2
k +1

+ F

k +1

)F

k +1

zOn dcompose n en base 2


p 1

n = dcomposition[i ]2

i =0

zLa suite d0=1, di=2di1+decomposition(p-i),


est telle que dp=n. On calcule les fd
i.

75

Calcul des nombres de Fibonacci V3


public int[] decompose(int n) {
int p =log2 n ;
int auxiliaire = n ;
int[p] decomposition ;
for (int indice = 0 ; indice < p,
indice ++) {
decomposition[indice] = auxiliaire
mod 2 ;
auxiliaire = auxiliaire / 2;
}
return decomposition ;
}

76

Calcul Des Nombres De Fibonacci V3


public
int
int
int
int
for

int fibonacci (int n) {


a =0 ;int b =1 ;
p = log2 n ;
auxiliaire ;
[p] decomposition = decompose (n) ;
(int indice =1 ; indice < = p ;
indice++){
auxiliaire = a ;
a = a*a + b*b;
b = (2*auxiliaire+b)*b;
if (decompose(p-indice)==1 ) {
b = a+b ; a = b-a ;
}
if (n== 1) return 1;
else return a ;

}
}

77

Analyse de la version 3
zCette fois la complexit est en log(n)

78

Et la recherche dichotomique ?
zOn va considrer un cas plus gnral

79

Solutions de type diviser pour rgner


zPour rsoudre un problme de taille n on
divise le problme en a problmes de taille
n/b et chaque sous-problme est rsolu
rcursivement
zLa phase de division et combinaison des
rsultats partiels a une complexit en f(n)

80

L quation de rcurrence des


solutions diviser pour rgner
zT(1) = constante
zT(n) = a T(n/b) + f(n)

81

Thorme
zT(n) peut alors tre born asymptotiquement
comme suit :
zSi f(n)= O(nlogba-e) pour une constante e>0,
alors T(n) = (nlogba).
zSi f(n)= (nlogba) , alors T(n) = O(logn nlogba).
zSi f(n)=(nlogba+e )pour une constante e>0, et
si af(n/b) < cf(n) pour une constante c<1 alors
T(n) = (f(n))
82

Lemme 1
zT(n)=T(bk)=(nlogba)+

zPosons

k 1

j
j
a
f
(
n
/
b
)

j =0

k 1

j
j
a
f
(
n
/
b
)
g(n)=
j =0

83

Lemme 2
zSi f(n)= O(nlogba-e) pour une constante e>0,
alors g(n))= (nlogba).
zSi f(n)= (nlogba) ,
alors g(n) =O(logn nlogba).
zSi af(n/b) < cf(n) pour une constante c<1
alors g(n) = (f(n))

84

Si f(n)= O(nlogba-e) pour une constante


e>0, alors g(n)= (nlogba).
z On a alors

z Or

n
a j
j =0 b

k 1

k 1 j n (logb a )e

g (n) = O a

j
j =0 b

(logb a )e

logb a e k 1
e
=n
b
j =0

( )

logb a e k 1 a j
=n
logb ae
j =0 b

logb a e

n 1
e
b 1
e

85

Exemple dapplication du cas 1


zRecherche dichotomique du maximum
zc(n)=2c(n/2)+1

86

Si f(n)= (nlogba), alors


g(n) =O (logn nlogba).
On obtient cette fois

k 1 j n (logb a )

g (n) = a

j
j =0 b

Or

n
a j
j =0 b

k 1

(logb a )

logb a k 1
j
=n
1 =
j =0

logb a k 1
=n

j =0

logb a

k =n

aj

b (logb a ) j

logb a

logb (n)

87

Exemple de ce cas
zLe tri dichotomique
zc(n)=2c(n/2)+n

88

Si af(n/b) < cf(n) pour une constante c<1


alors g(n) = (f(n))

n
g ( n) a f j
j =0
b
k 1

f (n )
k 1 j
c f (n )
1 c
j =0

89

On se propose de multiplier entre eux des


grands nombres.
a) Si lon utilise la mthode nave, combien
de multiplications lmentaires sont
effectues ?

90

Soient U et V deux nombres de 2n chiffres


en base B.
On peut donc crire
U=U1Bn+U2 et
V=V1Bn+ V2 o
U1,U2 ,V1, V2 sont des nombres n chiffres
en base B.

91

b) On utilise lgalit :
(U1 Bn +U2 )(V1 Bn+ V2 ) =
U1 V1 B2n + (U1V2 + U2 V1) Bn + U2 V2

pour calculer rcursivement la multiplication.


Cest dire que lon ramne le problme
dune multiplication de deux nombres de
2n chiffres celui de 4 multiplications de
deux nombres de n chiffres, 4 dcalages
et trois additions.
92

On suppose quadditions et dcalages


seffectuent en (n). tablir une relation
de rcurrence permettant dvaluer la
complexit de cet algorithme rcursif de
multiplications et la rsoudre.

93

c) On utilise maintenant lgalit


(U1 Bn + U2 )(V1 Bn + V2 ) =
U1 V1 B2n +((U1 - U2 )(V2 - V1 ) + U2 V2 + U1 V1 Bn +
U2 V2
pour calculer rcursivement la multiplication. Cest
dire que lon ramne le problme dune multiplication
de deux nombres de 2n chiffres celui de 3
multiplications de deux nombres de n chiffres, 5
dcalages et 6 additions. On suppose quadditions et
dcalages seffectuent en (n). tablir une relation
de rcurrence permettant dvaluer la complexit de
cet algorithme rcursif de multiplications et la
rsoudre.
94

On se propose dans cet exercice de calculer


la complexit de plusieurs algorithmes
dont le but est de fusionner les p listes
tries de longueur n contenues dans un
tableau de listes en une seule liste trie de
longueur np.

95

On suppose dfinie une classe Liste


contenant entre autre une mthode
permettant de fusionner une liste l1 trie
de longueur n1 et un liste trie l2 de
longueur n2 dont la signature est
public static Liste fusion (Liste l1, Liste l2)
et la complexit est en (n1+n2).

96

Dterminer la complexit de la mthode


suivante en fonction de n et de p.
public static Liste fusionMultiple(Liste[]
mesListes) {
Liste L=mesListes[1];
for (int i=2; i < mesListes.length; i++){
L= Liste.fusion(L,mesListes[i]);
}
return L;
}

97

On suppose maintenant que p est une puissance de 2 et lon


propose maintenant dutiliser lalgorithme de multifusion
rcursif suivant :
Pour multifusionner p listes de taille n
Si p=2 utiliser fusion
Sinon
Multifusionner (rcursivement) les p/2 premire listes
Multifusionner (rcursivement ) les p/2 dernires listes
Utiliser fusion pour fusionner le rsultat des deux
premires tapes.
98

Soit c(n,p) = la complexit de la fusion de p


listes de taille n par cette mthode.
Dterminez la relation de rcurrence suivie
par cette suite, ainsi que c(n,2).

99

z Posez d(n,p)=c(n,p)/n.
z Dterminez la relation de rcurrence suivie par
cette suite.
z Montrez que d(n,p) ne dpend pas de p. On
pourra montrer par induction sur p que pour tout
p >=2, d(n,p)=d(1,p) pour tout n >0.
z Posez d(1,p)=f(p), et dterminez lquation de
rcurrence suivie par f(p). Rsoudre cette
quation. En dduire c(n,p).
100

zOn considre le programme java rcursif


suivant o b est une constante entire
zOn suppose dfini un objet table partir
dune classe Table drive de la classe
Vector en y ajoutant la mthode
table.echanger (int i, int j)
qui change table.elementAt(i) et
table.elementAt(j).
101

public void T(int debut, int fin){


// opre sur la Table table dans la tranche
table[debut..fin]
int n=fin-debut+1 ; // la dimension de la tranche
if (n>1) {
if (n=2) {
// tri par ordre croissant des deux lments de la tranche
if (table.elementAt(debut) >
table.elementAt(fin)){
table.echanger(debut, fin) ;
}
}
else {
T( debut, debut+n/b) ;
T( fin-n/b, fin) ;
T(debut, debut+n/b) ;
}
}
}

102

z tablir la relation de rcurrence vrifie


par la complexit de cet algorithme
z Si b=3/2, (dans ce cas bien sr
lalgorithme utilise la partie entire de
n/b) quelle en est la complexit ?
z Question bonus : dmontrer que si
b=3/2, T est un tri

103