SlideShare una empresa de Scribd logo
1 de 129
Descargar para leer sin conexión
ALGORITHMIQUE, cours 1
Plan 1
Cours : S. Peyronnet
Comment me contacter?
sylvain.peyronnet@lrde.epita.fr
Structure du cours
• Complexité et algorithmique : définitions
• Principales méthodes de tri
• Structures de données de bases
• Structures de données avancées
• Principaux paradigmes algorithmiques
Support de cours
Introduction to algorithms par Cormen, Leiserson, Rivest et Stein.
2
Introduction
Notion d’algorithme 3
• Selon le Petit Robert : "ensemble des règles opératoires propres à
un calcul.”
• Un peu plus précisement : Une séquence de pas de calcul qui
prend un ensemble de valeurs comme entrée (input) et produit un
ensemble de valeurs comme sortie (output).
• Un algorithme résout toujours un problème de calcul. L’énoncé
du problème spécifie la relation input / output souhaitée.
Notion d’algorithme 4
Exemples :
1. Multiplication
Input : deux entiers a et b
Output : leur produit ab
Algorithme : celui de l’école
2. Plus Grand Commun Diviseur (PGCD)
Input : deux entiers a et b
Output : pgcd(a,b)
Algorithme : celui d’Euclide
3. Primalité
Input : un entier a
Question : a est-il un entier premier?
Cas spécial : problème de décision - output = réponse oui/non à une question.
Notion d’algorithme 5
Donner une définition précise de la notion d’algorithme est assez
difficile et complexe.
Il existe plusieurs définitions mathématiques depuis les années 30.
exemples :
• fonctions récursives
• λ-calcul
• machines de Turing
• RAM
(Random Access Machine : machine à accès
aléatoire)
Notion d’algorithme 6
Fait :
Toutes ces définitions sont équivalentes
Thèse de Church :
Tout ce qui est calculable intuitivement est aussi
calculable par les objets formels ci-dessus
Mais :
Il existe des problèmes non calculables (indécidables)
exemple :
Problème de l’arrêt
Input : Un algorithme (programme) A et un input I
Output : A termine-t-il pour I?
Notion d’algorithme 7
preuve de l’indecidabilité (par l’absurde)
Supposons que le problème de l’arrêt soit décidable.
Cela signifie alors qu’il existe un programme B qui décide si un programme
s’arrête. Définissons maintenant le programme C suivant:
– C s’arrête quand le programme qu’il prend en entrée ne s’arrête pas.
– C ne s’arrête pas quand le programme qu’il prend en entrée s’arrête.
Bien sûr, un tel programme ne peut pas exister car si on l’utilise sur lui même, on
obtient une contradiction. Et donc le problême de l’arrêt est indécidable.
Notion d’algorithme 8
Dans ce cours, on étudie seulement des problèmes pour lesquels il
existe des algorithmes.
En fait, on s’intéressera aux problèmes pour lesquels il existe des
algorithmes efficaces.
Un exemple typique de problème décidable pour lequel il n’y a pas
d’algorithme efficace : le jeu d’échec (nombre de configurations est
environ 1050
)
Complexité des algorithmes 9
On veut une mesure pour comparer des algorithmes
On voudrait que la complexité :
• ne dépende pas de l’ordinateur
• ne dépende pas du langage de programmation
• ne dépende pas du programmeur
• ... etc ...
• soit indépendante des détails
de l’implémentation
Complexité des algorithmes 10
On choisit de travailler sur un modèle d’ordinateur :
RAM :
• ordinateur idéalisé
• mémoire infinie
• accès à la mémoire en temps constant
Le langage de programmation sera un pseudo-PASCAL.
Pour mesurer la complexité en temps on choisit une opération
fondamentale pour le problème de calcul particulier, et on calcule
le nombre d’opérations fondamentales exécutées par l’algorithme.
Le choix est bon si le nbre total d’opérations est proportionnel au
nbre d’opérations fondamentales.
Complexité des algorithmes 11
exemples :
Problème Opération fondamentale
recherche d’un élément comparaison entre l’élément
dans une liste et les entrées de la liste
multiplication des multiplication scalaire
matrices réelles
addition des opération binaire
entiers binaires
Complexité des algorithmes 12
Le temps de l’exécution dépend de la taille de l’entrée. On veut
considérer seulement la taille essentielle de l’entrée.
Cela peut être par exemple :
• le nombre d’éléments combinatoires dans l’entrée
• le nombre de bits pour représenter l’entrée
• ... etc ...
Complexité des algorithmes 13
exemples :
Problème Taille de l’entrée
recherche d’un élément nombre d’éléments
dans une liste dans la liste
multiplication des dimension des
matrices réelles matrices
addition des nbre de bits pour
entiers binaires représenter les entiers
Complexité en pire cas et moyenne 14
Soit A un algorithme
Dn l’ensemble des entrées de taille n
I ∈ Dn une entrée
définition :
1. coutA(I) = le nbre d’op. fondamentales exécutées par A sur I
2. la complexité de A en pire cas :
MaxA(n) = Max{coutA(I); I ∈ Dn}
Soit Pr une distribution de probabilités sur Dn
définition :
la complexité de A en moyenne :
MoyA(n) =
I∈Dn
Pr[I] · coutA(I)
Exemple : Recherche Séquentielle 15
RECHERCHE
Input : L,n,x ; où L est un tableau [1, . . . ,n] et x est l’élément recherché
Output : l’indice de x dans L (0 si x ∈ L)
Algorithme : Recherche Séquentielle (RS)
var L : array [1, . . . ,n] of element;
x : element;
j : integer;
begin
j:=1;
while j≤n and L[j]=x do begin
j:=j+1;
end { while }
if j>n then j:=0;
end
Opération de base : comparaison de x avec un élément de L.
Exemple : Recherche Séquentielle 16
complexité en pire cas de RS :
MaxRS(n) = n
complexité en moyenne de RS :
On suppose que :
• tous les éléments sont distincts
• Pr[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 ∈ L}
On a :
Pr[Ii] = q
n
pour 1 ≤ i ≤ n et coutRS(Ii) = i
Pr[In+1] = 1 − q et coutRS(In+1) = n
Exemple : Recherche Séquentielle 17
MoyRS(n) =
n+1
i=1
Pr[Ii] · coutRS(Ii)
=
n
i=1
q
n
· i + (1 − q) · n =
q
n
n
i=1
i + (1 − q) · n
=
q
n
·
n(n + 1)
2
+ (1 − q) · n = (1 − q
2
) · n + q
2
Si q = 1 alors MoyRS(n) = n+1
2
Si q = 1
2
alors MoyRS(n) = 3n+1
4
18
Exercice Ecrire un algorithme pour trouver la médiane de trois entiers. (Par
définition, la médiane de 2k − 1 éléments est le keme
plus grand).
– Combien de comparaisons fait votre algorithme en pire cas?
– En moyenne?
– Quel est la complexité de ce problème?
19
Exercice On veut déterminer si une suite binaire de longueur n contient deux
0’s consécutifs. L’opération de base est d’examiner 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 problème quand n = 2,3,4,5?
Ordre de grandeur des fonctions 20
On voudrait comparer la complexité de deux algorithmes
• Les constantes ont peu d’importance, on peut les négliger.
Elles ne dépendent que des particularités de l’implémentation.
• On ne s’intéresse pas aux entrées de petite taille. On va
comparer les deux complexités asymptotiquement.
Notation :
N = {0,1,2, . . .} R = reels
N+
= {1,2,3, . . .} R+
= reel positifs
R∗
= R  {0}
f,g : N+
→ R∗
(souvent on peut étendre à R∗
→ R∗
)
Ordre de grandeur des fonctions 21
définition :
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 :
f(n) =
n3
2
g1(n) = n2
+ 17n + 15 g2(n) = 5n3
• g1 ∈ O(f) : on prend n0 = 1 et c = 2(1 + 17 + 15) et
alors n2
+ 17n + 15 ≤ c · n3
2
si n ≥ 1
• g2 ∈ O(f) : on choisit c = 10 et alors 5n3
≤ 10 · n3
2
• f ∈ O(g2)
• f ∈ O(g1) sinon n3
2
≤ c · n2
+ 17c · n + 5c et donc
si n est grand on a n
2
≤ c + 2 ce qui est impossible.
Ordre de grandeur des fonctions 22
Attention : les fonctions peuvent être incomparables au sens du
O
Exercice Donner un exemple de deux fonctions f et g telles que
f ∈ O(g) et g ∈ O(f).
Ordre de grandeur des fonctions 23
définition :
Ω(f) = {g : ∃c > 0,∃n0 ∈ N+
,∀n ≥ n0 g(n) ≥ c · f(n)}
proposition 1 :
g ∈ O(f) ⇔ f ∈ Ω(g)
preuve :
g(n) ≤ c · f(n) ⇔ f(n) ≥
1
c
· g(n)
Ordre de grandeur des fonctions 24
définition :
Θ(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é l’ordre exact ou ordre de grandeur de f.
proposition 3 :
La relation f R g si f ∈ Θ(g) est une relation d’équivalence.
Ordre de grandeur des fonctions 25
Exercice
1. L’ordre 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
Ordre de grandeur des fonctions 26
Exercice
• Montrer que
Θ(f + g) = Θ(Max{f,g}).
• Soit p(n) = aknk
+ . . . + a1n + a0 un polynôme de degré k. Montrer que
p(n) ∈ Θ(nk
).
Ordre de grandeur des fonctions 27
Exercice
Supposons que f(n) ∈ Θ(g(n)). Est-ce qu’il est vrai que 2f(n)
∈ Θ(2g(n)
)?
Dans le cas affirmatif prouvez le, sinon donnez un contre-exemple.
Ordre de grandeur des fonctions 28
définition :
On définit de la façon suivante l’ordre partiel sur l’ordre 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 ∈ O(f)
Ordre de grandeur des fonctions 29
Enumerer en ordre croissant l’ordre exact des fonctions suivantes:
n, 2n
, n log n, ln n, n + 7n5
, log n,
√
n, en
, 2n−1
, n2
, n2
+
log n, log log n, n3
, (log n)2
, n!, n3/2
.
(log et ln dénotent respectivement la fonction de logarithme en base de 2 et en
base de e.)
Ordre de grandeur des fonctions 30
106
opérations par seconde.
c log n n n3
2n
102
c 6.6 µs 0.1 ms 1 s 4 · 106
années
103
c 9.9 µs 1 ms 16.6 mn -
104
c 13.3 µs 10 ms 11.5 jours -
105
c 16.6 µs 0.1 s 347 années -
106
c 19.9 µs 1 s 106
années -
Ordre de grandeur des fonctions 31
proposition 4 : (admise)
• lim
n→∞
g
f
= c > 0 alors g ∈ Θ(f)
• lim
n→∞
g
f
= 0 alors g ∈ O(f) et f ∈ O(g)
(Θ(g) < Θ(f))
• lim
n→∞
g
f
= +∞ alors f ∈ O(g) et g ∈ O(f)
(Θ(f) < Θ(g))
On va comparer les algorithmes selon l’ordre de grandeur de
leur complexité.
Ordre de grandeur des fonctions 32
définition :
La complexité C(n) d’un problème P est la complexité du meilleur
algorithme qui résoud P.
• Si un algorithme A résoud P en temps f(n)
alors C(n) ∈ O(f)
• Si l’on prouve que tt algorithme qui résoud P travaille en
temps au moins g(n) alors C(n) ∈ Ω(g)
• Si f ∈ Θ(g) alors C(n) ∈ Θ(f) = Θ(g) et c’est la
complexité du problème
Ordre de grandeur des fonctions 33
Exercice
1. Supposons que
lim
n→∞
f(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
2. Supposons que Θ(f) = Θ(g). Est-ce que limn→∞
f(n)
g(n)
1. existe toujours et = ∞
2. existe toujours et = 0
3. existe toujours et = c, où c est une constante positive
4. n’existe pas toujours.
Ordre de grandeur des fonctions 34
Exercice
Montrer que Θ est une relation d’équivalence.
35
Un rapide rappel
Arbres enracinés 36
Rappel
Un arbre est un graphe non-orienté acyclique et connexe
Définition
Un arbre enraciné (rooted tree) est un arbre avec un sommet
distingué.
Le sommet distingué s’appelle la racine (root) de l’arbre.
Arbres enracinés 37
Définition
Soit T = (V,E) un arbre enraciné au sommet r, x un sommet de T.
• si {y,x} est une arête de T et y est un ancêtre de x, alors y est
le père de x, et x est un fils de y.
• la racine de l’arbre n’a pas de père. si x et y ont le même père,
alors ils sont frêres.
• un sommet sans fils est un sommet externe ou feuille (leaf). les
autres sommets sont les sommets internes
• le nombre de fils d’un sommet x est le degré de x.
Arbres enracinés 38
Définition
La profondeur du sommet x est la longueur de la chaine entre la
racine et le sommet x.
La hauteur (ou profondeur) de l’arbre est :
Max
x∈V
{profondeur(x)}
Arbres binaires 39
Les arbres binaires sont définis récursivement.
Définition
un arbre binaire est une structure sur un ensemble fini de sommets.
Il est :
• soit vide (ne contient pas de sommet)
• soit l’union 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 d’un sous-arbre gauche non vide est appelé le fils gauche
de la racine de l’arbre.
Arbres binaires 40
Définition
Soit a un réel non négatif.
a est le plus grand entier qui est ≤ a.
a est le plus petit entier qui est ≥ a.
exemples
π = 3
π = 4
5 = 5 = 5
notation
log désigne le logarithme en base 2.
Arbres binaires 41
Théorème 1
La profondeur d’un arbre binaire à n sommets est au moins log n
Preuve
a. A la profondeur l, il y a au plus 2l
sommets dans l’arbre.
Parce que : c’est vrai à la profondeur 0, et si c’est 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.
et alors : Nombre de sommets ≤
d
l=0 2l
= 2d+1
− 1
c. Soit d la profondeur de l’arbre. On suppose que d < log n , alors
d ≤ log n − 1. Il vient que n ≤ 2 log n
− 1 ≤ 2log n
− 1 < n ce qui est une
contradiction.
42
TRI (sorting)
Tri 43
Input : Une liste de n entiers (a1,a2, . . . ,an)
Output : Une permutation (a1,a2, . . . ,an) de la liste d’entrée telle
que a1 ≤ a2 ≤ . . . ≤ an ou a1 ≥ a2 ≥ . . . ≥ an.
Souvent les entiers sont une partie d’une donnée plus complexe,
l’entier est alors la clé de la donnée. Et on triera les données d’après
les clés.
La structure de donnée est une liste A à n éléments avec A[i] = ai
au début et A[i] = ai à la fin.
L’opération de base pour les algorithmes de tri est la comparaison :
A[i] : A[j], c’est la seule opération permise sur les clés.
Tri 44
Une autre opération est l’échange : on peut échanger A[i] et A[j], ce
que l’on note par A[i] ↔ A[j].
Le résultat est alors le suivant :
k := A[i]
A[i] := A[j]
A[j] = k
Un algorithme de tri est stable s’il préserve l’ordre de départ des
éléments avec la même clé.
Un algorithme de tri se fait sur place s’il utilise seulement un
nombre constant de variables auxiliaires.
45
Tri par selection
46
Idée :
On recherche le minimum de la liste et on le met en première
position, et on recommence sur la fin de la liste où l’on a ajouté
l’élément qui se trouvait en première place.
Après le k-ième placement, les k plus petits éléments de la liste
sont à leur place définitive.
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 itération i :
(n − i + 1) − 1 = n − i
• Nombre total de comparaisons :
n−1
i=1
(n − i) =
n−1
i=1
i =
n(n − 1)
2
= C2
n ∈ Θ(n2
)
50
Tri par insertion (séquentielle)
51
Idée :
• On fait n itérations.
• Après l’itération (i − 1) les premiers (i − 1) éléments de la liste
sont triés.
• A l’itération i on insère d’une manière séquentielle le i-ème
élément parmi les premiers (i − 1) éléments.
52
Exemple :
Input : 101 115 30 63 47 20
Itération 1 : 101 115 30 63 47 20
Itération 2 : 101 115 30 63 47 20
Itération 3 : 30 101 115 63 47 20
Itération 4 : 30 63 101 115 47 20
Itération 5 : 30 47 63 101 115 20
Itération 6 : 20 30 47 63 101 115
output : 20 30 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 à l’itération i :
au plus i
• Nombre total de comparaisons est au plus:
n
i=2
i =
n(n + 1)
2
− 1 ∈ O(n2
)
55
On considère la méthode suivante,
réalisant le tri par insertion d’un tableau T à N éléments,
numérotés 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 d’échanges
nécessaires est égal à 1 + 2 + . . . (N − 1) = N(N−1)
2
.
56
Exercice 1
Soient (a1, . . . ,ap) et (b1, . . . ,bp) deux suites d’entiers dont les
éléments sont triés
par ordre croissant. Soit T = (a1,b1,a2,b2, . . . ,ap,bp).
Démontrer, par récurrence sur p, que le tri par insertion de T
nécessite, dans le pire des cas,
seulement p(p+1)
2
échanges.
57
Exercice 2
On considère à présent un tableau T arbitraire
de taille n = 2 × p, et l’on considère la méthode suivante :
– trier sur place, par insertion, le sous-tableau de T d’indices
paires,
– trier sur place, par insertion, le sous-tableau de T d’indices
impaires,
– trier, par insertion, le tableau T résultant.
Quel est, dans le pire des cas, le coût de ce tri? Comparer la valeur
obtenue avec celle
du tri par insertion simple. Est-elle meilleure ou pire?
58
Tri rapide (quicksort)
59
Idée :
On partage la liste à trier en deux sous-listes telles que tous les
éléments de la première soient plus petits que les éléments de la
seconde. Par récurrence, on trie les deux sous-listes.
Comment partager la liste en deux?
On choisit une des clés de la liste, et on l’utilise comme pivot.
La liste d’origine est donc coupée en trois : une première liste (à
gauche) composée des éléments ≤ au pivot, le pivot (à sa place
définitive) et une liste (à droite ) composée des éléments > au pivot.
Notre choix : le pivot est le premier élément de la liste.
60
Supposons qu’on a une procédure 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 résultat l’indice k, où ce pivot a été
placé.
Avec cette procédure, on peut écrire une procédure 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 lorsqu’une des partitions est vide et
l’autre est de taille n − 1.
Dans ce cas, on a :
t1 = 1
tn = tn−1 + n
Et la solution de cette équation de récurrence est : n2
64
Complexité
• Complexité en meilleur cas : Θ(n × log(n))
En effet, le meilleur cas se produit lorsque les deux partitions sont
de même taille.
Dans ce cas, on a :
t1 = 1
tn = 2tn/2 + n
Et la solution de cette équation de récurrence est : n × log(n) + n
65
Complexité
• Complexité en moyenne : O(n log n)
c1 = 0
cn = 1
n−1
n−1
i=1 (ci + cn−i) + n
Maintenant, on retrousse ses manches :
cn = 2
n−1
n−1
i=1 ci + n
cn = 2
n−1
× cn−1 + 2
n−1
n−1
i=1 ci + n
cn = 2
n−1
× cn−1 + 2
n−1
n−1
i=1 ci + n
cn = 2
n−1
× cn−1 + n−2
n−1
( 2
n−2
n−1
i=1 ci−1 + n − 1) + 2
cn = n
n−1
× cn−1 + 2
et maintenant les choses se corsent...
66
On divise à droite et à gauche par n :
cn/n = cn−1/(n − 1) + 2/n
Puis on pose Yn = cn/n, on a alors :
Yn = Yn−1 + 2/n, ce qui correspond à l’expression d’une série
harmonique et qui donne :
cn = 2 × n × n
i=1(1/i)
Par la formule d’euler, on trouve alors
cn 1,386 × n × log(n) + 1,154 × n
c’est à dire une fonction en n × log(n).
67
Tri Fusion
68
Le principe
En appliquant la méthode diviser pour régner au problème du tri
d’un 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 récursivement ces deux tables, puis de
fusionner les tables triées.
69
Le principe
Première phase : Découpe :
1. Découper le tableau en 2 sous-tableaux égaux (à 1 case près)
2. Découper chaque sous-tableau en 2 sous-tableaux égaux
3. Ainsi de suite, jusqu’à obtenir des sous-tableaux de taille 1
70
Le principe
Deuxième phase : Tri/fusion :
1. Fusionner les sous-tableaux 2 à 2 de façon à obtenir des
sous-tableaux de taille 2 triés
2. Fusionner les sous-tableaux 2 à 2 de façon à obtenir des
sous-tableaux de taille 4 triés
3. Ainsi de suite, jusqu’à obtenir le tableau entier
71
Exercice
• Donner un code, dans le langage que vous voulez, qui
implémente le Tri Fusion.
• Dérouler votre code sur la liste d’entiers :
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 éléments deux à deux de la gauche vers la droite,
en les échangeant pour les classer quand c’est nécessaire.
• Quand on arrive à la fin de la liste, on recommence, jusqu’à ce
que la liste soit classée.
• On détecte que la liste est classée quand on a fait un passage sans
faire d’échanges.
75
Exercice
• Ecrire une procédure Tri-Bulle
• Dérouler l’algorithme 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 78
Idée :
On sélectionne les minimums successifs en utilisant une structure
de donnée particulière : le tas
Définition
Un arbre parfait est un arbre binaire dont les feuilles sont situées sur
deux niveaux successifs : l’avant dernier niveau est complet, et les
feuilles du dernier niveau sont regroupées le plus à gauche possible.
Exemple
Tri par tas 79
Définition
Un arbre parfait partiellement ordonné est un arbre parfait dont les
sommets sont étiquetés par des éléments à trier, et tel que l’élément
associé à chaque sommet est ≤ aux éléments associés aux fils de ce
sommet.
Exemple
3
5 9
6 8 11 10
12 18 14
Tri par tas 80
Définition
Un tas (heap) est un tableau t représentant un arbre parfait
partiellement ordonnée selon les règles suivantes :
• t[1] est la racine
• t[2i] et t[2i + 1] sont les fils gauche et droite de t[i] (s’ils
existent)
Exemple
3 5 9 6 8 11 10 12 18 14
Tri par tas 81
Propriétés simples d’un tas
• t[ i/2 ] est le père 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 > n/2 , alors t[i] est une feuille
Idée du tri par tas
I. On construit le tas
II. On enlève successivement le minimum du tas et on reconstruit
la structure de tas sur le reste des éléments
Construction du tas 82
CONSTRUCTION DU TAS
L’essentiel est une procédure AJOUT qui ajoute un élément
nouveau à un tas.
On ajoute cet élément comme une feuille (au dernier niveau), puis
on l’échange avec son père tant qu’il est inférieur à celui-ci.
Construction du tas 83
procedure AJOUT
Input : t : array [1..n] of integer ; p, x : integer {la procédure ajoute l’élément x
dans le tas t qui contient p éléments}
var i : integer
begin
if p<n then begin {on place x à la dernière feuille}
p:=p+1 ; t[p]:=x ; i:=p ;
{on échange tant que x est < que son père}
while i>1 and t[i] < t[ i/2 ] do begin
t[i] ↔ t[ i/2 ] ; i := i/2
end
end
else writeln(“débordement du tas”)
end
Construction du tas 84
Exemple
3
9
11 10
5
86
12 18 14 4
Résultat final
3
9
11 10
12 18 14
6
4
5
8
Construction du tas 85
Complexité en pire cas
La procédure AJOUT fait au plus logp comparaisons.
Pourquoi?
Parce que la hauteur d’un arbre parfait à p sommets est log p .
Suppression du minimum et réorganisation du tas 86
SUPPRESSION DU MINIMUM ET REORGANISATION DU
TAS
La procédure DESTRUCTION remplace la racine du tas par la
dernière feuille.
Pour réorganiser le tas, on échange cet élément avec le plus petit de
ses deux fils tant qu’il est supérieur à celui-ci.
Suppression du minimum et réorganisation du tas 87
Exemple
5 9
6 8 11 10
12 18 14
Résultat final
9
8 11 10
18
5
6
12
14
Suppression du minimum et réorganisation du tas 88
procedure DESTRUCTION
Input :
t : array [1..n] of integer
p, min : integer
{DESTRUCTION retourne dans min le minimum des p éléments du tas et
réorganise le tas}
var i, j : integer
begin
min:=t[1] {retour du minimum}
t[1] := t[p] ; p:=p-1 {nouvelle taille du tas}
i:=1 {réorganisation du tas}
Suppression du minimum et réorganisation du tas 89
while i ≤ p/2 do begin
{calcul de l’indice 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 éléments qui sont père 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 :
2 log p
Algorithme de tri par tas 90
L’algorithme TRI-TAS
• On ajoute successivement chacun des n éléments dans le tas
t[1 . . . p], p augmente de 1 après chaque adjonction. A la fin on a un
tas de taille n.
• Tant que p > 1, on supprime le minimum du tas, on décroit p de
1, et on range le minimum à la (p + 1)eme place. Puis on
réorganise le tas. t[p + 1 . . . n] contient les n − p plus petits
éléments en ordre décroissant.
1 p+1
n−p plus petit elements
Algorithme de tri par tas 91
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
Algorithme de tri par tas 92
Exemple
15 12 11 7 13 9 15
12 15 11 7 13 9
15
12
Algorithme de tri par tas 93
Exemple (suite)
11 12 15 7 13 9
15 12
11
7 11 12 15 13 9
12
15
11
7
Algorithme de tri par tas 94
Exemple (suite)
7 11 12 15 13 9
12
15
11
7
13
7 11 9 15 13 12
15
11
7
13 12
9
Algorithme de tri par tas 95
Exemple (suite)
9 11 12 15 13 7
9
11
12
15 13
11 13 12 15 9 7
11
13 12
15
Algorithme de tri par tas 96
Exemple (suite)
12 13 15 11 9 7
12
13 15
13 15 12 11 9 7
13
15
Algorithme de tri par tas 97
Exemple (fin)
RESULTAT FINAL :
15 13 12 11 9 7
15
Algorithme de tri par tas 98
Complexité de TRI-TAS en pire cas
AJOUT :
n−1
i=2
log i
DESTRUCTION :
n−1
i=2
2 log i
W(n) = 3
n−1
i=2
log i ≤ 3
n
2
log xdx = 3(log2 e)
n
2
ln xdx
= 3(log2 e)[x ln x − x]n
2 = 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) 99
Construction du tas en O(n)
Idée
On utilise la partie de la procédure DESTRUCTION qui réorganise
le tas. On lance cette sous-procédure successivement à partir de
chaque sommet du tas, partant du niveau le plus bas jusqu’à la
racine.
Construction du tas en O(n) 100
Exemple
15
12 11
7 13 9 14
15
12 9
7 13 11 14
15
7 9
12 13 11 14
7
12 9
15 13 11 14
Construction du tas en O(n) 101
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 déja un tas }
var j : integer
begin
while i ≤ n/2 do begin {t[i] n’est 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
Construction du tas en O(n) 102
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
Théorème
CONSTRUCTION construit le tas avec ≤ 2n-2 comparaisons
103
Exercice
Trier le tableau suivant en utilisant l’algorithme TRI-RAPIDE:
1 21 5 34 32 67 6 0 200 25 65 4 24 33.
Quel est le nombre de comparaisons utilisées?
104
Exercice
Quelle est la valeur retournée par la procédure PARTITION quand tous les
éléments dans le tableau A[i..j] ont la même valeur?
105
Exercice
On se donne un tableau de n éléments qui ont chacun une couleur soit rouge, soit
blanc. On veut obtenir un tableau avec deux zones: à gauche tous les éléments
rouges, à droite tous les éléments blancs.
Ecrivez une procédure qui réalise cette organisation du tableau en ne testant
qu’une seule fois la couleur de chaque élément. Essayez de minimiser le nombre
moyen des échanges d’éléments. Calculez ce nombre.
106
Recherche dans une liste triée
Recherche dans une liste triée 107
Input : L,n ≤ 0,X où L est une liste triées à n éléments et X est
l’élément recherché.
Output : l’index de lélément X dans L si X ∈ L, 0 dans le cas
contraire.
Algorithme : BINARY SEARCH (recherche binaire ou
dichotomique)
Idée :
Recherche dans une liste triée 108
procedure BINARYSEARCH
Input :
L : array [1..n] of elements
X : element
first, last : 1..n
index : 0..n
{ procédure récursive pour chercher X dans L, first et last sont les
indices respectivement du premier et du dernier élélement de la
section du tableau actuellement recherchée }
Recherche dans une liste triée 109
var m : 1..n
begin if first <= last then
begin m := first + last
2
{ indice de l’élément 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)
Recherche dans une liste triée 110
Complexité en pire cas de BINARY SEARCH
Soit T(n) = WorstBINARY SEARCH(n)
Alors : T(1) = 1 et T(n) = T( n/2 ) + 1
Théorème
La solution de cette équation de récurrence est :
T(n) = log n + 1
Preuve
Admise (théorème fondamental du principe de récurrence du cours
sur les paradigmes)
On voudrait maintenant montrer que BINARYSEARCH est un
algorithme optimal pour ce problème
Recherche dans une liste triée 111
Un algorithme de comparaison ne peut faire d’autres opérations que
de comparer X avec les éléments de la liste.
On va se concentrer sur le cas où X n’est 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 s’arréter au cas où
X n’est pas dans la liste s’il possède une preuve.
Recherche dans une liste triée 112
Définition
L’arbre de décision (comparaison) pour un algorithme A de
comparaison qui recherche un élément dans une liste triée à n
éléments est l’arbre binaire TA dont les sommets internes sont
étiquetés par les entiers entre 1 et n selon les règles suivantes :
1. La racine de TA est étiquetée par l’indice du premier élément
avec lequel A compare X
2. Supposons que l’étiquette d’un sommet soit i. L’étiquette du
fils gauche de ce sommet est l’indice de l’élément avec lequel A
compare X si X < L[i].
Analogue pour le fils droite....
Recherche dans une liste triée 113
Les feuilles de TA sont étiquetées par les preuves pour le cas où X
n’est pas dans L.
TA peut être étendu en rajoutant une feuille à chaque sommet
interne étiqueté par i :
cette feuille correspond au résultat X = L[i]
Recherche dans une liste triée 114
Exemple :
Recherche dans une liste triée 115
Théorème
Chaque algorithme de comparaison A pour rechercher un élément
X dans une liste triée à n éléments fait au moins log n + 1
comparaisons en pire cas.
Preuve
Soit TA l’arbre de décision pour A. Sur chaque entrée, A parcourt
de fa¸on naturelle une branche de TA. Le nombre de comparaisons
effectuées 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,
c’est à dire la profondeur de TA.
Recherche dans une liste triée 116
Preuve (suite) :
Montrons par l’absurde que le nbre de sommets internes de TA est
≥ n. Sinon, ∃i,1 ≤ i ≤ n tel qu’aucun sommet interne n’est
étiqueté par i. Soient deux listes L et L tq
∀j = i, L[j] = L [j] = X et L[i] = X, L [i] = X.
A ne peut pas distinguer ces deux listes (voir TA étendu), donc il
donne un résultat incorrect.
Par conséquent, la profondeur de TA est au moins log n + 1.
117
Recherche du plus grand élément
(maximum) dans une liste.
Recherche du plus grand élément 118
Input : L,n ≤ 0 où L est une liste de n entiers.
Output : max, le plus grand élément 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é : WorstFINDMAX(n) = AvFINDMAX(n) = n − 1.
Recherche du plus grand élément 119
Théorème :
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
éléments.
Parmi les n éléments, n − 1 ne sont pas le maximum (en pire cas).
Pour chacun de ces éléments A doit faire une comparaison dans
laquelle l’élément est plus petit que celui auquel il est comparé.
Par conséquent, A fait au moins n − 1 comparaisons.
120
Recherche du plus deuxième plus grand
élément dans une liste.
Recherche du plus deuxième plus grand élément 121
Input : L,n ≤ 0 où L est une liste de n entiers distincts.
Output : second, le deuxième plus grand élément 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 : L’algo. pour second doit avoir une preuve que second est
deuxième et pas premier. Cela ne peut se faire qu’en faisant une
comparaison où second perd. Cette comparaison se fait alors avec
max.
Recherche du plus deuxième plus grand élément 122
On va donner deux méthodes (algorithmes) pour trouver second.
Méthode naïve
• On cherche max dans L en effectuant n − 1 comparaisons.
• On cherche le plus grand élément dans le reste en faisant n − 2
comparaisons.
Au total, l’algorithme naïf a effectué 2n − 3 comparaisons.
Recherche du plus deuxième plus grand élément 123
Méthode du tournoi (tournament method)
On organise un tournoi de tennis. On fait jouer les participants 2 à 2
en manches (tours). S’il y a un nombre impair de joueurs, un joueur
progresse au tour suivant sans jeu. Le vainqueur du tournoi est max.
On peut représenter un tournoi par un arbre binaire dont les feuilles
sont les joueurs.
Recherche du plus deuxième plus grand élément 124
exemple :
Recherche du plus deuxième plus grand élément 125
Proposition : Dans un tournoi avec n joueurs, il y a log n manches
Preuve : Evidente (profondeur de l’arbre/nombres de sommets)
Rq : second a du perdre dans un jeu contre max !
Pour trouver second, il suffit de trouver le plus grand des éléments
battus par max sachant que le nbre de joueurs ayant joué contre
max est log n .
Complexité :
• Le tournoi se fait en n − 1 comparaisons
• Le plus grand de log n éléments se fait en log n − 1
comparaisons
Ce qui fait un total de n + log n − 2 comparaisons.
126
Borne inférieure sur le tri
127
On peut représenter tous les tris que nous avons rencontrés par des
arbres de décision. Chaque noeud interne pose une question sur la
comparaison entre 2 éléments. Le fils de gauche correspond à la
réponse négative, le fils droit à l’affirmatif. Les feuilles représentent
la permutation à effectuer pour obtenir le tableau trié.
Théorème :
Pour trier n éléments à l’aide d’un algorithme de tri basé sur les
comparaisons, il faut Ω(n log n) comparaisons.
128
Preuve :
Tout arbre de décision pour trier n éléments a n! feuilles
représentant toutes les permutations possibles. Un arbre binaire à n!
feuilles a une hauteur de l’ordre de log(n!).
Il reste alors à prouver que log(n!) n log n. C’est vrai en vertu de
la formule de stirling : n!
√
2nπ × (
n
e
)n

Más contenido relacionado

La actualidad más candente

Chapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminChapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminSana Aroussi
 
Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrentsmohamed_SAYARI
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court cheminSana Aroussi
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivationsSana Aroussi
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexitéSana Aroussi
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéSana Aroussi
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018salah fenni
 
La complexité des algorithmes récursives Géométrie algorithmique
La complexité des algorithmes récursivesGéométrie algorithmiqueLa complexité des algorithmes récursivesGéométrie algorithmique
La complexité des algorithmes récursives Géométrie algorithmiqueHajer Trabelsi
 
Exercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivitéExercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivitésalah fenni
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018salah fenni
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)salah fenni
 
Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole Sana Aroussi
 
Algorithmes d'approximation
Algorithmes d'approximationAlgorithmes d'approximation
Algorithmes d'approximationmohamed_SAYARI
 
Ch8 correction exercices (1)
Ch8 correction exercices (1)Ch8 correction exercices (1)
Ch8 correction exercices (1)abdellah12
 
Les algorithmes avancés
Les algorithmes avancésLes algorithmes avancés
Les algorithmes avancésmohamed_SAYARI
 
Résumé Algorithme et Programmation
Résumé Algorithme et ProgrammationRésumé Algorithme et Programmation
Résumé Algorithme et Programmationborhen boukthir
 
47811458 exercices-systemes-echantillonnes
47811458 exercices-systemes-echantillonnes47811458 exercices-systemes-echantillonnes
47811458 exercices-systemes-echantillonnesTRIKI BILEL
 

La actualidad más candente (20)

DCT1 4SI
DCT1  4SIDCT1  4SI
DCT1 4SI
 
Résumer arithmétique
Résumer arithmétiqueRésumer arithmétique
Résumer arithmétique
 
Chapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminChapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court chemin
 
Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrents
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court chemin
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivations
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalité
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
 
La complexité des algorithmes récursives Géométrie algorithmique
La complexité des algorithmes récursivesGéométrie algorithmiqueLa complexité des algorithmes récursivesGéométrie algorithmique
La complexité des algorithmes récursives Géométrie algorithmique
 
Exercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivitéExercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivité
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)
 
Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole
 
