Vous êtes sur la page 1sur 91

Algorithmique : Volume 6

Recherche
Adressage dispers
Tris
Complexit

Ccile Balkanski, Nelly Bensimon, Grard Ligozat

iUT
ORSAY
Universit Paris XI
I.U.T. d'Orsay
Dpartement Informatique
Anne scolaire 2003-2004
2003-2004 Algorithmique 6 : Recherche,
complexit, tris
2
Recherche

2003-2004 Algorithmique 6 : Recherche, complexit, tris 3
Recherche
Problme gnral abstrait
ensemble de valeurs E, lment a; est-ce que a E?
rponse: boolen (x) { xE | x=a }


plus gnralement
existe-t-il x vrifiant certains critres

(x) { xE | j(x)}

trouver tous les x satisfaisant certains critres

{ xE | j(x)} (bases de donnes)




2003-2004 Algorithmique 6 : Recherche, complexit, tris 4
Recherche en informatique
On ne travaille pas sur des ensembles mathmatiques,
mais sur des structures de donnes particulires
Les donnes peuvent tre de nature complexe
(agrgats, classes)
Exemples :
tableau


tableau tri
20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2003-2004 Algorithmique 6 : Recherche, complexit, tris 5
32
18
9
5
2
24
27
20
36
19
13
8
12
15
17
7
arbre binaire de recherche
2003-2004 Algorithmique 6 : Recherche, complexit, tris 6
Tri de donnes complexes
Exemple de donne complexe:
type Etudiant = agrgat
nom: chane
ge: entier
classement: entier
photo: fichier_GIF
fin
on peut trier par nom (ordre alphabtique), par ge, par
classement
pas par photo
cls, cls primaires ex-aequo, mme ge
2003-2004 Algorithmique 6 : Recherche, complexit, tris 7
Recherche et type de donnes
On utilise divers types de donnes sur lesquelles
on fait des oprations de base:
- ajout
- suppression
- mise- jour
- consultation
Chaque structure a des avantages et des
inconvnients :
tableau, tableau tri, arbre binaire, liste chane,
etc.

