Vous êtes sur la page 1sur 129

ALGORITHMIQUE, cours 1

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

Selon le Petit Robert : "ensemble des rgles opratoires propres


un calcul.
Un peu plus prcisement : Une squence de pas de calcul qui
prend un ensemble de valeurs comme entre (input) et produit un
ensemble de valeurs comme sortie (output).
Un algorithme rsout toujours un problme de calcul. Lnonc
du problme spcifie la relation input / output souhaite.

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

Donner une dfinition prcise de la notion dalgorithme est assez


difficile et complexe.
Il existe plusieurs dfinitions mathmatiques depuis les annes 30.
exemples :
fonctions rcursives
-calcul
machines de Turing
RAM
(Random Access Machine : machine accs
alatoire)

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

preuve de lindecidabilit (par labsurde)


Supposons que le problme de larrt soit dcidable.
Cela signifie alors quil existe un programme B qui dcide si un programme
sarrte. Dfinissons maintenant le programme C suivant:
C sarrte quand le programme quil prend en entre ne sarrte pas.
C ne sarrte pas quand le programme quil prend en entre sarrte.
Bien sr, un tel programme ne peut pas exister car si on lutilise sur lui mme, on
obtient une contradiction. Et donc le problme de larrt est indcidable.

Notion dalgorithme

Dans ce cours, on tudie seulement des problmes pour lesquels il


existe des algorithmes.
En fait, on sintressera aux problmes pour lesquels il existe des
algorithmes efficaces.
Un exemple typique de problme dcidable pour lequel il ny a pas
dalgorithme efficace : le jeu dchec (nombre de configurations est
environ 1050 )

Complexit des algorithmes

On veut une mesure pour comparer des algorithmes


On voudrait que la complexit :
ne dpende pas de lordinateur
ne dpende pas du langage de programmation
ne dpende pas du programmeur
... etc ...
soit indpendante des dtails
de limplmentation

Complexit des algorithmes

On choisit de travailler sur un modle dordinateur :


RAM :
ordinateur idalis
mmoire infinie
accs la mmoire en temps constant
Le langage de programmation sera un pseudo-PASCAL.
Pour mesurer la complexit en temps on choisit une opration
fondamentale pour le problme de calcul particulier, et on calcule
le nombre doprations fondamentales excutes par lalgorithme.
Le choix est bon si le nbre total doprations est proportionnel au
nbre doprations fondamentales.

10

Complexit des algorithmes

11

exemples :

Problme

Opration fondamentale

recherche dun lment

comparaison entre llment

dans une liste

et les entres de la liste

multiplication des

multiplication scalaire

matrices relles
addition des
entiers binaires

opration binaire

Complexit des algorithmes

Le temps de lexcution dpend de la taille de lentre. On veut


considrer seulement la taille essentielle de lentre.
Cela peut tre par exemple :
le nombre dlments combinatoires dans lentre
le nombre de bits pour reprsenter lentre
... etc ...

12

Complexit des algorithmes

13

exemples :

Problme

Taille de lentre

recherche dun lment

nombre dlments

dans une liste

dans la liste

multiplication des

dimension des

matrices relles

matrices

addition des

nbre de bits pour

entiers binaires

reprsenter les entiers

Complexit en pire cas et moyenne

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

Exemple : Recherche Squentielle

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

Exemple : Recherche Squentielle

complexit en pire cas de RS :


M axRS (n) = n
complexit en moyenne de RS :
On suppose que :
tous les lments sont distincts
P r[x L] = q
si x L alors toutes les places sont quiprobables
Pour 1 i n soit
Ii = {(L,x) : L[i] = x} et In+1 = {(L,x) : x 6 L}
On a :
P r[Ii ] = nq pour 1 i n et coutRS (Ii ) = i
P r[In+1 ] = 1 q et coutRS (In+1 ) = n

16

Exemple : Recherche Squentielle

M oyRS (n) =

n+1
X

17

P r[Ii ] coutRS (Ii )

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

Si q = 1 alors M oyRS (n) =


Si q =

1
2

alors M oyRS (n) =

n+1
2
3n+1
4

18

Exercice Ecrire un algorithme pour trouver la mdiane de trois entiers. (Par


dfinition, la mdiane de 2k 1 lments est le k eme plus grand).
Combien de comparaisons fait votre algorithme en pire cas?
En moyenne?
Quel est la complexit de ce problme?

19

Exercice On veut dterminer si une suite binaire de longueur n contient deux


0s conscutifs. Lopration de base est dexaminer une position dans la suite
pour voir si elle contient un 0 ou un 1. Quelle est la complexit en pire cas du
meilleur algorithme pour ce problme quand n = 2,3,4,5?