Algorithmes d'approximation
Algorithmes d'approximationAlgorithmes d'approximation
Algorithmes d'approximation
 
Ch8 correction exercices (1)
Ch8 correction exercices (1)Ch8 correction exercices (1)
Ch8 correction exercices (1)
 
Les algorithmes avancés
Les algorithmes avancésLes algorithmes avancés
Les algorithmes avancés
 
Résumé Algorithme et Programmation
Résumé Algorithme et ProgrammationRésumé Algorithme et Programmation
Résumé Algorithme et Programmation
 
47811458 exercices-systemes-echantillonnes
47811458 exercices-systemes-echantillonnes47811458 exercices-systemes-echantillonnes
47811458 exercices-systemes-echantillonnes
 

Similar a cours algorithme

Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Cours algorithmique et complexite
Cours algorithmique et complexite Cours algorithmique et complexite
Cours algorithmique et complexite Saddem Chikh
 
la complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicitéla complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicitéSana REFAI
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)DriNox NordisTe
 
Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfMbarkiIsraa
 
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfChapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfMbarkiIsraa
 
Présentation Finale - Partie I.pptx
Présentation Finale - Partie I.pptxPrésentation Finale - Partie I.pptx
Présentation Finale - Partie I.pptxouassityoussef
 
eExercices corrigesdivers
eExercices corrigesdiverseExercices corrigesdivers
eExercices corrigesdiversHajar Yazine
 