2003-2004 Algorithmique 6 : Recherche, complexit, tris 8
Recherche squentielle
fonction rechSeq (tab , nbre , val) retourne (boolen)
{renvoie VRAI si val est dans tab, FAUX sinon}
paramtre s (D) tab: tableau[1, MAX] d'entiers
(D) nbr, val: entier
variables trouv: boolen i: entier
dbut trouv faux
i 0
tant que non trouv ET i < nbr faire
i i+ 1
trouv (tab[i] = val)
ftq
retourne (trouv)
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 9
fonction rechSeq (tab, nbre, val) retourne(entier)
{renvoie le premier indice o se trouve val dans tab, -1 sinon}
paramtre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, val: entier
variables trouv: boolen i: entier
dbut
trouv faux
i 0
tant que non trouv ET i < nbr faire
i i+1
trouv (tab[i] = val)
ftq
si trouv alors retourne (i) sinon retourne (-1) fsi
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 10
Recherche avec critres
procdure rechLesMin (tab_d, nbre_d, tab_r, nbre_r, val)
{renvoie dans le tableau tab_r les lments de tab_d val}
paramtre s (D) tab_d: tableau [1, MAX] d'entiers,
nbr_d, val: entier
(R) tab_r: tableau [1, MAX] d'entiers, nbr_r: entier
variables id, ir: entiers
dbut ir 0
pour id l nbre_d faire
si (tab_d[id] val)
alors irir+ 1
tab_r[ir] tab_d[id]
fsi
fpour
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 11
fonction rechMin (tab, nbre) retourne(entier)
{renvoie la plus petite valeur contenue dans le tableau tab}
paramtre s (D) tab : tableau [1, MAX] d'entiers,
nbr : entier
variables i, min : entiers
dbut
imin tab[l]
pour id 2 nbre faire
si (tab[i] < min)
alors min tab[i]
fsi
fpour
retourne (tab[min])
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 12
fonction rechPosMin (tab, nbre) retourne(entier)
{retourne le (dernier) indice de la plus petite valeur du tableau tab}
paramtre s (D) tab: tableau [1, MAX] d'entiers, nbr: entier
variables i, imin, min: entiers
dbut
min tab[1]
imin 1
pour id 2 nbre faire
si (tab[i] min)
alors min tab[i]
imin i
fsi
fpour
retourne (imin)
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 13
Recherche squentielle dans tableau ordonn
fonction rechSeq (tab, nbre, val) retourne(entier)
{renvoie le premier indice o se trouve val s'il est dans tab, -1 sinon}
paramtre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, val: entier
variables trouv, dpass : boolens ; i : entier
dbut
trouv faux; dpass faux; i 0
tant que non (trouv OU dpass) ET i < nbr faire
i i+ 1
trouv (tab[i] = val)
dpass (tab[i] > val)
ftq
si trouv alors retourne (i) sinon retourne(-1)
fin
2003-2004 Algorithmique 6 : Recherche, complexit, tris 14
Recherche dichotomique
Rappel: les valeurs doivent tre tries !


Principe:
on vise au milieu du tableau
si l'lment vis est plus grand que val, il suffit
de chercher gauche ; s'il est plus grand, il
suffit de chercher droite

2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2003-2004 Algorithmique 6 : Recherche, complexit, tris 15
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2003-2004 Algorithmique 6 : Recherche, complexit, tris 16
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2003-2004 Algorithmique 6 : Recherche, complexit, tris 17
Recherche dichotomique
fonction rechDicho (tab, nbre, val) retourne(entier)
{renvoie un indice o se trouve val s'il est dans tab, -1 sinon}
paramtre s (D) tab : tableau [1, MAX] d'entiers
(D) nbr, val : entier
variables trouv : boolen ; id, if, im: entiers
dbut
trouv faux; id 0 ; if nbre + 1
tant que non trouv ET (if - id) > 1 faire
im (id + if)/2
trouv (tab[im] = val)
si (tab[im] > val) alors if im
sinon id im
fsi
ftq
si (id = 0) alors retourne (-1)
sinon si (tab[id]=val) alors retourne(id)
sinon retourne (-1)
fsi
fsi
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 18
Recherche dichotomique: variantel
fonction rechDicho (tab, nbre, val) retourne(entier)
{renvoie le plus grand indice o se trouve val s'il est dans tab, -1 sinon}
paramtre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, val: entier
variables id, if, im: entiers
dbut
id 0; if nbre+1
tant que (if - id) > 1 faire
im (id + if)/2
si (tab[im] > val) alors if im
sinon id im
fsi
ftq
si (id = 0) alors retourne (-1)
sinon si (tab[id]=val) alors retourne(id)
sinon retourne (-1)
fsi
fsi
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 19
Recherche dichotomique : variante2
fonction rechDicho (tab, nbre, val) retourne (entier)
{renvoie le plus petit indice o se trouve val s'il est dans tab, -1 sinon}
paramtre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, val: entier
variables id, if, im: entier
dbut
id 0 ; if nbre+ 1
tant que (if - id) > 1 faire
im (id + if)/2
si (tab[im] val) alors if im
sinon id im
fsi
ftq
si (if = nbre + 1) alors retourne (-1)
sinon si (tab[if]=val) alors retourne(if)
sinon retourne(-1)
fsi
fsi
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 20
Recherche dans un ABR
fonction rech (unAbr, val) retourne(boolen)
{renvoieVRAl si val se trouve dans l'ABR unAbr, FAUXsinon}
paramtre s (D) unAbr: ABR
(D) val: entier
variables trouv: boolen ; id, if, im: entiers

dbut
si unAbr.Vide() alors retourner (FAUX)
sinon si (unAbr.Info() = val)
alors retourner(VRAI)
sinon si (unAbr.Info() < val)
alors retourner (Rech(unAbr.FD(), val))
sinon retourner (Rech(unAbr.FG(), val))
fsi
fsi
fsi
fin
2003-2004 Algorithmique 6 : Recherche, complexit, tris 21
32
18
9
5
2
24
27
20
36
19
13
8
12
15
17
7
Simulation de recherche
2003-2004 Algorithmique 6 : Recherche, complexit, tris 22
2003-2004 Algorithmique 6 : Recherche,
complexit, tris
23
Adressage Dispers

24
Adressage dispers

Objectif: classer M lments dans un tableau
Principe: dans un tableau de p cases, on classe
l'lment x, lindice k, donn par une fonction
d'adressage h
- classer un lment x entier k, compris entre 1 et p
Fonction h: h(x)=k
- la valeur k ne dpend que de l'lment x ;
- l'lment x n'est pas plac relativement aux autres
lments
25
Quelques exemples de fonctions
dadressage
x : chane h
1
(x) = nombre de caractres de la chane
h
1
("Paul") = 4 h
1
("MmeDupont")=9
x : entier h
2
(x) = somme de ses chiffres dcimaux
h
2
(342) = 9 h
2
(100 340) = 8
x : entier h
3
(x)= nombre de bits 1 dans l'criture
binaire
h
3
(342) = h
3
(101010010) = 4
x : chane de caractres
h
4
(x) = somme des codes ASCII des caractres de la chane
26
Exemple de classement par la
fonction dadressage h
1
Suite de prnoms :
- Marc, Izabelle, Paule, Jeanne, Ali, Jo, Michle
- Codes associs par h
1
(nb caractres) : 4, 8, 5, 6, 3, 2, 7




Constatations :
- la valeur k ne dpend que de l'lment x ;
- la place de l'lment x n'est pas dtermine relativement aux autres
lments classs...
- ... la diffrence d'un tri avec relation d'ordre o la place d'un lment
est dtermine par le nombre d'lments "meilleurs" selon cet ordre.
Jo Ali Marc Paule Jeanne Michle Izabelle
1 2 3 4 5 6 7 8
27
Une autre fonction dadressage

h
5
associe c
1
c
k
la somme :
- (Somme (rang de c
i
dans lalphabet * i) modulo 9) +1

Suite de prnoms : Marc, Izabelle, Paule, Jeanne, Jo,
Michle
- h
5
(Marc) = ((13*1+1*2+18*3+3*4) mod 9) + 1 = 81 mod 9 + 1 = 1
- h
5
(Jeanne) = ((10*1+5*2+1*3+14*4+14*5+5*6) mod 9) + 1
= 179 mod 9 + 1 = 9
h
5
(Paule) = ((16*1+1*2+21*3+12*4+5*5) mod 9) + 1 = 1 mod 9 + 1 = 2
Marc Paule Jo Izabelle Michle Jeanne
1 2 3 4 5 6 7 8 9
28
Recherche dun lment
Algorithme de recherche d'un lment x dans
une table construite par adressage dispers
d'une suite d'lments :

1) on calcule le code associ cet lment x par la
fonction dadressage, soit p.
2) on compare le contenu de la p-ime case de la table
avec llment x : si identit, la recherche est positive,
sinon elle est ngative.

29
Ajout dun lment
Algorithme d'ajout d'un lment X dans une
table construite par adressage dispers d'une
suite d'lments:

1) on calcule le code associ cet lment par la
fonction d'adressage, soit p.
2) on affecte l'lment la p-ime place dans la table,
condition toutefois que cette place ne soit pas
dj occupe risque de collision
30
Exemples (avec h
5
)
Recherche de "Isabelle"


- code associ par h
5
: 1 et tabAdrDisp [1] "Isabelle "
recherche ngative
Ajout de "Ali"


- code associ par h
5
: 8 ; tabAdrDisp [8] : " "
ajout possible
Ajout de "Lola"


- code associ par h
5
: 2 ; or tabAdrDisp [2] : "Paule"
collision

Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
31
Mthodes de rsolution des
collisions : mthodes internes
lnternes car on opre dans le tableau allou
- premire possibilit : on utilise la place libre dans le tableau

Algorithme d'ajout d'un lment entr en collision :
- partir du rang de la collision, rechercher la premire place libre et y
placer l'lment entr en collision.
- arriv la dernire case du tableau, continuer la recherche la premire
case du tableau.

Exemples: "Lola" (avec h
5
: 2) et "Isabelle" (avec h
5
: 1)
Marc Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
32
Retrait dun lment

1) on calcule le code associ cet lment x par la
fonction d'adressage : soit p ;