Ordre de grandeur des fonctions

20

On voudrait comparer la complexit de deux algorithmes


Les constantes ont peu dimportance, on peut les ngliger.
Elles ne dpendent que des particularits de limplmentation.
On ne sintresse pas aux entres de petite taille. On va
comparer les deux complexits asymptotiquement.
Notation :
N = {0,1,2, . . .}
N+ = {1,2,3, . . .}

R = reels
R+ = reel positif s

R = R \ {0}
f,g : N+ R (souvent on peut tendre R R )

Ordre de grandeur des fonctions

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

g2 O(f ) : on choisit c = 10 et alors 5n 10

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.

Ordre de grandeur des fonctions

Attention : les fonctions peuvent tre incomparables au sens du


O
Exercice Donner un exemple de deux fonctions f et g telles que
f 6 O(g) et g 6 O(f ).

22

Ordre de grandeur des fonctions

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

Ordre de grandeur des fonctions

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

Ordre de grandeur des fonctions

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

Ordre de grandeur des fonctions

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 ).

Ordre de grandeur des fonctions

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

Ordre de grandeur des fonctions

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

Ordre de grandeur des fonctions


Enumerer en ordre croissant lordre exact des fonctions suivantes:

n, 2n , n log n, ln n, n + 7n5 , log n,


n, en , 2n1 , n2 , n2 +
log n, log log n, n3 , (log n)2 , n!, n3/2 .
(log et ln dnotent respectivement la fonction de logarithme en base de 2 et en
base de e.)

29

Ordre de grandeur des fonctions

30

106 oprations par seconde.

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

Ordre de grandeur des fonctions

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

Ordre de grandeur des fonctions

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

Ordre de grandeur des fonctions

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.

Ordre de grandeur des fonctions

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

Les arbres binaires sont dfinis rcursivement.


Dfinition
un arbre binaire est une structure sur un ensemble fini de sommets.
Il est :
soit vide (ne contient pas de sommet)
soit lunion de 3 ensemble disjoints de sommets :
un sommet appel racine
un arbre binaire : le sous-arbre gauche
un arbre binaire : le sous-arbre droit
La racine dun sous-arbre gauche non vide est appel le fils gauche
de la racine de larbre.

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

Input : Une liste de n entiers (a1 ,a2 , . . . ,an )


Output : Une permutation (a01 ,a02 , . . . ,a0n ) de la liste dentre telle
que a01 a02 . . . a0n ou a01 a02 . . . a0n .
Souvent les entiers sont une partie dune donne plus complexe,
lentier est alors la cl de la donne. Et on triera les donnes daprs
les cls.
La structure de donne est une liste A n lments avec A[i] = ai
au dbut et A[i] = a0i la fin.
Lopration de base pour les algorithmes de tri est la comparaison :
A[i] : A[j], cest la seule opration permise sur les cls.

Tri

44

Une autre opration est lchange : on peut changer A[i] et A[j], ce


que lon note par A[i] A[j].
Le rsultat est alors le suivant :
k := A[i]
A[i] := A[j]
A[j] = k
Un algorithme de tri est stable sil prserve lordre de dpart des
lments avec la mme cl.
Un algorithme de tri se fait sur place sil utilise seulement un
nombre constant de variables auxiliaires.

45

Tri par selection

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

Nombre total de comparaisons :


n1
X
i=1

(n i) =

n1
X
i=1

n(n 1)
i=
= Cn2 (n2 )
2

50

Tri par insertion (squentielle)

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

On considre la mthode suivante,


ralisant le tri par insertion dun tableau T N lments,
numrots de 1 N :
pour chaque i [ 2, . . . ,N ],
j := i 1.
tant que (j > 0) et T [j] > T [j + 1],
changer les contenus de T [j] et T [j + 1].
j := j 1.
Rappelons que dans le pire des cas, le nombre dchanges
ncessaires est gal 1 + 2 + . . . (N 1) = N (N21) .

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

Tri rapide (quicksort)

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

Supposons quon a une procdure PARTITION(A,i,j,k) qui effectue


la partition de la sous-liste de A entre les indices i et j, en fonction
du pivot A[i], et rend comme rsultat lindice k, o ce pivot a t
plac.
Avec cette procdure, on peut crire une procdure TRI-RAPIDE.

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

et maintenant les choses se corsent...

66

On divise droite et gauche par n :


cn /n = cn1 /(n 1) + 2/n
Puis on pose Yn = cn /n, on a alors :
Yn = Yn1 + 2/n, ce qui correspond lexpression dune srie
harmonique et qui donne :
Pn
cn = 2 n i=1 (1/i)
Par la formule deuler, on trouve alors
cn ' 1,386 n log(n) + 1,154 n
cest dire une fonction en n log(n).

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