Exercicescorrigesdivers
ExercicescorrigesdiversExercicescorrigesdivers
ExercicescorrigesdiversKarim Amane
 
Cours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfCours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfadeljaouadi
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreECAM Brussels Engineering School
 
Projet d'Analyse Numérique
Projet d'Analyse NumériqueProjet d'Analyse Numérique
Projet d'Analyse NumériqueYassineElaroui2
 
chap 3 complexité (3).pdf
chap 3 complexité (3).pdfchap 3 complexité (3).pdf
chap 3 complexité (3).pdfdonixwm
 
Chaitre 3 Fonctions logiques (1).pptx
Chaitre 3 Fonctions logiques (1).pptxChaitre 3 Fonctions logiques (1).pptx
Chaitre 3 Fonctions logiques (1).pptxMohammedJaafari3
 

Similar a cours algorithme (20)

Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Cours algorithmique et complexite
Cours algorithmique et complexite Cours algorithmique et complexite
Cours algorithmique et complexite
 
la complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicitéla complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicité
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)
 
Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdf
 
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfChapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
 
transparents-Algo-complexite.pdf
transparents-Algo-complexite.pdftransparents-Algo-complexite.pdf
transparents-Algo-complexite.pdf
 
Présentation Finale - Partie I.pptx
Présentation Finale - Partie I.pptxPrésentation Finale - Partie I.pptx
Présentation Finale - Partie I.pptx
 