2) on compare le contenu de la p-ime case de la table
avec l'lment x :
si identit, on le supprime puis on place dans cette
case une marque pour indiquer que l'lment
supprim a pu provoquer d'ventuelles collisions
si non identit, on poursuit la recherche
squentiellement en cas d'ventuelles collisions
arrt si case vide ou parcours jusqu (p-1)
33
Recherche dun lment
1) on calcule le code associ cet lment x par la
fonction d'adressage : soit p.

2) on compare le contenu de la p-ime case de la table
avec l'lment x :
si identit, la recherche est positive,
sinon on poursuit la recherche squentiellement, en
cas dventuelles collisions (utiliser les marques)
arrt avec recherche ngative si case vide ou
parcours jusqu (p-1)
34
Exemples (avec h
5
)

retrait de Marc (code 1)
Marc Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
X
Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
retrait de Ali (code 8)
recherche de Isabelle (code 1)
X
Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
X
Paule Lola Isabelle Jo Izabelle Michle
X
Jeanne
1 2 3 4 5 6 7 8 9
35
Rsolution interne des collisions
(suite)
Deuxime solution: on partitionne le tableau en
deux :
- une zone d'adressage primaire
- une zone de dbordement
Algorithme d'ajout d'un lment entr en collision :
rechercher une place libre dans la zone de
dbordement et y placer l'lment entr en
collision
36
Exemple
Ajout de Lola (code associ par h
5
: 2)
puis de Isabelle (code associ par h
5
: 1)
Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
Lola Isabelle
10 11 12 13 14 15
Zone de
dbordement
( la suite
du tableau)
37
Recherche


