Académique Documents
Professionnel Documents
Culture Documents
CoursAlgorithme Id2329 PDF
CoursAlgorithme Id2329 PDF
Plan
Cours : S. Peyronnet
Comment me contacter?
sylvain.peyronnet@lrde.epita.fr
Structure du cours
Complexit et algorithmique : dfinitions
Principales mthodes de tri
Structures de donnes de bases
Structures de donnes avances
Principaux paradigmes algorithmiques
Support de cours
Introduction to algorithms par Cormen, Leiserson, Rivest et Stein.
Introduction
Notion dalgorithme
Notion dalgorithme
Exemples :
1. Multiplication
Input : deux entiers a et b
Output : leur produit ab
Algorithme : celui de lcole
2. Plus Grand Commun Diviseur (PGCD)
Input : deux entiers a et b
Output : pgcd(a,b)
Algorithme : celui dEuclide
3. Primalit
Input : un entier a
Question : a est-il un entier premier?
Cas spcial : problme de dcision - output = rponse oui/non une question.
Notion dalgorithme
Notion dalgorithme
Fait :
Toutes ces dfinitions sont quivalentes
Thse de Church :
Tout ce qui est calculable intuitivement est aussi
calculable par les objets formels ci-dessus
Mais :
Il existe des problmes non calculables (indcidables)
exemple :
Problme de larrt
Input : Un algorithme (programme) A et un input I
Output : A termine-t-il pour I?
Notion dalgorithme
Notion dalgorithme
10
11
exemples :
Problme
Opration fondamentale
multiplication des
multiplication scalaire
matrices relles
addition des
entiers binaires
opration binaire
12
13
exemples :
Problme
Taille de lentre
nombre dlments
dans la liste
multiplication des
dimension des
matrices relles
matrices
addition des
entiers binaires
Soit A un algorithme
Dn lensemble des entres de taille n
I Dn une entre
dfinition :
1. coutA (I) = le nbre dop. fondamentales excutes par A sur I
2. la complexit de A en pire cas :
M axA (n) = Max{coutA (I); I Dn }
Soit P r une distribution de probabilits sur Dn
dfinition :
la complexit de A en moyenne
:
X
M oyA (n) =
P r[I] coutA (I)
IDn
14
RECHERCHE
Input : L,n,x ; o L est un tableau [1, . . . ,n] et x est llment recherch
Output : lindice de x dans L (0 si x 6 L)
Algorithme : Recherche Squentielle (RS)
var L : array [1, . . . ,n] of element;
x : element;
j : integer;
begin
j:=1;
while jn and L[j]6=x do begin
j:=j+1;
end { while }
if j>n then j:=0;
end
Opration de base : comparaison de x avec un lment de L.
15
16
M oyRS (n) =
n+1
X
17
i=1
n
X
n
q
q X
=
i + (1 q) n =
i + (1 q) n
n
n i=1
i=1
q n(n + 1)
=
+ (1 q) n = (1 2q ) n + 2q
n
2
1
2
n+1
2
3n+1
4
18
19
20
R = reels
R+ = reel positif s
R = R \ {0}
f,g : N+ R (souvent on peut tendre R R )
21
dfinition :
O(f ) = {g : c R+ ,n0 N+ ,n n0 , g(n) c f (n)}
On dit que "g est dans grand O de f .
exemples :
n3
f (n) =
g1 (n) = n2 + 17n + 15 g2 (n) = 5n3
2
g1 O(f ) : on prend n0 = 1 et c = 2(1 + 17 + 15) et
n3
2
alors n + 17n + 15 c 2 si n 1
3
n3
2
f O(g2 )
f
si n
n3
6 O(g1 ) sinon 2 c n2 + 17c n + 5c et donc
est grand on a n2 c + 2 ce qui est impossible.
22
dfinition :
(f ) = {g : c > 0,n0 N+ ,n n0 g(n) c f (n)}
proposition 1 :
g O(f ) f (g)
preuve :
1
g(n) c f (n) f (n) g(n)
c
23
dfinition :
(f ) = O(f ) (f )
proposition 2 :
(f ) = {g : c1 ,c2 ,n0 N+ ,n n0 c1 f (n) g(n) c2 f (n)}
(f ) est appel lordre exact ou ordre de grandeur de f .
proposition 3 :
La relation f R g si f (g) est une relation dquivalence.
24
Exercice
1. Lordre exact de la fonction 3n2 + 10n log n + 100 est:
1. (n log n)
2. (n3 )
3. (n2 )
4. (log n)
2. Soient 0 < a < b deux constantes. On a:
1. (loga n) < (logb n)
2. (loga n) = (logb n)
3. (loga n) > (logb n)
4. (loga n) et (logb n) sont incomparables
25
26
Exercice
Montrer que
(f + g) = (Max{f,g}).
Soit p(n) = ak nk + . . . + a1 n + a0 un polynme de degr k. Montrer que
p(n) (nk ).
Exercice
Supposons que f (n) (g(n)). Est-ce quil est vrai que 2f (n) (2g(n) )?
Dans le cas affirmatif prouvez le, sinon donnez un contre-exemple.
27
dfinition :
On dfinit de la faon suivante lordre partiel sur lordre de
grandeur des fonctions :
(f ) (g) si f O(g)
On a alors:
(f ) = (g) si f (g)
(f ) < (g) si f O(g)etg 6 O(f )
28
29
30
log n
n3
2n
102
6.6 s
0.1 ms
1s
4 106 annes
103
9.9 s
1 ms
16.6 mn
104
13.3 s
10 ms
11.5 jours
105
16.6 s
0.1 s
347 annes
106
19.9 s
1s
106 annes
proposition 4 : (admise)
g
lim = c > 0 alors g (f )
n f
g
lim = 0 alors g O(f ) et f 6 O(g)
n f
((g) < (f ))
g
lim = + alors f O(g) et g 6 O(f )
n f
((f ) < (g))
On va comparer les algorithmes selon lordre de grandeur de
leur complexit.
31
dfinition :
La complexit C(n) dun problme P est la complexit du meilleur
algorithme qui rsoud P .
Si un algorithme A rsoud P en temps f (n)
alors C(n) O(f )
Si lon prouve que tt algorithme qui rsoud P travaille en
temps au moins g(n) alors C(n) (g)
Si f (g) alors C(n) (f ) = (g) et cest la
complexit du problme
32
33
Exercice
1. Supposons que
f (n)
lim
= .
n g(n)
1. On a toujours (f ) < (g)
2. On a toujours (f ) = (g)
3. On a toujours (f ) > (g)
4. (f ) et (g) peuvent tre incomparables
(n)
2. Supposons que (f ) = (g). Est-ce que limn fg(n)
1. existe toujours et =
2. existe toujours et = 0
3. existe toujours et = c, o c est une constante positive
4. nexiste pas toujours.
Exercice
Montrer que est une relation dquivalence.
34
35
Un rapide rappel
Arbres enracins
Rappel
Un arbre est un graphe non-orient acyclique et connexe
Dfinition
Un arbre enracin (rooted tree) est un arbre avec un sommet
distingu.
Le sommet distingu sappelle la racine (root) de larbre.
36
Arbres enracins
Dfinition
Soit T = (V,E) un arbre enracin au sommet r, x un sommet de T .
si {y,x} est une arte de T et y est un anctre de x, alors y est
le pre de x, et x est un fils de y.
la racine de larbre na pas de pre. si x et y ont le mme pre,
alors ils sont frres.
un sommet sans fils est un sommet externe ou feuille (leaf). les
autres sommets sont les sommets internes
le nombre de fils dun sommet x est le degr de x.
37
Arbres enracins
38
Dfinition
La profondeur du sommet x est la longueur de la chaine entre la
racine et le sommet x.
La hauteur (ou profondeur) de larbre est :
Max{prof ondeur(x)}
xV
Arbres binaires
39
Arbres binaires
Dfinition
Soit a un rel non ngatif.
bac est le plus grand entier qui est a.
dae est le plus petit entier qui est a.
exemples
bc = 3
de = 4
b5c = d5e = 5
notation
log dsigne le logarithme en base 2.
40
Arbres binaires
Thorme 1
La profondeur dun arbre binaire n sommets est au moins blog nc
Preuve
a. A la profondeur l, il y a au plus 2l sommets dans larbre.
Parce que : cest vrai la profondeur 0, et si cest vrai la profondeur l 1, la
profondeur l il y a au plus 2 fois autant de sommets, donc au plus 2l .
b. Un arbre binaire de profondeur d a au plus 2d+1 1 sommets.
Parce que: on somme les sommets selon leur profondeur.
Pd
et alors : N ombre de sommets l=0 2l = 2d+1 1
c. Soit d la profondeur de larbre. On suppose que d < blog nc, alors
d blog nc 1. Il vient que n 2blog nc 1 2log n 1 < n ce qui est une
contradiction.
41
42
TRI (sorting)
Tri
43
Tri
44
45
46
Ide :
On recherche le minimum de la liste et on le met en premire
position, et on recommence sur la fin de la liste o lon a ajout
llment qui se trouvait en premire place.
Aprs le k-ime placement, les k plus petits lments de la liste
sont leur place dfinitive.
47
Exemple :
Input : 101 115 30 63 47 20
selection de 20
Placement : 20 115 30 63 47 101
selection de 30
Placement : 20 30 115 63 47 101
selection de 47
Placement : 20 30 47 63 115 101
selection de 63
Placement : 20 30 47 63 115 101
selection de 101
Placement : 20 30 47 63 101 115
output : 20 30 47 63 101 115
48
procedure TRI-SELECTION
Input :
A : array [1..n] of integer
var i, j, k : integer
begin
i :=1
while i<n do begin { i-me placement }
j:=i
for k:=i+1 to n do
if A[k]<A[j] then j:=k
A[j]A[i] { placement du minimum }
end
end
49
Complexit
Nombre de comparaisons en itration i :
(n i + 1) 1 = n i
(n i) =
n1
X
i=1
n(n 1)
i=
= Cn2 (n2 )
2
50
51
Ide :
On fait n itrations.
Aprs litration (i 1) les premiers (i 1) lments de la liste
sont tris.
A litration i on insre dune manire squentielle le i-me
lment parmi les premiers (i 1) lments.
52
Exemple :
Input :
101
Itration 1 :
Itration 2 :
Itration 3 :
Itration 4 :
Itration 5 :
Itration 6 :
output :
20
115
101
101
30
30
30
20
30
30
63
47
20
115 30 63 47 20
115 30 63 47 20
101 115 63 47 20
63 101 115 47 20
47 63 101 115 20
30 47 63 101 115
47
63
101
115
53
procedure TRI-INSERTION
Input :
A : array [1..n] of integer
var i, x, k : integer
begin
for i:=2 to n do begin
k:=i-1 ; x:=A[i]
while A[k]>x do begin
A[k+1]:=A[k] ; k:=k-1 end
A[k+1]:=x
end
end
54
Complexit
Nombre de comparaisons litration i :
au plus i
Nombre total de comparaisons est au plus:
n
X
i=2
n(n + 1)
i=
1 O(n2 )
2
55
56
Exercice 1
Soient (a1 , . . . ,ap ) et (b1 , . . . ,bp ) deux suites dentiers dont les
lments sont tris
par ordre croissant. Soit T = (a1 ,b1 ,a2 ,b2 , . . . ,ap ,bp ).
Dmontrer, par rcurrence sur p, que le tri par insertion de T
ncessite, dans le pire des cas,
seulement
p(p+1)
2
changes.
57
Exercice 2
On considre prsent un tableau T arbitraire
de taille n = 2 p, et lon considre la mthode suivante :
trier sur place, par insertion, le sous-tableau de T dindices
paires,
trier sur place, par insertion, le sous-tableau de T dindices
impaires,
trier, par insertion, le tableau T rsultant.
Quel est, dans le pire des cas, le cot de ce tri? Comparer la valeur
obtenue avec celle
du tri par insertion simple. Est-elle meilleure ou pire?
58
59
Ide :
On partage la liste trier en deux sous-listes telles que tous les
lments de la premire soient plus petits que les lments de la
seconde. Par rcurrence, on trie les deux sous-listes.
Comment partager la liste en deux?
On choisit une des cls de la liste, et on lutilise comme pivot.
La liste dorigine est donc coupe en trois : une premire liste (
gauche) compose des lments au pivot, le pivot ( sa place
dfinitive) et une liste ( droite ) compose des lments > au pivot.
Notre choix : le pivot est le premier lment de la liste.
60
61
procedure TRI-RAPIDE
Input :
A : array [1..n] of integer
i, j : integer
var k : integer
begin
if i<j then begin
PARTITION(A,i,j,k)
TRI-RAPIDE(A,i,k-1)
TRI-RAPIDE(A,k+1,j)
end
end
62
procedure PARTITION
Input : A : array [1..n+1] of integer
i, j, k : integer
var l : integer
begin
l:=i+1; k:=j
while l<=k do begin
while A[l]<=A[i] do l:=l+1
while A[k]>A[i] do k:=k-1
if l<k then do begin
A[l]A[k]; l:=l+1; k:=k-1; end
end
A[i]A[k]
end
63
Complexit
Complexit en pire cas : (n2 )
En effet, le pire cas se produit lorsquune des partitions est vide et
lautre est de taille n 1.
Dans ce cas, on a :
t1 = 1
tn = tn1 + n
Et la solution de cette quation de rcurrence est : n2
64
Complexit
Complexit en meilleur cas : (n log(n))
En effet, le meilleur cas se produit lorsque les deux partitions sont
de mme taille.
Dans ce cas, on a :
t1 = 1
tn = 2tn/2 + n
Et la solution de cette quation de rcurrence est : n log(n) + n
65
Complexit
Complexit en moyenne : O(n log n)
c1 = 0
Pn1
1
cn = n1 i=1 (ci + cni ) + n
Maintenant, on retrousse ses manches :
Pn1
2
cn = n1 i=1 ci + n
Pn1
2
2
cn = n1 cn1 + n1 i=1 ci + n
Pn1
2
2
cn = n1 cn1 + n1 i=1 ci + n
Pn1
2
n2
2
cn = n1 cn1 + n1 ( n2 i=1 ci1 + n 1) + 2
cn =
n
n1
cn1 + 2
66
67
Tri Fusion
68
Le principe
En appliquant la mthode diviser pour rgner au problme du tri
dun tableau, on obtient facilement le tri par fusion.
On appelle ce tri mergesort en anglais.
Le principe est de diviser une table de longueur n en deux tables de
longueur n/2, de trier rcursivement ces deux tables, puis de
fusionner les tables tries.
69
Le principe
Premire phase : Dcoupe :
1. Dcouper le tableau en 2 sous-tableaux gaux ( 1 case prs)
2. Dcouper chaque sous-tableau en 2 sous-tableaux gaux
3. Ainsi de suite, jusqu obtenir des sous-tableaux de taille 1
70
Le principe
Deuxime phase : Tri/fusion :
1. Fusionner les sous-tableaux 2 2 de faon obtenir des
sous-tableaux de taille 2 tris
2. Fusionner les sous-tableaux 2 2 de faon obtenir des
sous-tableaux de taille 4 tris
3. Ainsi de suite, jusqu obtenir le tableau entier
71
Exercice
Donner un code, dans le langage que vous voulez, qui
implmente le Tri Fusion.
Drouler votre code sur la liste dentiers :
3 6 78 32 5 1 10 23 9 11 33
72
Exercice : complexit
Quelle est la complexit du Tri Fusion?
73
Tri Bulle
74
Le principe
On compare les lments deux deux de la gauche vers la droite,
en les changeant pour les classer quand cest ncessaire.
Quand on arrive la fin de la liste, on recommence, jusqu ce
que la liste soit classe.
On dtecte que la liste est classe quand on a fait un passage sans
faire dchanges.
75
Exercice
Ecrire une procdure Tri-Bulle
Drouler lalgorithme sur la liste :
2 4 7 5 3 1
Combien avez vous fait de comparaisons?
Quelle est la complexit du tri bulle?
76
Variantes :
Tri Boustrophedon
Tri Shuttle
77
Ide :
On slectionne les minimums successifs en utilisant une structure
de donne particulire : le tas
Dfinition
Un arbre parfait est un arbre binaire dont les feuilles sont situes sur
deux niveaux successifs : lavant dernier niveau est complet, et les
feuilles du dernier niveau sont regroupes le plus gauche possible.
Exemple
78
79
Dfinition
Un arbre parfait partiellement ordonn est un arbre parfait dont les
sommets sont tiquets par des lments trier, et tel que llment
associ chaque sommet est aux lments associs aux fils de ce
sommet.
Exemple
3
12
18
14
11
10
80
Dfinition
Un tas (heap) est un tableau t reprsentant un arbre parfait
partiellement ordonne selon les rgles suivantes :
t[1] est la racine
t[2i] et t[2i + 1] sont les fils gauche et droite de t[i]
existent)
(sils
Exemple
11 10
12
18 14
81
Construction du tas
CONSTRUCTION DU TAS
Lessentiel est une procdure AJOUT qui ajoute un lment
nouveau un tas.
On ajoute cet lment comme une feuille (au dernier niveau), puis
on lchange avec son pre tant quil est infrieur celui-ci.
82
Construction du tas
procedure AJOUT
Input : t : array [1..n] of integer ; p, x : integer {la procdure ajoute llment x
dans le tas t qui contient p lments}
var i : integer
begin
if p<n then begin {on place x la dernire feuille}
p:=p+1 ; t[p]:=x ; i:=p ;
{on change tant que x est < que son pre}
while i>1 and t[i] < t[bi/2c] do begin
t[i] t[bi/2c] ; i := bi/2c
end
end
else writeln(dbordement du tas)
end
83
Construction du tas
84
Exemple
3
5
6
12
9
8
18
14
11
10
Rsultat final
3
4
6
12
9
11
5
18
14
10
Construction du tas
85
86
87
Exemple
12
18
11
10
14
Rsultat final
5
12
14
18
11
10
{retour du minimum}
{rorganisation du tas}
88
89
90
Lalgorithme TRI-TAS
On ajoute successivement chacun des n lments dans le tas
t[1 . . . p], p augmente de 1 aprs chaque adjonction. A la fin on a un
tas de taille n.
Tant que p > 1, on supprime le minimum du tas, on dcroit p de
1, et on range le minimum la (p + 1)eme place. Puis on
rorganise le tas. t[p + 1 . . . n] contient les n p plus petits
lments en ordre dcroissant.
p+1
np plus petit elements
91
92
Exemple
15 12 11 7 13 9
15
12
12 15 11 7 13 9
15
93
Exemple (suite)
11
11 12 15 7 13 9
12
15
7
7 11 12 15 13 9
11
15
12
94
Exemple (suite)
7
7 11 12 15 13 9
12
11
15
13
7
7 11 9 15 13 12
11
15
13
12
95
Exemple (suite)
9
9 11 12 15 13 7
12
11
15
13
11
11 13 12 15 9 7
13
15
12
96
Exemple (suite)
12
12 13 15 11 9 7
15
13
13
13 15 12 11 9 7
15
97
Exemple (fin)
RESULTAT FINAL :
15
15 13 12 11 9 7
98
n1
X
log i
i=2
DESTRUCTION :
n1
X
2 log i
i=2
W (n) = 3
n1
X
i=2
Z
log i 3
Z
log xdx = 3(log2 e)
ln xdx
2
99
100
Exemple
15
15
12
11
13
12
14
13
12
13
14
15
12
11
11
14
15
13
11
14
101
procedure CONSTRUCTION
Input : t : array [1..n] of integer
{construit le tas dans le tableau t}
var j : integer
begin
for j:=n downto 1 do
ORGANISATION(t,j)
end
Thorme
CONSTRUCTION construit le tas avec 2n-2 comparaisons
102
103
Exercice
Trier le tableau suivant en utilisant lalgorithme TRI-RAPIDE:
1 21 5 34 32 67 6 0 200 25 65 4 24 33.
Quel est le nombre de comparaisons utilises?
104
Exercice
Quelle est la valeur retourne par la procdure PARTITION quand tous les
lments dans le tableau A[i..j] ont la mme valeur?
105
Exercice
On se donne un tableau de n lments qui ont chacun une couleur soit rouge, soit
blanc. On veut obtenir un tableau avec deux zones: gauche tous les lments
rouges, droite tous les lments blancs.
Ecrivez une procdure qui ralise cette organisation du tableau en ne testant
quune seule fois la couleur de chaque lment. Essayez de minimiser le nombre
moyen des changes dlments. Calculez ce nombre.
106
107
procedure BINARYSEARCH
Input :
L : array [1..n] of elements
X : element
first, last : 1..n
index : 0..n
{ procdure rcursive pour chercher X dans L, first et last sont les
indices respectivement du premier et du dernier llement de la
section du tableau actuellement recherche }
108
var m : 1..n
begin if first <= last then
begin m := b first + last c
2
109
110
111
Dfinition
Larbre de dcision (comparaison) pour un algorithme A de
comparaison qui recherche un lment dans une liste trie n
lments est larbre binaire TA dont les sommets internes sont
tiquets par les entiers entre 1 et n selon les rgles suivantes :
1. La racine de TA est tiquete par lindice du premier lment
avec lequel A compare X
2. Supposons que ltiquette dun sommet soit i. Ltiquette du
fils gauche de ce sommet est lindice de llment avec lequel A
compare X si X < L[i].
Analogue pour le fils droite....
112
113
Exemple :
114
Thorme
Chaque algorithme de comparaison A pour rechercher un lment
X dans une liste trie n lments fait au moins blog nc + 1
comparaisons en pire cas.
Preuve
Soit TA larbre de dcision pour A. Sur chaque entre, A parcourt
de faon naturelle une branche de TA . Le nombre de comparaisons
effectues par A est la longueur de la branche. La complexit en
pire cas de A est donc la longueur de la branche la plus longue,
cest dire la profondeur de TA .
115
Preuve (suite) :
Montrons par labsurde que le nbre de sommets internes de TA est
n. Sinon, i,1 i n tel quaucun sommet interne nest
tiquet par i. Soient deux listes L et L0 tq
j 6= i, L[j] = L0 [j] 6= X et L[i] = X, L0 [i] 6= X.
A ne peut pas distinguer ces deux listes (voir TA tendu), donc il
donne un rsultat incorrect.
Par consquent, la profondeur de TA est au moins blog nc + 1.
116
117
118
Thorme :
FINDMAX est un algorithme optimal.
Preuve :
On montre que chaque algorithme de comparaison A fait en pire
cas au moins n 1 comparaisons pour trouver le maximum de n
lments.
Parmi les n lments, n 1 ne sont pas le maximum (en pire cas).
Pour chacun de ces lments A doit faire une comparaison dans
laquelle llment est plus petit que celui auquel il est compar.
Par consquent, A fait au moins n 1 comparaisons.
119
120
121
122
123
exemple :
124
125
126
127
On peut reprsenter tous les tris que nous avons rencontrs par des
arbres de dcision. Chaque noeud interne pose une question sur la
comparaison entre 2 lments. Le fils de gauche correspond la
rponse ngative, le fils droit laffirmatif. Les feuilles reprsentent
la permutation effectuer pour obtenir le tableau tri.
Thorme :
Pour trier n lments laide dun algorithme de tri bas sur les
comparaisons, il faut (n log n) comparaisons.
128
Preuve :
Tout arbre de dcision pour trier n lments a n! feuilles
reprsentant toutes les permutations possibles. Un arbre binaire n!
feuilles a une hauteur de lordre de log(n!).
Il reste alors prouver que log(n!) ' n log n. Cest vrai en vertu de
n n
la formule de stirling : n! ' 2n ( )
e