TAD (1).pptx
TAD (1).pptxTAD (1).pptx
TAD (1).pptx
 
eExercices corrigesdivers
eExercices corrigesdiverseExercices corrigesdivers
eExercices corrigesdivers
 
Exercicescorrigesdivers
ExercicescorrigesdiversExercicescorrigesdivers
Exercicescorrigesdivers
 
Cours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfCours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdf
 
246242769 sequence-1-pdf
246242769 sequence-1-pdf246242769 sequence-1-pdf
246242769 sequence-1-pdf
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 
Projet d'Analyse Numérique
Projet d'Analyse NumériqueProjet d'Analyse Numérique
Projet d'Analyse Numérique
 
chap 3 complexité (3).pdf
chap 3 complexité (3).pdfchap 3 complexité (3).pdf
chap 3 complexité (3).pdf
 
Video
VideoVideo
Video
 
Chaitre 3 Fonctions logiques (1).pptx
Chaitre 3 Fonctions logiques (1).pptxChaitre 3 Fonctions logiques (1).pptx
Chaitre 3 Fonctions logiques (1).pptx
 

Más de mohamednacim

l'analyse financière
l'analyse financièrel'analyse financière
l'analyse financièremohamednacim
 
المحاسبة المالية
المحاسبة الماليةالمحاسبة المالية
المحاسبة الماليةmohamednacim
 