1) on calcule le code associ cet lment x par la
fonction d'adressage, soit p

2) on compare le contenu de la p-ime case de la table
avec l'lment x : si identit, la recherche est positive,
sinon on mne une recherche squentielle dans la
zone de dbordement du tableau
38
et retrait

1) on calcule le code associ cet lment x par la
fonction d'adressage, soit p

2) on compare le contenu de la p-ime case de la table
avec l'lment x :
si identit, on le supprime puis on place dans cette
case une marque pour indiquer que l'lment
supprim a pu provoquer d'ventuelles collisions
si non identit, poursuivre la recherche
squentiellement en cas d'ventuelles collisions,
dans la zone de dbordement du tableau

39
Exemples
Recherche de Ali (h
5
: 8), puis Lola (h
5
: 2)
Retrait de Marc (h
5
: 1)
Recherche Isabelle (h
5
: 1)

Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
Lola Isabelle
10 11 12 13 14 15
40
Mthodes de rsolution externe des
collisions
"Externes " car on alloue des zones de stockage
supplmentaires

Le tableau contient, pour un code donn, deux
informations :
- une place de rangement d'un lment (principal) ;
- une liste de dbordement pour les lments entrs
en collision avec l'lment prcdent

41
Ajout dun lment

Algorithme d'ajout d'un lment entr en collision :
- Crer la liste de dbordement associe ce code si
celle-ci n'existe pas encore,
- puis ajouter cette liste le nouvel lment

Exemple (avec h
5
): ajout de Lola (code 2)
Lola
Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
42
Exemples (suite)

Lola
ajout de Isabelle (1)
Isabelle
Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
ajout de Jos (1)
Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
Isabelle
Jos
Lola
43
Recherche dun lment

1) on calcule le code associ cet lment x par la
fonction d'adressage, soit p

2) on compare le contenu de la premire information de
la p-ime case de la table avec l'lment x
si identit, la recherche est positive ;
sinon, on mne une recherche squentielle dans
la liste associe
recherche de Michle (7),
puis Isabelle (1)
Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
Jos
Lola
Isabelle
44
Retrait dun lment

1) on calcule le code associ cet lment x par la fonction
d'adressage, soit p