TRI PAR TAS (HEAPSORT)

Tri par tas

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

Tri par tas

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

Tri par tas

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

Tri par tas

Proprits simples dun tas


t[bi/2c] est le pre de t[i] (i 2)
Si le nombre de sommets n est pair, alors t[n/2] a un seul fils
t[n]
Si i > bn/2c, alors t[i] est une feuille
Ide du tri par tas
I. On construit le tas
II. On enlve successivement le minimum du tas et on reconstruit
la structure de tas sur le reste des lments

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

Complexit en pire cas


La procdure AJOUT fait au plus blogpc comparaisons.
Pourquoi?
Parce que la hauteur dun arbre parfait p sommets est blog pc.

85

Suppression du minimum et rorganisation du tas

SUPPRESSION DU MINIMUM ET REORGANISATION DU


TAS
La procdure DESTRUCTION remplace la racine du tas par la
dernire feuille.
Pour rorganiser le tas, on change cet lment avec le plus petit de
ses deux fils tant quil est suprieur celui-ci.

86

Suppression du minimum et rorganisation du tas

87

Exemple

12

18

11

10

14

Rsultat final
5

12

14

18

11

10

Suppression du minimum et rorganisation du tas


procedure DESTRUCTION
Input :
t : array [1..n] of integer
p, min : integer
{DESTRUCTION retourne dans min le minimum des p lments du tas et
rorganise le tas}
var i, j : integer
begin
min:=t[1]

{retour du minimum}

t[1] := t[p] ; p:=p-1


i:=1

{nouvelle taille du tas}

{rorganisation du tas}

88

Suppression du minimum et rorganisation du tas


while i bp/2c do begin
{calcul de lindice du plus petit des deux fils de t[i], ou de son seul fils}
if 2i=n or t[2i] < t[2i + 1] then j:=2i else j:=2i+1
{change entre deux lments qui sont pre et fils}
if t[i] > t[j] then begin t[i] t[j] ; i:=j end
else exit
end
end

Complexit de DESTRUCTION en pire cas :


2blog pc

89

Algorithme de tri par tas

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

Algorithme de tri par tas


procedure TRI-TAS
Input : t : array [1..n] of integer
var p, min : integer
begin
p:=0
while p < n do {construction du tas}
AJOUT(t,p,t[p+1]);
{p augmente de 1 chaque appel}
while p > 1 do begin
DESTRUCTION(t,p,min)
{p diminue de 1 chaque appel}
t[p+1]:=min
end
end

91

Algorithme de tri par tas

92

Exemple
15 12 11 7 13 9

15

12
12 15 11 7 13 9
15

Algorithme de tri par tas

93

Exemple (suite)
11
11 12 15 7 13 9
12

15

7
7 11 12 15 13 9
11

15

12

Algorithme de tri par tas

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

Algorithme de tri par tas

95

Exemple (suite)
9
9 11 12 15 13 7
12

11

15

13

11
11 13 12 15 9 7
13

15

12

Algorithme de tri par tas

96

Exemple (suite)

12
12 13 15 11 9 7
15

13

13
13 15 12 11 9 7
15

Algorithme de tri par tas

97

Exemple (fin)
RESULTAT FINAL :

15
15 13 12 11 9 7

Algorithme de tri par tas

98

Complexit de TRI-TAS en pire cas


AJOUT :

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

= 3(log2 e)[x ln x x]n2 = 3(log2 e)(n ln n n 2 ln 2 + 2)


= 3(n log n n log2 e 2 + 2 log e) 3n log n = O(n log n)

Construction du tas en O(n)

Construction du tas en O(n)


Ide
On utilise la partie de la procdure DESTRUCTION qui rorganise
le tas. On lance cette sous-procdure successivement partir de
chaque sommet du tas, partant du niveau le plus bas jusqu la
racine.

99

Construction du tas en O(n)

100

Exemple
15

15

12

11

13

12

14

13

12

13

14

15

12

11

11

14

15

13

11

14

Construction du tas en O(n)


procedure ORGANISATION
Input : t : array [1..n] of integer ; i : integer
{ construit un tas dont la racine est le sommet t[i] ; on suppose que les sous
arbres de t[i] sont dja un tas }
var j : integer
begin
while i bn/2c do begin {t[i] nest pas une feuille}
if 2i=n or t[2i]<t[2i+1] then j:=2i else j:=2i+1
if t[i]>t[j] then begin t[i]t[j] ; i:=j end
else exit
end
end

101

Construction du tas en O(n)

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

Recherche dans une liste trie

Recherche dans une liste trie

Input : L,n 0,X o L est une liste tries n lments et X est