الذكاء الإصطناعي
الذكاء الإصطناعيالذكاء الإصطناعي
الذكاء الإصطناعيmohamednacim
 
Introduction to oracle databases
Introduction to oracle databasesIntroduction to oracle databases
Introduction to oracle databasesmohamednacim
 
بحث حول الأليياف البصرية
بحث حول الأليياف البصريةبحث حول الأليياف البصرية
بحث حول الأليياف البصريةmohamednacim
 
بحث حول الأليياف البصرية
بحث حول الأليياف البصريةبحث حول الأليياف البصرية
بحث حول الأليياف البصريةmohamednacim
 
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS mohamednacim
 
التحليل الاحصائي Spss
التحليل الاحصائي Spss التحليل الاحصائي Spss
التحليل الاحصائي Spss mohamednacim
 
Byt of ByteofPython arabic
Byt of ByteofPython arabicByt of ByteofPython arabic
Byt of ByteofPython arabicmohamednacim
 
maintenance informatique
maintenance informatiquemaintenance informatique
maintenance informatiquemohamednacim
 
الشامل في الشبكات
الشامل في الشبكاتالشامل في الشبكات
الشامل في الشبكاتmohamednacim
 
شبكات الكمبيوتر
شبكات الكمبيوترشبكات الكمبيوتر
شبكات الكمبيوترmohamednacim
 
Introduction to oracle databases
Introduction to oracle databasesIntroduction to oracle databases
Introduction to oracle databasesmohamednacim
 
Programming in pasca l
Programming in pasca lProgramming in pasca l
Programming in pasca lmohamednacim
 

Más de mohamednacim (20)

Networking
NetworkingNetworking
Networking
 
Perl tutorial
Perl tutorial Perl tutorial
Perl tutorial
 
l'analyse financière
l'analyse financièrel'analyse financière
l'analyse financière
 
Mohasabamalia v2
Mohasabamalia v2Mohasabamalia v2
Mohasabamalia v2
 
المحاسبة المالية
المحاسبة الماليةالمحاسبة المالية
المحاسبة المالية
 
الذكاء الإصطناعي
الذكاء الإصطناعيالذكاء الإصطناعي
الذكاء الإصطناعي
 
Introduction to oracle databases
Introduction to oracle databasesIntroduction to oracle databases
Introduction to oracle databases
 
Spss
SpssSpss
Spss
 
بحث حول الأليياف البصرية
بحث حول الأليياف البصريةبحث حول الأليياف البصرية
بحث حول الأليياف البصرية
 
بحث حول الأليياف البصرية
بحث حول الأليياف البصريةبحث حول الأليياف البصرية
بحث حول الأليياف البصرية
 
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS
التحليل الإحصائي للمتغيرات المتعددة باستخدام برنامج SPSS
 
التحليل الاحصائي Spss
التحليل الاحصائي Spss التحليل الاحصائي Spss
التحليل الاحصائي Spss
 
Byt of ByteofPython arabic
Byt of ByteofPython arabicByt of ByteofPython arabic
Byt of ByteofPython arabic
 
maintenance informatique
maintenance informatiquemaintenance informatique
maintenance informatique
 
Les bases du pc
Les bases du pcLes bases du pc
Les bases du pc
 
الشامل في الشبكات
الشامل في الشبكاتالشامل في الشبكات
الشامل في الشبكات
 
شبكات الكمبيوتر
شبكات الكمبيوترشبكات الكمبيوتر
شبكات الكمبيوتر
 
Vba course
Vba courseVba course
Vba course
 
Introduction to oracle databases
Introduction to oracle databasesIntroduction to oracle databases
Introduction to oracle databases
 
Programming in pasca l
Programming in pasca lProgramming in pasca l
Programming in pasca l
 

Último

L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...Faga1939
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaireTxaruka
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfssuserc72852
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxRayane619450
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...Nguyen Thanh Tu Collection
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 

Último (13)

L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 