2) on compare le contenu de la premire information de la p-ime
case de la table avec l'lment x
si identit, on retire llment et on le remplace par l'l-
ment plac en tte de la liste associe, quand elle existe ;
sinon on mne une recherche squentiellement dans la
liste associe, avec retrait si la recherche est positive
retrait de Michle (7),
puis Lola (2) et enfin Marc (1)
Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
Isabelle
Jos
Lola
45
Algorithmes de la mthode
d'adressage dispers avec rsolution
externe
type Info2 = agrgat
principal : chane {premire chane associe un code donn}
dbord : Liste {objet Liste dont l'information est une chane}
fin

fonction code (uneChane) retourne (entier)
{retourne la valeur donne par la fonction dadressage}
paramtre (D) uneChane : chane
46
Procdure ajout (table, laChane)
{ajoute l'lment laChane dans une table, par adressage dispers, avec
rsolution externe des collisions}
paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2
(D) laChane : chane
variables ok: boolen
ind: entier
dbut
ind code(laChane)
si table[ind].principal = " "
alors {c'est la premire occurrence de ce code d'adressage}
table[ind].principal laChane
sinon {il y a collision: la place principale est dj occupe, do
ajout dans la liste de dbordement,en tte}
table[ind].dbord.premier()
table[ind].dbord.insreAvant(laChane)
fsi
fin
47
Fonction recherche (table, laChane) retourne (boolen)
{recherche si l'lment laChane est prsent dans une table, par adressage
dispers, avec rsolution externe des collisions}
paramtres (D) table: tableau [1, TAILLEMAX] de Info2
(D) laChane : chane
variables trouv, ok: boolens; ind : entier
dbut
ind code(laChane)
trouv table[ind].principal = laChane
si non trouv {recherche de laChane dans la liste de dbordement}
alors table[ind].dbord.premier()
tant que non trouv et
non table[ind].dbord.horsListe() faire
trouv (table[ind].dbord.info() = laChane)
table[ind].dbord.suivant()
ftq
fsi
retourne (trouv)
fin
48
Fonction retrait (table, laChane) retourne boolen
{retire, si possible, llment laChane dune table construite par adressage
dispers avec rsolution externe des collisions}
paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2
(D) laChane : chane
variables ok : boolen; ind : entier
dbut
ind code(laChane)
trouv (table[ind].principal = laChane)
si trouv {alors retrait de laChane du champ principal de la table}
alors retraitPrincipal (table, laChane, ind)
sinon {recherche, et ventuel retrait, de laChane dans la liste de
dbordement}
ok rechercheRetraitDeborde (table, laChane, ind)
fsi
retourne (ok)
fin
49
Procdure retraitPrincipal (table, laChane, ind)
{retire llment laChane du champ Principal du code adresse ind; ce champ
reoit la valeur de tte de la liste de dbordement si possible}
paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2
(D) laChane : chane; ind : entier
variables elt : Info2; ind : entier
dbut
si (table[ind].dbord.vide()) {il ny a pas eu de collision sur ce code}
alors {ce code nadresse plus aucune chane}
table[ind].principal " "
sinon {on rcupre llment en tte de liste de dbordement}
table[ind].dbord.premier() ; elt table[ind].dbord.info()
{pour mettre sa valeur dans le champ principal}
table[ind].principal elt
{et puis on retire la cellule de tte de la liste de dbordement}
table[ind].dbord.supprimer()
fsi
fin
50
Fonction rechercheRetraitDborde(table, laChane,ind)
{recherce et retire, si possible, llment laChane de la liste de dbordement du
code adresse ind}
paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2
(D) laChane : chane; ind : entier
variable trouv : boolen
dbut
table[ind].dbord.premier()
trouv faux
{recherche de laChane dans la !iste de dbordement}
tant que non trouv et non table[ind].dbord.horsListe() faire
trouv (table[ind].dbord.info() = laChane )
si non trouv alors table[ind].dbord.suivant()
ftq
{si trouv, alors retrait dans la liste de dbordement de la table}
si trouv
alors table[ind].dbord.supprimer() {le curseur est plac sur laChane}
retourne (trouv)
fin
2003-2004 Algorithmique 6 : Recherche,
complexit, tris
51
Complexit des algorithmes

2003-2004 Algorithmique 6 : Recherche, complexit, tris 52
Complexit des algorithmes
Complexit temporelle, complexit spatiale
cot en temps: temps ncessaire l'excution
cot en espace: espace mmoire ncessaire
Pire des cas, complexit moyenne
- la complexit dans le pire des cas n'est pas ncessairement une bonne
indication du cot en pratique (exemple de la mthode du simplexe)
- comment estimer le cas moyen ?
tude a priori, bancs d'essai et valuation a posteriori
- tude thorique
- tude pratique de l'algorithme implment, bancs d'essai

2003-2004 Algorithmique 6 : Recherche, complexit, tris 53
Complexit d'un problme, complexit dun
algorithme
contraintes sur un problme
par exemple, recherche d'un lment dans un tableau de n
lments non tris : si l'lment n'est pas prsent, n
comparaisons seront ncessaires pour le constater
Attention: si le tableau est tri, une seule peut tre
suffisante !
- parmi les diffrents algorithmes possibles, certains sont meilleurs que
d'autres
- la comparaison des pires des cas peut ne pas tre une bonne indication

2003-2004 Algorithmique 6 : Recherche, complexit, tris 54
Complexit asymptotique
Ncessit d'tudier la complexit pour de grosses
quantits de donnes
Exemple : deux algorithmes pour une mme tche:
- A1 effectue n
2
oprations de base, A2 effectue n.log
2
n oprations
Deux machines :
- M1 effectue 2
10
(environ mille) oprations par sconde
- M2 effectue 2
20
(environ un million d') oprations par seconde
Temps de calcul (en secondes) :

2003-2004 Algorithmique 6 : Recherche, complexit, tris 55
M1 M2
A1 A2 A1 A2
n = 2
10
2
10
10 1 < 0,01
n = 2
20
2
30
20. 2
10
2
20
20
Complexit asymptotique (2)
2003-2004 Algorithmique 6 : Recherche, complexit, tris 56
Rapidit de croissance compare
de certaines fonctions usuelles

2003-2004 Algorithmique 6 : Recherche, complexit, tris 57
Calcul de la complexit dun algorithme
Calcul de la valeur d'un polynme en un point
1. p a[0]
2. pour i 1 n faire {puissance(a, n) retourne a
n
}
3. xpi puissance (x , i)
4. p p + a[i]* xpi
fpour
Nombre de multiplications
en 3 --> 1+2+3+...+ (n-1) = (n-l)n/2
en4 --> n
Nombre d'additions en 4 --> n
soit au total: n(n + 3)/2 < n
2
pour n > 3.
2003-2004 Algorithmique 6 : Recherche, complexit, tris 58
Notations utilises
Grand O
f(n) = 0(g(n)) s'il existe C> 0 et n
o
> 0 tels que
f(n) C. g(n) pour tout n n
o

Grand omga
f(n) = (g(n)) s'il existe C> 0 et n
o
> 0 tels que
f(n) C. g(n) pour tout n n
o

Grand thta
f(n) = (g(n)) s'il existe C1 et C2 > 0 et n
o
> 0 tels que
C1.g(n) f(n) C2. g(n) pour tout n n
o



2003-2004 Algorithmique 6 : Recherche, complexit, tris 59
Exemples

f(n) = O(1) f est majore
f(n) = (1) f est minore
3n+2 = O(n) 3n+3 = O(n)
100n+6 = O(n)
10n
2
+4n+2=O(n
2
) 3n+3 = O(n
2
)
1000n
2
+ 100 n -6 = O(n
2
) 10n
2
+4n+2= O(n
4
)
6*2
n
+ n
2
= O(2
n
)
----> c'est la plus petite fonction g(n) qui est
intressante
2003-2004 Algorithmique 6 : Recherche, complexit, tris 60
Exemples (suite)
3n+3 = (n)
100n+6 = (n)
10n
2
+4n+2= (n
2
)
6*2
n
+ n
2
= (n
2
) 6*2
n
+ n
2
= (n)
6*2
n
+ n
2
= (1)
----> c'est la plus grande fonction g(n) qui est
intressante

2003-2004 Algorithmique 6 : Recherche, complexit, tris 61
Temps dexcution des algorithmes
Temps constant (rares algorithmes, cf. adressage
dispers) O(1)
Temps logarithmique (exemple: recherche
dichotomique) O(log
2
n)
Temps linaire (exemple: recherche squentielle) O(n)
Temps polynomial O(n
k
) (coteux si k dpasse 3)
- quadratique O(n
2
)
- cubique O(n
3
)
Temps exponentiel O(c
n
) ( viter en gnral)

2003-2004 Algorithmique 6 : Recherche, complexit, tris 62
Comparaison des complexits d'algorithmes de la
mme classe

Calcul de la valeur d'un polynme en un point (1)
p a[0]
pour i 1 n faire
xpi puissance(x, i)
p p + a[i]* xpi
fpour
n(n+1)/2 multiplications, n additions : algorithme en O(n
2
)
2003-2004 Algorithmique 6 : Recherche, complexit, tris 63

Calcul de la valeur d'un polynme en un point (2)
p a[0]
xpi 1
pour i 1 n faire
xpi xpi * x
p p + a[i]* xpi
fpour
2n multiplications, n additions : algorithme en O(n)

2003-2004 Algorithmique 6 : Recherche, complexit, tris 64
Calcul de la valeur d'un polynme en un point (3)
p a[n]
pour i n - 1 0, pas -1 faire
p p*x + a[i]
fpour

n multiplications, n additions algorithme en O(n)

Complexit optimale pour cette classe d'algorithmes :
en O(n)

2003-2004 Algorithmique 6 : Recherche, complexit, tris 65
Calcul de la complexit dalgorithmes de recherche simples
Oprations lmentaires retenues: les
comparaisons
1. Recherche squentielle dans un tableau non
tri
- complexit au pire n comparaisons
- complexit moyenne n/2 comparaisons
algorithme en O(n)
2. Recherche squentielle dans un tableau tri
- complexit au pire n comparalsons
- complexit moyenne n/2 comparaisons
algorithme en O(n)

2003-2004 Algorithmique 6 : Recherche, complexit, tris 66
Recherche dichotomique (dans un tableau tri 1)
- complexit au pire = complexit moyenne =
nombre p d'intervalles considrs
Exemple avec n = 8 = 2
3
tableau de 8 lments

niveau 0
niveau 1
niveau 2
niveau 3
Profondeur de larbre de dcision de lordre de log
2
n :
complexit algorithmique en O(log
2
n)
2003-2004 Algorithmique 6 : Recherche,
complexit, tris
67
Tris

2003-2004 Algorithmique 6 : Recherche, complexit, tris 68
Tris
Donnes dans un ensemble d'lments S muni d'un ordre total
ordre | a < a (rflexif)
partiel | a < b et b < c => a < c (transitif)
| a ~ b et b < a => a = b (antisymtrique)
total | a,b a=b OU a<b OU b<a (total)

Problme du tri
lments a
l
, ..., a
n
~ S donns
trouver une permutation p: { 1, . . ., n} { 1, . . .,n} telle que
a
p(1)
a
p(n)

En gnral, on s'intresse plutt au rsultat de l'application de p

2003-2004 Algorithmique 6 : Recherche, complexit, tris 69
Tris internes et tris externes
- internes: l'ensemble des donnes peut tre trait en mmoire
centrale
- externes: on opre sur une partie des donnes seulement
Tris d'entiers: mthode des seaux
trier: des entiers entre 1 et m
principe:
- on cre m files d'attente vides numrotes 0, , m-1
- on parcourt linairement les donnes, et on place a
i

dans la file numrote a
i

- on place les files d'attente bout bout

2003-2004 Algorithmique 6 : Recherche, complexit, tris 70
Exemple m = 10, 4 7 3 2 8 1 5



Rsultat: 1, 2, 3, 4, 5,
Estimation du cot :
- chaque lment peut tre plac dans une file en temps
constant, d'o O(n) pour les n lments ;
- concatnation de m files en O(m) ;
- si m = 0(n), cot total en O(n).

1 2 3 4 5 7 8
0 1 2 3 4 5 6 7 8 9
2003-2004 Algorithmique 6 : Recherche, complexit, tris 71
Cette mthode peut tre gnralise des k-uplets d'entiers
munis de l'ordre lexicographique, et plus gnralement des
chanes (de longueur variable):
(s
1
,..., s
p
) < (t
1
,..., t
q
) si et seulement si
ou bien p < q et s
i
= t
i
pour 1 i p (s est un prfixe de t);
ou bien il existe j tel que s
i
< t
j
et s
i
= t
i
pour tout i < j.
Exemples:
634 < 63472 tri < triage
64589 < 647 seau < selle

Pour des suites de k-uplets dont chaque composante est un entier
entre 0 et m-l, on obtient un algorithme de cot O((m+n)k).

2003-2004 Algorithmique 6 : Recherche, complexit, tris 72
Cas gnral:
- on trie des lments quelconques munis d'un ordre (total)
- la seule opration disponible est la comparaison de deux lments

Exemple: tri de trois lments a, b, c


a<b
b<c
a<c
a<c b<c
a, b, c
a, c, b
b, a, c
c, a, b b, c, a c, b, a
2003-2004 Algorithmique 6 : Recherche, complexit, tris 73
Estimation du cot
Arbre binaire de hauteur h => au plus 2
h
feuilles

Thorme Un arbre de dcision pour n lments a une hauteur suprieure ou
gale log(n!).
- En effet, un arbre de dcision doit avoir au moins autant de feuilles que de
rsultats possibles, c'est--dire n! feuilles au moins. Donc la hauteur de cet arbre
est log(n!)

Estimation
Formule de Stirling: n! approxim par (n/e)
n
, donc le nombre de tests ncessaires est
minor par n(logn - log e) = nlog n -1,44n
=> on ne peut pas esprer faire mieux que O(n log n)

2003-2004 Algorithmique 6 : Recherche, complexit, tris 74
Mthodes de tri lmentaires (1)
Tri par slection
Donnes: un tableau de n lments trier
Principe: pour chaque position successive dans le tableau, on cherche l'lment
qui occupera cette position dans le tableau tri, et on l'y place en permutant
cet lment avec l'lment courant.

liste trie
liste trie
case courante
devrait se trouver
dans la case courante
reste trier
reste trier
2003-2004 Algorithmique 6 : Recherche, complexit, tris 75

20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19
2003-2004 Algorithmique 6 : Recherche, complexit, tris 76
Algorithme de tri par slection
procdure triSlection (tab, nbre)
{recherche pour chaque case l'lment qui doit y tre affect et y place cet
lment}
paramtre s (D/R) tab: tableau [1, MAX] d'entiers
(D) nbre: entier
variables indDuMin, position: entier
dbut
pour position 1 nbre -1 faire
indDuMin slection(tab, nbre, position,nbre)
{recherche lindice de llment minimum entre position et la fin de tab}
changer(tab, position, indDuMin) {change deux positions dans tab}
fpour
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 77
Algorithme de tri par slection (2)
fonction slection (tab, nbre, indDbut,indFin) retourne(entier)
{recherche l'indice de l'lment minimum de tab entre indDbut et indFin}
paramtre s (D) tab: tableau [1, MAX1 d'entiers
(D) nbre, indDbut, indFin : entiers
variables indDuMin, ind: entiers
dbut
indDuMin indDbut
pour ind (indDbut + 1) indFin faire
si tab[indDuMin] > tab[ind] alors indDuMin ind
fpour
retourner(indDuMin)
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 78
Mthodes de tri lmentaires (1)
Tri par insertion
Donnes: un tableau de n lments trier
Principe: la partie gauche est trie; on essaie d'insrer chaque nouvel lment
dans cette liste, en dcalant d'un cran la partie droite restante.
liste trie
liste trie
place du nouveau
reste trier
nouveau
reste
reste
2003-2004 Algorithmique 6 : Recherche, complexit, tris 79

20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19
2003-2004 Algorithmique 6 : Recherche, complexit, tris 80
Algorithme de tri par insertion
procdure triInsertion (tab, nbre)
{recherche pour chaque lment la case o il doit tre affect et y place cet
lment}
paramtre s (D/R) tab: tableau [1, MAX] d'entiers
(D) nbre: entier
variables indVal, numPlace: entiers
dbut
pour indVal 2 nbre faire
{recherche de 1'endroit o doit s'insrer la valeur place en indVal}
numPlace Insertion(tab, nbre, indVal)
{si la valeur n'est pas insrer en fin de zne trie, l'insrer la place voulue}
si (numPlace indVal ) alors
{libre la position numPlace par dcalage et y place tab[indVal]}
dcalerEtPlacer(tab, numPlace, indVal)
fsi
fpour
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 81

procdure dcalerEtPlacer(tab, nPlace, indVal)
{libre la position nPlace par dcalage et y place tab[indVall}
paramtre s (D/R) tab: tableau [1, MAX] d'entiers
(D) nPlace, indVal: entiers
variables indDuMin, ind, deCt: entiers
dbut
deCt tab[indVal]
{faire un trou au rang nPlace en dcalant les valeurs qui suivent d'un rang vers la droite}
pour ind indVal nPlace + 1 pas -1 faire tab[ind]
tab[ind-1] fpour
tab[nPlace] deCt
fin
2003-2004 Algorithmique 6 : Recherche, complexit, tris 82
Simulation du dcalage

2003-2004 Algorithmique 6 : Recherche, complexit, tris 83
Deux algorithmes pour la recherche de place

1. Recherche squentielle dans un tableau tri

fonction insertion (tab, nbre, indV) retourne(entier)
{renvoie la place laquelle il faut affecter tab[indV] pour respecter l'ordre}
paramtre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, indV: entiers
variables dpass: boolen; i, val, nbValTries: entiers
dbut
val tab[indV]; nbValTries indV - 1
dpass faux; i 0
tant que i < nbValTries ET non dpass faire
ii+ 1
dpass (tab[i] > val)
ftq
si dpass alors retourne (i) sinon retourne (i+l) fsi
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 84
Simulation du tri par insertion squentielle


2003-2004 Algorithmique 6 : Recherche, complexit, tris 85
2. Recherche dichotomique

fonction insertion (tab, nbre, indV) retourne (entier)
{renvoie la place laquelle ilfaut affecter tab[indV] pour respecter l'ordre}
paramtre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, indV: entiers
variables id, if, im, val: entiers
dbut
val tab[indV]; id 0 if indV + 1
tant que if - id > 1 faire
im (id + if)/2
si (tab[im] > val) alors if im sinon id im fsi
ftq
retourne (id + 1)
fin

2003-2004 Algorithmique 6 : Recherche, complexit, tris 86
Simulation du tri par insertion dichotomique


2003-2004 Algorithmique 6 : Recherche, complexit, tris 87
Complexit des tris lmentaires
Cot du tri par slection
- on fait (n-l) + (n-2) + ... + 1 tests de comparaison, soit en tout:
n(n-l)/2 comparaisons
- on peut tre amen faire n-1 changes
=> algorithme en O(n
2
)

Cot du tri par insertion:
- en moyenne n
2
/4 comparaisons
- n
2
/8 changes deux fois plus dans le pire des cas
=> ici encore algorithme en O(n
2
)

2003-2004 Algorithmique 6 : Recherche, complexit, tris 88
Tris indirects
Problme : tri sur diffrents critres
On veut mmoriser les rsultats des tris par
nom, par taille, par date

Rep[1] Rep[2] Rep[3]
nom toto.C toto.o toto
taille 20 457 3 456 5 248
date 12.04.01 13.04.01

15.04.1
2003-2004 Algorithmique 6 : Recherche, complexit, tris 89
Solution : utilisation
de tableaux dindices
On utilise trois tableaux diffrents qui
contiennent non les agrgats, mais les
indices des agrgats dans le tableau
3 1 2
triNom
triTaille
triDate
2 3 1
1 2 3
2003-2004 Algorithmique 6 : Recherche, complexit, tris 90
Tris indirects (suite)
Dans lalgorithme de tri, la comparaison de
deux agrgats se fait relativement un
critre (nom, taille, date) :
prcde(i, j, Critre, tab)
fonction qui retourne vrai si le fichier tab[i]
prcde le fichier tab[j] relativement au
critre Critre
2003-2004 Algorithmique 6 : Recherche,
complexit, tris
91
Fin du volume 6