llment recherch.
Output : lindex de llment X dans L si X L, 0 dans le cas
contraire.
Algorithme : BINARY SEARCH (recherche binaire ou
dichotomique)
Ide :

107

Recherche dans une liste trie

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

Recherche dans une liste trie

var m : 1..n
begin if first <= last then
begin m := b first + last c
2

{ indice de llment au milieu de la section }


if X=L[m] then index:=m
else if X < L[m] then
BINARYSEARCH(L,X,first,m-1,index)
else BINARYSEARCH(L,X,m+1,last,index)
end
else index := 0 end
Appel principal : BINARYSEARCH(L,X,1,n,index)

109

Recherche dans une liste trie

110

Complexit en pire cas de BINARY SEARCH


Soit T (n) = W orstBIN ARY SEARCH (n)
Alors : T (1) = 1 et T (n) = T (bn/2c) + 1
Thorme
La solution de cette quation de rcurrence est :
T (n) = blog nc + 1
Preuve
Admise (thorme fondamental du principe de rcurrence du cours
sur les paradigmes)
On voudrait maintenant montrer que BINARYSEARCH est un
algorithme optimal pour ce problme

Recherche dans une liste trie

Un algorithme de comparaison ne peut faire dautres oprations que


de comparer X avec les lments de la liste.
On va se concentrer sur le cas o X nest pas dans la liste. Une
preuve dans ce cas l est un nonc de la forme :
L[i] < X < L[i + 1] pour i = 1,...,n 1
X < L[1]
L[n] < X
Un algorithme de comparaison peut seulement sarrter au cas o
X nest pas dans la liste sil possde une preuve.

111

Recherche dans une liste trie

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

Recherche dans une liste trie

Les feuilles de TA sont tiquetes par les preuves pour le cas o X


nest pas dans L.
TA peut tre tendu en rajoutant une feuille chaque sommet
interne tiquet par i :
cette feuille correspond au rsultat X = L[i]

113

Recherche dans une liste trie

Exemple :

114

Recherche dans une liste trie

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

Recherche dans une liste trie

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

Recherche du plus grand lment


(maximum) dans une liste.

Recherche du plus grand lment

Input : L,n 0 o L est une liste de n entiers.


Output : max, le plus grand lment de L.
procedure FINDMAX
L : array [1..n] of integer
var max : integer
var i : integer
begin
max := L[i];
for i:=2 to n do
if max < L[i] then max:=L[i]
end
Complexit : W orstF IN DM AX (n) = AvF IN DM AX (n) = n 1.

118

Recherche du plus grand lment

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

Recherche du plus deuxime plus grand


lment dans une liste.

Recherche du plus deuxime plus grand lment

Input : L,n 0 o L est une liste de n entiers distincts.


Output : second, le deuxime plus grand lment de L.
Terminologie :
x, y
joueurs (de tennis)
x : y x joue avec y
x > y x gagne, y perd
Proposition : chaque algorithme qui trouve second trouve aussi max
Preuve : Lalgo. pour second doit avoir une preuve que second est
deuxime et pas premier. Cela ne peut se faire quen faisant une
comparaison o second perd. Cette comparaison se fait alors avec
max.

121

Recherche du plus deuxime plus grand lment

On va donner deux mthodes (algorithmes) pour trouver second.


Mthode nave
On cherche max dans L en effectuant n 1 comparaisons.
On cherche le plus grand lment dans le reste en faisant n 2
comparaisons.
Au total, lalgorithme naf a effectu 2n 3 comparaisons.

122

Recherche du plus deuxime plus grand lment

Mthode du tournoi (tournament method)


On organise un tournoi de tennis. On fait jouer les participants 2 2
en manches (tours). Sil y a un nombre impair de joueurs, un joueur
progresse au tour suivant sans jeu. Le vainqueur du tournoi est max.
On peut reprsenter un tournoi par un arbre binaire dont les feuilles
sont les joueurs.

123

Recherche du plus deuxime plus grand lment

exemple :

124

Recherche du plus deuxime plus grand lment

Proposition : Dans un tournoi avec n joueurs, il y a dlog ne manches


Preuve : Evidente (profondeur de larbre/nombres de sommets)
Rq : second a du perdre dans un jeu contre max !
Pour trouver second, il suffit de trouver le plus grand des lments
battus par max sachant que le nbre de joueurs ayant jou contre
max est dlog ne.
Complexit :
Le tournoi se fait en n 1 comparaisons
Le plus grand de dlog ne lments se fait en dlog ne 1
comparaisons
Ce qui fait un total de n + dlog ne 2 comparaisons.

125

126

Borne infrieure sur le tri

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

Vous aimerez peut-être aussi