cours algorithme

  • 2. Plan 1 Cours : S. Peyronnet Comment me contacter? sylvain.peyronnet@lrde.epita.fr Structure du cours • Complexité et algorithmique : définitions • Principales méthodes de tri • Structures de données de bases • Structures de données avancées • Principaux paradigmes algorithmiques Support de cours Introduction to algorithms par Cormen, Leiserson, Rivest et Stein.
  • 4. Notion d’algorithme 3 • Selon le Petit Robert : "ensemble des règles opératoires propres à un calcul.” • Un peu plus précisement : Une séquence de pas de calcul qui prend un ensemble de valeurs comme entrée (input) et produit un ensemble de valeurs comme sortie (output). • Un algorithme résout toujours un problème de calcul. L’énoncé du problème spécifie la relation input / output souhaitée.
  • 5. Notion d’algorithme 4 Exemples : 1. Multiplication Input : deux entiers a et b Output : leur produit ab Algorithme : celui de l’école 2. Plus Grand Commun Diviseur (PGCD) Input : deux entiers a et b Output : pgcd(a,b) Algorithme : celui d’Euclide 3. Primalité Input : un entier a Question : a est-il un entier premier? Cas spécial : problème de décision - output = réponse oui/non à une question.
  • 6. Notion d’algorithme 5 Donner une définition précise de la notion d’algorithme est assez difficile et complexe. Il existe plusieurs définitions mathématiques depuis les années 30. exemples : • fonctions récursives • λ-calcul • machines de Turing • RAM (Random Access Machine : machine à accès aléatoire)
  • 7. Notion d’algorithme 6 Fait : Toutes ces définitions sont équivalentes Thèse de Church : Tout ce qui est calculable intuitivement est aussi calculable par les objets formels ci-dessus Mais : Il existe des problèmes non calculables (indécidables) exemple : Problème de l’arrêt Input : Un algorithme (programme) A et un input I Output : A termine-t-il pour I?
  • 8. Notion d’algorithme 7 preuve de l’indecidabilité (par l’absurde) Supposons que le problème de l’arrêt soit décidable. Cela signifie alors qu’il existe un programme B qui décide si un programme s’arrête. Définissons maintenant le programme C suivant: – C s’arrête quand le programme qu’il prend en entrée ne s’arrête pas. – C ne s’arrête pas quand le programme qu’il prend en entrée s’arrête. Bien sûr, un tel programme ne peut pas exister car si on l’utilise sur lui même, on obtient une contradiction. Et donc le problême de l’arrêt est indécidable.
  • 9. Notion d’algorithme 8 Dans ce cours, on étudie seulement des problèmes pour lesquels il existe des algorithmes. En fait, on s’intéressera aux problèmes pour lesquels il existe des algorithmes efficaces. Un exemple typique de problème décidable pour lequel il n’y a pas d’algorithme efficace : le jeu d’échec (nombre de configurations est environ 1050 )
  • 10. Complexité des algorithmes 9 On veut une mesure pour comparer des algorithmes On voudrait que la complexité : • ne dépende pas de l’ordinateur • ne dépende pas du langage de programmation • ne dépende pas du programmeur • ... etc ... • soit indépendante des détails de l’implémentation
  • 11. Complexité des algorithmes 10 On choisit de travailler sur un modèle d’ordinateur : RAM : • ordinateur idéalisé • mémoire infinie • accès à la mémoire en temps constant Le langage de programmation sera un pseudo-PASCAL. Pour mesurer la complexité en temps on choisit une opération fondamentale pour le problème de calcul particulier, et on calcule le nombre d’opérations fondamentales exécutées par l’algorithme. Le choix est bon si le nbre total d’opérations est proportionnel au nbre d’opérations fondamentales.
  • 12. Complexité des algorithmes 11 exemples : Problème Opération fondamentale recherche d’un élément comparaison entre l’élément dans une liste et les entrées de la liste multiplication des multiplication scalaire matrices réelles addition des opération binaire entiers binaires
  • 13. Complexité des algorithmes 12 Le temps de l’exécution dépend de la taille de l’entrée. On veut considérer seulement la taille essentielle de l’entrée. Cela peut être par exemple : • le nombre d’éléments combinatoires dans l’entrée • le nombre de bits pour représenter l’entrée • ... etc ...
  • 14. Complexité des algorithmes 13 exemples : Problème Taille de l’entrée recherche d’un élément nombre d’éléments dans une liste dans la liste multiplication des dimension des matrices réelles matrices addition des nbre de bits pour entiers binaires représenter les entiers
  • 15. Complexité en pire cas et moyenne 14 Soit A un algorithme Dn l’ensemble des entrées de taille n I ∈ Dn une entrée définition : 1. coutA(I) = le nbre d’op. fondamentales exécutées par A sur I 2. la complexité de A en pire cas : MaxA(n) = Max{coutA(I); I ∈ Dn} Soit Pr une distribution de probabilités sur Dn définition : la complexité de A en moyenne : MoyA(n) = I∈Dn Pr[I] · coutA(I)
  • 16. Exemple : Recherche Séquentielle 15 RECHERCHE Input : L,n,x ; où L est un tableau [1, . . . ,n] et x est l’élément recherché Output : l’indice de x dans L (0 si x ∈ L) Algorithme : Recherche Séquentielle (RS) var L : array [1, . . . ,n] of element; x : element; j : integer; begin j:=1; while j≤n and L[j]=x do begin j:=j+1; end { while } if j>n then j:=0; end Opération de base : comparaison de x avec un élément de L.
  • 17. Exemple : Recherche Séquentielle 16 complexité en pire cas de RS : MaxRS(n) = n complexité en moyenne de RS : On suppose que : • tous les éléments sont distincts • Pr[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 ∈ L} On a : Pr[Ii] = q n pour 1 ≤ i ≤ n et coutRS(Ii) = i Pr[In+1] = 1 − q et coutRS(In+1) = n
  • 18. Exemple : Recherche Séquentielle 17 MoyRS(n) = n+1 i=1 Pr[Ii] · coutRS(Ii) = n i=1 q n · i + (1 − q) · n = q n n i=1 i + (1 − q) · n = q n · n(n + 1) 2 + (1 − q) · n = (1 − q 2 ) · n + q 2 Si q = 1 alors MoyRS(n) = n+1 2 Si q = 1 2 alors MoyRS(n) = 3n+1 4
  • 19. 18 Exercice Ecrire un algorithme pour trouver la médiane de trois entiers. (Par définition, la médiane de 2k − 1 éléments est le keme plus grand). – Combien de comparaisons fait votre algorithme en pire cas? – En moyenne? – Quel est la complexité de ce problème?
  • 20. 19 Exercice On veut déterminer si une suite binaire de longueur n contient deux 0’s consécutifs. L’opération de base est d’examiner 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 problème quand n = 2,3,4,5?
  • 21. Ordre de grandeur des fonctions 20 On voudrait comparer la complexité de deux algorithmes • Les constantes ont peu d’importance, on peut les négliger. Elles ne dépendent que des particularités de l’implémentation. • On ne s’intéresse pas aux entrées de petite taille. On va comparer les deux complexités asymptotiquement. Notation : N = {0,1,2, . . .} R = reels N+ = {1,2,3, . . .} R+ = reel positifs R∗ = R {0} f,g : N+ → R∗ (souvent on peut étendre à R∗ → R∗ )
  • 22. Ordre de grandeur des fonctions 21 définition : 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 : f(n) = n3 2 g1(n) = n2 + 17n + 15 g2(n) = 5n3 • g1 ∈ O(f) : on prend n0 = 1 et c = 2(1 + 17 + 15) et alors n2 + 17n + 15 ≤ c · n3 2 si n ≥ 1 • g2 ∈ O(f) : on choisit c = 10 et alors 5n3 ≤ 10 · n3 2 • f ∈ O(g2) • f ∈ O(g1) sinon n3 2 ≤ c · n2 + 17c · n + 5c et donc si n est grand on a n 2 ≤ c + 2 ce qui est impossible.
  • 23. Ordre de grandeur des fonctions 22 Attention : les fonctions peuvent être incomparables au sens du O Exercice Donner un exemple de deux fonctions f et g telles que f ∈ O(g) et g ∈ O(f).
  • 24. Ordre de grandeur des fonctions 23 définition : Ω(f) = {g : ∃c > 0,∃n0 ∈ N+ ,∀n ≥ n0 g(n) ≥ c · f(n)} proposition 1 : g ∈ O(f) ⇔ f ∈ Ω(g) preuve : g(n) ≤ c · f(n) ⇔ f(n) ≥ 1 c · g(n)
  • 25. Ordre de grandeur des fonctions 24 définition : Θ(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é l’ordre exact ou ordre de grandeur de f. proposition 3 : La relation f R g si f ∈ Θ(g) est une relation d’équivalence.
  • 26. Ordre de grandeur des fonctions 25 Exercice 1. L’ordre 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
  • 27. Ordre de grandeur des fonctions 26 Exercice • Montrer que Θ(f + g) = Θ(Max{f,g}). • Soit p(n) = aknk + . . . + a1n + a0 un polynôme de degré k. Montrer que p(n) ∈ Θ(nk ).
  • 28. Ordre de grandeur des fonctions 27 Exercice Supposons que f(n) ∈ Θ(g(n)). Est-ce qu’il est vrai que 2f(n) ∈ Θ(2g(n) )? Dans le cas affirmatif prouvez le, sinon donnez un contre-exemple.
  • 29. Ordre de grandeur des fonctions 28 définition : On définit de la façon suivante l’ordre partiel sur l’ordre 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 ∈ O(f)
  • 30. Ordre de grandeur des fonctions 29 Enumerer en ordre croissant l’ordre exact des fonctions suivantes: n, 2n , n log n, ln n, n + 7n5 , log n, √ n, en , 2n−1 , n2 , n2 + log n, log log n, n3 , (log n)2 , n!, n3/2 . (log et ln dénotent respectivement la fonction de logarithme en base de 2 et en base de e.)
  • 31. Ordre de grandeur des fonctions 30 106 opérations par seconde. c log n n n3 2n 102 c 6.6 µs 0.1 ms 1 s 4 · 106 années 103 c 9.9 µs 1 ms 16.6 mn - 104 c 13.3 µs 10 ms 11.5 jours - 105 c 16.6 µs 0.1 s 347 années - 106 c 19.9 µs 1 s 106 années -
  • 32. Ordre de grandeur des fonctions 31 proposition 4 : (admise) • lim n→∞ g f = c > 0 alors g ∈ Θ(f) • lim n→∞ g f = 0 alors g ∈ O(f) et f ∈ O(g) (Θ(g) < Θ(f)) • lim n→∞ g f = +∞ alors f ∈ O(g) et g ∈ O(f) (Θ(f) < Θ(g)) On va comparer les algorithmes selon l’ordre de grandeur de leur complexité.
  • 33. Ordre de grandeur des fonctions 32 définition : La complexité C(n) d’un problème P est la complexité du meilleur algorithme qui résoud P. • Si un algorithme A résoud P en temps f(n) alors C(n) ∈ O(f) • Si l’on prouve que tt algorithme qui résoud P travaille en temps au moins g(n) alors C(n) ∈ Ω(g) • Si f ∈ Θ(g) alors C(n) ∈ Θ(f) = Θ(g) et c’est la complexité du problème
  • 34. Ordre de grandeur des fonctions 33 Exercice 1. Supposons que lim n→∞ f(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 2. Supposons que Θ(f) = Θ(g). Est-ce que limn→∞ f(n) g(n) 1. existe toujours et = ∞ 2. existe toujours et = 0 3. existe toujours et = c, où c est une constante positive 4. n’existe pas toujours.
  • 35. Ordre de grandeur des fonctions 34 Exercice Montrer que Θ est une relation d’équivalence.
  • 37. Arbres enracinés 36 Rappel Un arbre est un graphe non-orienté acyclique et connexe Définition Un arbre enraciné (rooted tree) est un arbre avec un sommet distingué. Le sommet distingué s’appelle la racine (root) de l’arbre.
  • 38. Arbres enracinés 37 Définition Soit T = (V,E) un arbre enraciné au sommet r, x un sommet de T. • si {y,x} est une arête de T et y est un ancêtre de x, alors y est le père de x, et x est un fils de y. • la racine de l’arbre n’a pas de père. si x et y ont le même père, alors ils sont frêres. • un sommet sans fils est un sommet externe ou feuille (leaf). les autres sommets sont les sommets internes • le nombre de fils d’un sommet x est le degré de x.
  • 39. Arbres enracinés 38 Définition La profondeur du sommet x est la longueur de la chaine entre la racine et le sommet x. La hauteur (ou profondeur) de l’arbre est : Max x∈V {profondeur(x)}
  • 40. Arbres binaires 39 Les arbres binaires sont définis récursivement. Définition un arbre binaire est une structure sur un ensemble fini de sommets. Il est : • soit vide (ne contient pas de sommet) • soit l’union 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 d’un sous-arbre gauche non vide est appelé le fils gauche de la racine de l’arbre.
  • 41. Arbres binaires 40 Définition Soit a un réel non négatif. a est le plus grand entier qui est ≤ a. a est le plus petit entier qui est ≥ a. exemples π = 3 π = 4 5 = 5 = 5 notation log désigne le logarithme en base 2.
  • 42. Arbres binaires 41 Théorème 1 La profondeur d’un arbre binaire à n sommets est au moins log n Preuve a. A la profondeur l, il y a au plus 2l sommets dans l’arbre. Parce que : c’est vrai à la profondeur 0, et si c’est 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. et alors : Nombre de sommets ≤ d l=0 2l = 2d+1 − 1 c. Soit d la profondeur de l’arbre. On suppose que d < log n , alors d ≤ log n − 1. Il vient que n ≤ 2 log n − 1 ≤ 2log n − 1 < n ce qui est une contradiction.
  • 44. Tri 43 Input : Une liste de n entiers (a1,a2, . . . ,an) Output : Une permutation (a1,a2, . . . ,an) de la liste d’entrée telle que a1 ≤ a2 ≤ . . . ≤ an ou a1 ≥ a2 ≥ . . . ≥ an. Souvent les entiers sont une partie d’une donnée plus complexe, l’entier est alors la clé de la donnée. Et on triera les données d’après les clés. La structure de donnée est une liste A à n éléments avec A[i] = ai au début et A[i] = ai à la fin. L’opération de base pour les algorithmes de tri est la comparaison : A[i] : A[j], c’est la seule opération permise sur les clés.
  • 45. Tri 44 Une autre opération est l’échange : on peut échanger A[i] et A[j], ce que l’on note par A[i] ↔ A[j]. Le résultat est alors le suivant : k := A[i] A[i] := A[j] A[j] = k Un algorithme de tri est stable s’il préserve l’ordre de départ des éléments avec la même clé. Un algorithme de tri se fait sur place s’il utilise seulement un nombre constant de variables auxiliaires.
  • 47. 46 Idée : On recherche le minimum de la liste et on le met en première position, et on recommence sur la fin de la liste où l’on a ajouté l’élément qui se trouvait en première place. Après le k-ième placement, les k plus petits éléments de la liste sont à leur place définitive.
  • 48. 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
  • 49. 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
  • 50. 49 Complexité • Nombre de comparaisons en itération i : (n − i + 1) − 1 = n − i • Nombre total de comparaisons : n−1 i=1 (n − i) = n−1 i=1 i = n(n − 1) 2 = C2 n ∈ Θ(n2 )
  • 51. 50 Tri par insertion (séquentielle)
  • 52. 51 Idée : • On fait n itérations. • Après l’itération (i − 1) les premiers (i − 1) éléments de la liste sont triés. • A l’itération i on insère d’une manière séquentielle le i-ème élément parmi les premiers (i − 1) éléments.
  • 53. 52 Exemple : Input : 101 115 30 63 47 20 Itération 1 : 101 115 30 63 47 20 Itération 2 : 101 115 30 63 47 20 Itération 3 : 30 101 115 63 47 20 Itération 4 : 30 63 101 115 47 20 Itération 5 : 30 47 63 101 115 20 Itération 6 : 20 30 47 63 101 115 output : 20 30 47 63 101 115
  • 54. 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
  • 55. 54 Complexité • Nombre de comparaisons à l’itération i : au plus i • Nombre total de comparaisons est au plus: n i=2 i = n(n + 1) 2 − 1 ∈ O(n2 )
  • 56. 55 On considère la méthode suivante, réalisant le tri par insertion d’un tableau T à N éléments, numérotés 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 d’échanges nécessaires est égal à 1 + 2 + . . . (N − 1) = N(N−1) 2 .
  • 57. 56 Exercice 1 Soient (a1, . . . ,ap) et (b1, . . . ,bp) deux suites d’entiers dont les éléments sont triés par ordre croissant. Soit T = (a1,b1,a2,b2, . . . ,ap,bp). Démontrer, par récurrence sur p, que le tri par insertion de T nécessite, dans le pire des cas, seulement p(p+1) 2 échanges.
  • 58. 57 Exercice 2 On considère à présent un tableau T arbitraire de taille n = 2 × p, et l’on considère la méthode suivante : – trier sur place, par insertion, le sous-tableau de T d’indices paires, – trier sur place, par insertion, le sous-tableau de T d’indices impaires, – trier, par insertion, le tableau T résultant. Quel est, dans le pire des cas, le coût de ce tri? Comparer la valeur obtenue avec celle du tri par insertion simple. Est-elle meilleure ou pire?
  • 60. 59 Idée : On partage la liste à trier en deux sous-listes telles que tous les éléments de la première soient plus petits que les éléments de la seconde. Par récurrence, on trie les deux sous-listes. Comment partager la liste en deux? On choisit une des clés de la liste, et on l’utilise comme pivot. La liste d’origine est donc coupée en trois : une première liste (à gauche) composée des éléments ≤ au pivot, le pivot (à sa place définitive) et une liste (à droite ) composée des éléments > au pivot. Notre choix : le pivot est le premier élément de la liste.
  • 61. 60 Supposons qu’on a une procédure 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 résultat l’indice k, où ce pivot a été placé. Avec cette procédure, on peut écrire une procédure TRI-RAPIDE.
  • 62. 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
  • 63. 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
  • 64. 63 Complexité • Complexité en pire cas : Θ(n2 ) En effet, le pire cas se produit lorsqu’une des partitions est vide et l’autre est de taille n − 1. Dans ce cas, on a : t1 = 1 tn = tn−1 + n Et la solution de cette équation de récurrence est : n2
  • 65. 64 Complexité • Complexité en meilleur cas : Θ(n × log(n)) En effet, le meilleur cas se produit lorsque les deux partitions sont de même taille. Dans ce cas, on a : t1 = 1 tn = 2tn/2 + n Et la solution de cette équation de récurrence est : n × log(n) + n
  • 66. 65 Complexité • Complexité en moyenne : O(n log n) c1 = 0 cn = 1 n−1 n−1 i=1 (ci + cn−i) + n Maintenant, on retrousse ses manches : cn = 2 n−1 n−1 i=1 ci + n cn = 2 n−1 × cn−1 + 2 n−1 n−1 i=1 ci + n cn = 2 n−1 × cn−1 + 2 n−1 n−1 i=1 ci + n cn = 2 n−1 × cn−1 + n−2 n−1 ( 2 n−2 n−1 i=1 ci−1 + n − 1) + 2 cn = n n−1 × cn−1 + 2 et maintenant les choses se corsent...
  • 67. 66 On divise à droite et à gauche par n : cn/n = cn−1/(n − 1) + 2/n Puis on pose Yn = cn/n, on a alors : Yn = Yn−1 + 2/n, ce qui correspond à l’expression d’une série harmonique et qui donne : cn = 2 × n × n i=1(1/i) Par la formule d’euler, on trouve alors cn 1,386 × n × log(n) + 1,154 × n c’est à dire une fonction en n × log(n).
  • 69. 68 Le principe En appliquant la méthode diviser pour régner au problème du tri d’un 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 récursivement ces deux tables, puis de fusionner les tables triées.
  • 70. 69 Le principe Première phase : Découpe : 1. Découper le tableau en 2 sous-tableaux égaux (à 1 case près) 2. Découper chaque sous-tableau en 2 sous-tableaux égaux 3. Ainsi de suite, jusqu’à obtenir des sous-tableaux de taille 1
  • 71. 70 Le principe Deuxième phase : Tri/fusion : 1. Fusionner les sous-tableaux 2 à 2 de façon à obtenir des sous-tableaux de taille 2 triés 2. Fusionner les sous-tableaux 2 à 2 de façon à obtenir des sous-tableaux de taille 4 triés 3. Ainsi de suite, jusqu’à obtenir le tableau entier
  • 72. 71 Exercice • Donner un code, dans le langage que vous voulez, qui implémente le Tri Fusion. • Dérouler votre code sur la liste d’entiers : 3 6 78 32 5 1 10 23 9 11 33
  • 73. 72 Exercice : complexité Quelle est la complexité du Tri Fusion?
  • 75. 74 Le principe • On compare les éléments deux à deux de la gauche vers la droite, en les échangeant pour les classer quand c’est nécessaire. • Quand on arrive à la fin de la liste, on recommence, jusqu’à ce que la liste soit classée. • On détecte que la liste est classée quand on a fait un passage sans faire d’échanges.
  • 76. 75 Exercice • Ecrire une procédure Tri-Bulle • Dérouler l’algorithme sur la liste : 2 4 7 5 3 1 Combien avez vous fait de comparaisons? • Quelle est la complexité du tri à bulle?
  • 77. 76 Variantes : • Tri Boustrophedon • Tri Shuttle
  • 78. 77 TRI PAR TAS (HEAPSORT)
  • 79. Tri par tas 78 Idée : On sélectionne les minimums successifs en utilisant une structure de donnée particulière : le tas Définition Un arbre parfait est un arbre binaire dont les feuilles sont situées sur deux niveaux successifs : l’avant dernier niveau est complet, et les feuilles du dernier niveau sont regroupées le plus à gauche possible. Exemple
  • 80. Tri par tas 79 Définition Un arbre parfait partiellement ordonné est un arbre parfait dont les sommets sont étiquetés par des éléments à trier, et tel que l’élément associé à chaque sommet est ≤ aux éléments associés aux fils de ce sommet. Exemple 3 5 9 6 8 11 10 12 18 14
  • 81. Tri par tas 80 Définition Un tas (heap) est un tableau t représentant un arbre parfait partiellement ordonnée selon les règles suivantes : • t[1] est la racine • t[2i] et t[2i + 1] sont les fils gauche et droite de t[i] (s’ils existent) Exemple 3 5 9 6 8 11 10 12 18 14
  • 82. Tri par tas 81 Propriétés simples d’un tas • t[ i/2 ] est le père 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 > n/2 , alors t[i] est une feuille Idée du tri par tas I. On construit le tas II. On enlève successivement le minimum du tas et on reconstruit la structure de tas sur le reste des éléments
  • 83. Construction du tas 82 CONSTRUCTION DU TAS L’essentiel est une procédure AJOUT qui ajoute un élément nouveau à un tas. On ajoute cet élément comme une feuille (au dernier niveau), puis on l’échange avec son père tant qu’il est inférieur à celui-ci.
  • 84. Construction du tas 83 procedure AJOUT Input : t : array [1..n] of integer ; p, x : integer {la procédure ajoute l’élément x dans le tas t qui contient p éléments} var i : integer begin if p<n then begin {on place x à la dernière feuille} p:=p+1 ; t[p]:=x ; i:=p ; {on échange tant que x est < que son père} while i>1 and t[i] < t[ i/2 ] do begin t[i] ↔ t[ i/2 ] ; i := i/2 end end else writeln(“débordement du tas”) end
  • 85. Construction du tas 84 Exemple 3 9 11 10 5 86 12 18 14 4 Résultat final 3 9 11 10 12 18 14 6 4 5 8
  • 86. Construction du tas 85 Complexité en pire cas La procédure AJOUT fait au plus logp comparaisons. Pourquoi? Parce que la hauteur d’un arbre parfait à p sommets est log p .
  • 87. Suppression du minimum et réorganisation du tas 86 SUPPRESSION DU MINIMUM ET REORGANISATION DU TAS La procédure DESTRUCTION remplace la racine du tas par la dernière feuille. Pour réorganiser le tas, on échange cet élément avec le plus petit de ses deux fils tant qu’il est supérieur à celui-ci.
  • 88. Suppression du minimum et réorganisation du tas 87 Exemple 5 9 6 8 11 10 12 18 14 Résultat final 9 8 11 10 18 5 6 12 14
  • 89. Suppression du minimum et réorganisation du tas 88 procedure DESTRUCTION Input : t : array [1..n] of integer p, min : integer {DESTRUCTION retourne dans min le minimum des p éléments du tas et réorganise le tas} var i, j : integer begin min:=t[1] {retour du minimum} t[1] := t[p] ; p:=p-1 {nouvelle taille du tas} i:=1 {réorganisation du tas}
  • 90. Suppression du minimum et réorganisation du tas 89 while i ≤ p/2 do begin {calcul de l’indice 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 éléments qui sont père 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 : 2 log p
  • 91. Algorithme de tri par tas 90 L’algorithme TRI-TAS • On ajoute successivement chacun des n éléments dans le tas t[1 . . . p], p augmente de 1 après chaque adjonction. A la fin on a un tas de taille n. • Tant que p > 1, on supprime le minimum du tas, on décroit p de 1, et on range le minimum à la (p + 1)eme place. Puis on réorganise le tas. t[p + 1 . . . n] contient les n − p plus petits éléments en ordre décroissant. 1 p+1 n−p plus petit elements
  • 92. Algorithme de tri par tas 91 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
  • 93. Algorithme de tri par tas 92 Exemple 15 12 11 7 13 9 15 12 15 11 7 13 9 15 12
  • 94. Algorithme de tri par tas 93 Exemple (suite) 11 12 15 7 13 9 15 12 11 7 11 12 15 13 9 12 15 11 7
  • 95. Algorithme de tri par tas 94 Exemple (suite) 7 11 12 15 13 9 12 15 11 7 13 7 11 9 15 13 12 15 11 7 13 12 9
  • 96. Algorithme de tri par tas 95 Exemple (suite) 9 11 12 15 13 7 9 11 12 15 13 11 13 12 15 9 7 11 13 12 15
  • 97. Algorithme de tri par tas 96 Exemple (suite) 12 13 15 11 9 7 12 13 15 13 15 12 11 9 7 13 15
  • 98. Algorithme de tri par tas 97 Exemple (fin) RESULTAT FINAL : 15 13 12 11 9 7 15
  • 99. Algorithme de tri par tas 98 Complexité de TRI-TAS en pire cas AJOUT : n−1 i=2 log i DESTRUCTION : n−1 i=2 2 log i W(n) = 3 n−1 i=2 log i ≤ 3 n 2 log xdx = 3(log2 e) n 2 ln xdx = 3(log2 e)[x ln x − x]n 2 = 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)
  • 100. Construction du tas en O(n) 99 Construction du tas en O(n) Idée On utilise la partie de la procédure DESTRUCTION qui réorganise le tas. On lance cette sous-procédure successivement à partir de chaque sommet du tas, partant du niveau le plus bas jusqu’à la racine.
  • 101. Construction du tas en O(n) 100 Exemple 15 12 11 7 13 9 14 15 12 9 7 13 11 14 15 7 9 12 13 11 14 7 12 9 15 13 11 14
  • 102. Construction du tas en O(n) 101 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 déja un tas } var j : integer begin while i ≤ n/2 do begin {t[i] n’est 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
  • 103. Construction du tas en O(n) 102 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 Théorème CONSTRUCTION construit le tas avec ≤ 2n-2 comparaisons
  • 104. 103 Exercice Trier le tableau suivant en utilisant l’algorithme TRI-RAPIDE: 1 21 5 34 32 67 6 0 200 25 65 4 24 33. Quel est le nombre de comparaisons utilisées?
  • 105. 104 Exercice Quelle est la valeur retournée par la procédure PARTITION quand tous les éléments dans le tableau A[i..j] ont la même valeur?
  • 106. 105 Exercice On se donne un tableau de n éléments qui ont chacun une couleur soit rouge, soit blanc. On veut obtenir un tableau avec deux zones: à gauche tous les éléments rouges, à droite tous les éléments blancs. Ecrivez une procédure qui réalise cette organisation du tableau en ne testant qu’une seule fois la couleur de chaque élément. Essayez de minimiser le nombre moyen des échanges d’éléments. Calculez ce nombre.
  • 107. 106 Recherche dans une liste triée
  • 108. Recherche dans une liste triée 107 Input : L,n ≤ 0,X où L est une liste triées à n éléments et X est l’élément recherché. Output : l’index de lélément X dans L si X ∈ L, 0 dans le cas contraire. Algorithme : BINARY SEARCH (recherche binaire ou dichotomique) Idée :
  • 109. Recherche dans une liste triée 108 procedure BINARYSEARCH Input : L : array [1..n] of elements X : element first, last : 1..n index : 0..n { procédure récursive pour chercher X dans L, first et last sont les indices respectivement du premier et du dernier élélement de la section du tableau actuellement recherchée }
  • 110. Recherche dans une liste triée 109 var m : 1..n begin if first <= last then begin m := first + last 2 { indice de l’élément 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)
  • 111. Recherche dans une liste triée 110 Complexité en pire cas de BINARY SEARCH Soit T(n) = WorstBINARY SEARCH(n) Alors : T(1) = 1 et T(n) = T( n/2 ) + 1 Théorème La solution de cette équation de récurrence est : T(n) = log n + 1 Preuve Admise (théorème fondamental du principe de récurrence du cours sur les paradigmes) On voudrait maintenant montrer que BINARYSEARCH est un algorithme optimal pour ce problème
  • 112. Recherche dans une liste triée 111 Un algorithme de comparaison ne peut faire d’autres opérations que de comparer X avec les éléments de la liste. On va se concentrer sur le cas où X n’est 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 s’arréter au cas où X n’est pas dans la liste s’il possède une preuve.
  • 113. Recherche dans une liste triée 112 Définition L’arbre de décision (comparaison) pour un algorithme A de comparaison qui recherche un élément dans une liste triée à n éléments est l’arbre binaire TA dont les sommets internes sont étiquetés par les entiers entre 1 et n selon les règles suivantes : 1. La racine de TA est étiquetée par l’indice du premier élément avec lequel A compare X 2. Supposons que l’étiquette d’un sommet soit i. L’étiquette du fils gauche de ce sommet est l’indice de l’élément avec lequel A compare X si X < L[i]. Analogue pour le fils droite....
  • 114. Recherche dans une liste triée 113 Les feuilles de TA sont étiquetées par les preuves pour le cas où X n’est pas dans L. TA peut être étendu en rajoutant une feuille à chaque sommet interne étiqueté par i : cette feuille correspond au résultat X = L[i]
  • 115. Recherche dans une liste triée 114 Exemple :
  • 116. Recherche dans une liste triée 115 Théorème Chaque algorithme de comparaison A pour rechercher un élément X dans une liste triée à n éléments fait au moins log n + 1 comparaisons en pire cas. Preuve Soit TA l’arbre de décision pour A. Sur chaque entrée, A parcourt de fa¸on naturelle une branche de TA. Le nombre de comparaisons effectuées 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, c’est à dire la profondeur de TA.
  • 117. Recherche dans une liste triée 116 Preuve (suite) : Montrons par l’absurde que le nbre de sommets internes de TA est ≥ n. Sinon, ∃i,1 ≤ i ≤ n tel qu’aucun sommet interne n’est étiqueté par i. Soient deux listes L et L tq ∀j = i, L[j] = L [j] = X et L[i] = X, L [i] = X. A ne peut pas distinguer ces deux listes (voir TA étendu), donc il donne un résultat incorrect. Par conséquent, la profondeur de TA est au moins log n + 1.
  • 118. 117 Recherche du plus grand élément (maximum) dans une liste.
  • 119. Recherche du plus grand élément 118 Input : L,n ≤ 0 où L est une liste de n entiers. Output : max, le plus grand élément 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é : WorstFINDMAX(n) = AvFINDMAX(n) = n − 1.
  • 120. Recherche du plus grand élément 119 Théorème : 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 éléments. Parmi les n éléments, n − 1 ne sont pas le maximum (en pire cas). Pour chacun de ces éléments A doit faire une comparaison dans laquelle l’élément est plus petit que celui auquel il est comparé. Par conséquent, A fait au moins n − 1 comparaisons.
  • 121. 120 Recherche du plus deuxième plus grand élément dans une liste.
  • 122. Recherche du plus deuxième plus grand élément 121 Input : L,n ≤ 0 où L est une liste de n entiers distincts. Output : second, le deuxième plus grand élément 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 : L’algo. pour second doit avoir une preuve que second est deuxième et pas premier. Cela ne peut se faire qu’en faisant une comparaison où second perd. Cette comparaison se fait alors avec max.
  • 123. Recherche du plus deuxième plus grand élément 122 On va donner deux méthodes (algorithmes) pour trouver second. Méthode naïve • On cherche max dans L en effectuant n − 1 comparaisons. • On cherche le plus grand élément dans le reste en faisant n − 2 comparaisons. Au total, l’algorithme naïf a effectué 2n − 3 comparaisons.
  • 124. Recherche du plus deuxième plus grand élément 123 Méthode du tournoi (tournament method) On organise un tournoi de tennis. On fait jouer les participants 2 à 2 en manches (tours). S’il y a un nombre impair de joueurs, un joueur progresse au tour suivant sans jeu. Le vainqueur du tournoi est max. On peut représenter un tournoi par un arbre binaire dont les feuilles sont les joueurs.
  • 125. Recherche du plus deuxième plus grand élément 124 exemple :
  • 126. Recherche du plus deuxième plus grand élément 125 Proposition : Dans un tournoi avec n joueurs, il y a log n manches Preuve : Evidente (profondeur de l’arbre/nombres de sommets) Rq : second a du perdre dans un jeu contre max ! Pour trouver second, il suffit de trouver le plus grand des éléments battus par max sachant que le nbre de joueurs ayant joué contre max est log n . Complexité : • Le tournoi se fait en n − 1 comparaisons • Le plus grand de log n éléments se fait en log n − 1 comparaisons Ce qui fait un total de n + log n − 2 comparaisons.
  • 128. 127 On peut représenter tous les tris que nous avons rencontrés par des arbres de décision. Chaque noeud interne pose une question sur la comparaison entre 2 éléments. Le fils de gauche correspond à la réponse négative, le fils droit à l’affirmatif. Les feuilles représentent la permutation à effectuer pour obtenir le tableau trié. Théorème : Pour trier n éléments à l’aide d’un algorithme de tri basé sur les comparaisons, il faut Ω(n log n) comparaisons.
  • 129. 128 Preuve : Tout arbre de décision pour trier n éléments a n! feuilles représentant toutes les permutations possibles. Un arbre binaire à n! feuilles a une hauteur de l’ordre de log(n!). Il reste alors à prouver que log(n!) n log n. C’est vrai en vertu de la formule de stirling : n! √ 2nπ × ( n e )n