Está en la página 1de 91

iUT

ORSAY

Universit Paris XI
I.U.T. d'Orsay
Dpartement Informatique
Anne scolaire 2003-2004

Algorithmique : Volume 6

Recherche
Adressage dispers
Tris
Complexit

Ccile Balkanski, Nelly Bensimon, Grard Ligozat

2003-2004

Algorithmique 6 : Recherche,

Recherche

2003-2004

Algorithmique 6 : Recherche, complexit,


tris

Recherche
Problmegnralabstrait
ensembledevaleursE,lmenta;estcequeaE?
rponse:boolen(x){xE|x=a}

plusgnralement
existetilxvrifiantcertainscritres

(x){xE|(x)}

trouvertouslesxsatisfaisantcertainscritres

{xE|(x)} (basesdedonnes)

2003-2004

Algorithmique 6 : Recherche,

Rechercheeninformatique
Onnetravaillepassurdesensemblesmathmatiques,
maissurdesstructuresdedonnesparticulires
Lesdonnespeuventtredenaturecomplexe
(agrgats,classes)
Exemples:
tableau
20 18 9

24 13 27 2

32 7

12 36 15 17 19

tableau tri
2

2003-2004

12 13 15 17 18 19 20 24 27 32 36

Algorithmique 6 : Recherche,

arbre binaire de recherche


20
24

18

27

9
19

32

13

2
8
7

2003-2004

36

15
12
17

Algorithmique 6 : Recherche,

Tri de donnes complexes


Exemplededonnecomplexe:
typeEtudiant=agrgat
nom:chane
ge:entier
classement:entier
photo:fichier_GIF
fin
onpeuttrierparnom(ordrealphabtique),parge,par
classement
pasparphoto
cls,clsprimaires exaequo,mmege
2003-2004

Algorithmique 6 : Recherche,

Rechercheettypededonnes
Onutilisediverstypesdedonnessurlesquelles
onfaitdesoprationsdebase:

ajout
suppression
misejour
consultation

Chaquestructureadesavantagesetdes
inconvnients:
tableau,tableautri,arbrebinaire,listechane,
etc.
2003-2004

Algorithmique 6 : Recherche,

Recherchesquentielle
fonctionrechSeq(tab,nbre,val)retourne(boolen)
{renvoieVRAIsivalestdanstab,FAUXsinon}
paramtres(D)tab:tableau[1,MAX]d'entiers
(D)nbr,val:entier
variablestrouv:booleni:entier
dbuttrouvfaux
i0
tantquenontrouvETi<nbrfaire
ii+1
trouv(tab[i]=val)
ftq
retourne(trouv)
fin

2003-2004

Algorithmique 6 : Recherche,

fonctionrechSeq(tab,nbre,val)retourne(entier)
{renvoielepremierindiceosetrouvevaldanstab,1sinon}
paramtres (D)tab:tableau[1,MAX]d'entiers
(D)nbr,val:entier
variables
trouv:booleni:entier
dbut
trouvfaux
i0
tantquenontrouvETi<nbrfaire
ii+1
trouv(tab[i]=val)
ftq
sitrouvalorsretourne(i)sinonretourne(1)fsi
fin

2003-2004

Algorithmique 6 : Recherche,

Rechercheaveccritres
procdurerechLesMin(tab_d,nbre_d,tab_r,nbre_r,val)
{renvoiedansletableautab_rleslmentsdetab_dval}
paramtres(D)tab_d:tableau[1,MAX]d'entiers,
nbr_d,val:entier
(R)tab_r:tableau[1,MAX]d'entiers,nbr_r:entier
variablesid,ir:entiers
dbutir0
pouridlnbre_dfaire
si(tab_d[id]val)
alorsirir+1
tab_r[ir]tab_d[id]
fsi
fpour
fin

2003-2004

Algorithmique 6 : Recherche,

10

fonctionrechMin(tab,nbre)retourne(entier)
{renvoielapluspetitevaleurcontenuedansletableautab}

paramtres(D)tab:tableau[1,MAX]d'entiers,
nbr:entier
variablesi,min:entiers
dbut
imintab[l]
pourid2nbrefaire
si(tab[i]<min)
alorsmintab[i]
fsi
fpour
retourne(tab[min])
fin

2003-2004

Algorithmique 6 : Recherche,

11

fonctionrechPosMin(tab,nbre)retourne(entier)
{retournele(dernier)indicedelapluspetitevaleurdutableautab}

paramtres(D)tab:tableau[1,MAX]d'entiers,nbr:entier
variablesi,imin,min:entiers
dbut
mintab[1]
imin1
pourid2nbrefaire
si(tab[i]min)
alorsmintab[i]
imini
fsi
fpour
retourne(imin)
fin

2003-2004

Algorithmique 6 : Recherche,

12

Recherchesquentielledanstableauordonn

fonctionrechSeq(tab,nbre,val)retourne(entier)

{renvoielepremierindiceosetrouvevals'ilestdanstab,1sinon}

paramtres(D)tab:tableau[1,MAX]d'entiers
(D)nbr,val:entier
variables
trouv,dpass:boolens;i:entier
dbut
trouvfaux;dpassfaux;i0
tantquenon(trouvOUdpass)ETi<nbrfaire
ii+1
trouv(tab[i]=val)
dpass(tab[i]>val)
ftq
sitrouvalorsretourne(i)sinonretourne(1)
fin
2003-2004 Algorithmique 6 : Recherche,

13

Recherchedichotomique
Rappel:lesvaleursdoiventtretries!
2

12 13 15 17 18 19 20 24 27 32 36

Principe:
onviseaumilieudutableau
sil'lmentvisestplusgrandqueval,ilsuffit
decherchergauche;s'ilestplusgrand,il
suffitdechercherdroite
2003-2004

Algorithmique 6 : Recherche,

14

12 13 15 17 18 19 20 24 27 32 36

12 13 15 17 18 19 20 24 27 32 36

2003-2004

Algorithmique 6 : Recherche,

15

12 13 15 17 18 19 20 24 27 32 36

12 13 15 17 18 19 20 24 27 32 36

2003-2004

Algorithmique 6 : Recherche,

16

Recherchedichotomique
fonctionrechDicho(tab,nbre,val)retourne(entier)

{renvoieunindiceosetrouvevals'ilestdanstab,1sinon}

paramtres
(D)tab:tableau[1,MAX]d'entiers
(D)nbr,val:entier
variablestrouv:boolen;id,if,im:entiers
dbut
trouvfaux;id0;ifnbre+1
tantquenontrouvET(ifid)>1faire
im(id+if)/2
trouv(tab[im]=val)
si(tab[im]>val) alorsifim
sinonidim
fsi
ftq
si(id=0)
alorsretourne(1)
sinonsi(tab[id]=val)alorsretourne(id)
sinonretourne(1)

fsi
fsi
fin 2003-2004
Algorithmique 6 : Recherche,
17

Recherchedichotomique:variantel
fonctionrechDicho(tab,nbre,val)retourne(entier)
{renvoieleplusgrandindiceosetrouvevals'ilestdanstab,1sinon}
paramtres(D)tab:tableau[1,MAX]d'entiers
(D)nbr,val:entier
variablesid,if,im:entiers
dbut
id0;ifnbre+1
tantque(ifid)>1faire
im(id+if)/2
si(tab[im]>val)alorsifim
sinonidim
fsi
ftq
si(id=0)alorsretourne(1)
sinonsi(tab[id]=val)alorsretourne(id)
sinonretourne(1)
fsi
fsi
fin

2003-2004

Algorithmique 6 : Recherche,

18

Recherchedichotomique:variante2
fonctionrechDicho(tab,nbre,val)retourne(entier)
{renvoielepluspetitindiceosetrouvevals'ilestdanstab,1sinon}
paramtres(D)tab:tableau[1,MAX]d'entiers
(D)nbr,val:entier
variablesid,if,im:entier
dbut
id0;ifnbre+1
tantque(ifid)>1faire
im(id+if)/2
si(tab[im]val)alorsifim
sinonidim
fsi
ftq
si(if=nbre+1)alorsretourne(1)
sinonsi(tab[if]=val)alorsretourne(if)

sinonretourne(1)
fsi
fsi
fin

2003-2004

Algorithmique 6 : Recherche,

19

RecherchedansunABR
fonctionrech(unAbr,val)retourne(boolen)
{renvoieVRAlsivalsetrouvedansl'ABRunAbr,FAUXsinon}
paramtres(D)unAbr:ABR
(D)val:entier
variablestrouv:boolen;id,if,im:entiers

dbut
siunAbr.Vide()alorsretourner(FAUX)
sinonsi(unAbr.Info()=val)
alorsretourner(VRAI)
sinonsi(unAbr.Info()<val)
alorsretourner(Rech(unAbr.FD(),val))
sinonretourner(Rech(unAbr.FG(),val))
fsi
fsi
fsi
fin

2003-2004

Algorithmique 6 : Recherche,

20

Simulation de recherche
20
24

18

27

9
19

32

13

2
8
7

2003-2004

36

15
12
17

Algorithmique 6 : Recherche,

21

2003-2004

Algorithmique 6 : Recherche,

22

Adressage Dispers

2003-2004

Algorithmique 6 : Recherche, complexit,


tris

23

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

2003-2004

24

Quelques exemples de fonctions


dadressage
x : chane h1(x) = nombre de caractres de la chane
h1("Paul") = 4

h1("MmeDupont")=9

x : entier h2(x) = somme de ses chiffres dcimaux


h2(342) = 9

h2(100 340) = 8

x : entier h3(x)= nombre de bits 1 dans l'criture


binaire
h3(342) = h3(101010010) = 4

x : chane de caractres

h4(x) = somme des codes ASCII des caractres de la chane

2003-2004

25

Exemple de classement par la


fonction dadressage h1
Suite de prnoms :

- Marc, Izabelle, Paule, Jeanne, Ali, Jo, Michle


- Codes associs par h1 (nb caractres) : 4, 8, 5, 6, 3, 2, 7

Jo

Ali

Marc Paule Jeanne Michle


4

Izabelle
8

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.

2003-2004

26

Une autre fonction dadressage


h5 associe c1ck la somme :
- (Somme (rang de ci dans lalphabet * i) modulo 9) +1

Suite de prnoms : Marc, Izabelle, Paule, Jeanne, Jo,


Michle

- h5 (Marc) = ((13*1+1*2+18*3+3*4) mod 9) + 1 = 81 mod 9 + 1 = 1


- h5 (Jeanne) = ((10*1+5*2+1*3+14*4+14*5+5*6) mod 9) + 1
= 179 mod 9 + 1 = 9
h5 (Paule) = ((16*1+1*2+21*3+12*4+5*5) mod 9) + 1 = 1 mod 9 + 1 = 2

Marc Paule
1

Jo
3

2003-2004

Izabelle Michle
6

Jeanne
8

27

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.
2003-2004

28

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

2003-2004

29

Exemples (avec h5 )
Recherche de "Isabelle"

- code associ par h5 : 1 et tabAdrDisp [1] "Isabelle "


recherche ngative

Ajout de "Ali"

- code associ par h5 : 8 ; tabAdrDisp [8] : " "


ajout possible

Ajout de "Lola"

- code associ par h5 : 2 ; or tabAdrDisp [2] : "Paule"


collision

Marc Paule
1

Jo
3

2003-2004

Izabelle Michle
6

Ali

Jeanne

30

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 h5 : 2) et "Isabelle" (avec h5 : 1)

Marc Paule Lola Isabelle Jo Izabelle Michle Ali


1

2003-2004

Jeanne
9

31

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)
2003-2004

32

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)
2003-2004

33

Exemples (avec h5 )
Marc Paule Lola
1

X
1

X
1

X
1

Isabelle
4

2003-2004

Isabelle
4

Jo Izabelle Michle Ali


5

Jo Izabelle Michle Ali


5

retrait de Ali (code 8)

Paule Lola
2

recherche de Isabelle (code 1)

Paule Lola Isabelle


2

Jo Izabelle Michle Ali

retrait de Marc (code 1)

Paule Lola
2

Isabelle

Jo Izabelle Michle
5

Jeanne
9

Jeanne
9

Jeanne
9

Jeanne

34

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
2003-2004

35

Exemple
Ajout de Lola (code associ par h5 : 2)
puis de Isabelle (code associ par h5 : 1)
Marc

Paule

Lola

Isabelle

10

11

2003-2004

Jo
3

12

13

Izabelle Michle

14

15

Ali

Jeanne

Zone de
dbordement
( la suite
du tableau)

36

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

2003-2004

37

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
2003-2004

38

Exemples
Marc

Paule

Lola

Isabelle

10

11

Jo
3

12

13

14

Izabelle Michle
6

Ali

Jeanne

15

Recherche de Ali (h5 : 8), puis Lola (h5 : 2)


Retrait de Marc (h5 : 1)
Recherche Isabelle (h5 : 1)
2003-2004

39

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
2003-2004

40

Ajout dun lment


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

Exemple (avec h5): ajout de Lola (code 2)


Marc

Paule

Jo
3

Izabelle Michle
6

Ali

Jeanne

Lola
2003-2004

41

Exemples (suite)
ajout de Isabelle (1)
Marc

Paule

Isabelle

Lola

Marc

Paule

Jos

Lola

Isabelle2003-2004

Jo
3

Izabelle Michle
6

Ali

Jeanne

Ali

Jeanne

ajout de Jos (1)


Jo
3

Izabelle Michle
6

42

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
Marc

Paule

Jos

Lola

Isabelle2003-2004

Jo
3

Izabelle Michle
6

Ali

Jeanne

recherche de Michle (7),


puis Isabelle (1)

43

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'lment 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
Marc

Paule

Jos

Lola

Isabelle2003-2004

Jo
3

Izabelle Michle
6

Ali

Jeanne

retrait de Michle (7),


puis Lola (2) et enfin Marc (1)
44

Algorithmes de la mthode
d'adressage dispers avec rsolution
externe
type Info2 = agrgat
principal : chane
dbord : Liste

{premire chane associe un code donn}


{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


2003-2004

45

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 2003-2004

46

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)
2003-2004
47
fin

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

2003-2004

48

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

2003-2004

49

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

50

Complexit des algorithmes

2003-2004

Algorithmique 6 : Recherche, complexit,


tris

51

Complexitdesalgorithmes
Complexittemporelle,complexitspatiale
cotentemps:tempsncessairel'excution
cotenespace:espacemmoirencessaire

Piredescas,complexitmoyenne
lacomplexitdanslepiredescasn'estpasncessairementunebonne
indicationducotenpratique(exempledelamthodedusimplexe)
commentestimerlecasmoyen?

tudeapriori,bancsd'essaietvaluationaposteriori
tudethorique
tudepratiquedel'algorithmeimplment,bancsd'essai

2003-2004

Algorithmique 6 : Recherche,

52

Complexitd'unproblme,complexitdun
algorithme
contraintessurunproblme
parexemple,recherched'unlmentdansuntableauden
lmentsnontris:sil'lmentn'estpasprsent,n
comparaisonsserontncessairespourleconstater

Attention:siletableauesttri,uneseulepeuttre
suffisante!
parmilesdiffrentsalgorithmespossibles,certainssontmeilleursque
d'autres
lacomparaisondespiresdescaspeutnepastreunebonneindication

2003-2004

Algorithmique 6 : Recherche,

53

Complexitasymptotique
Ncessitd'tudierlacomplexitpourdegrosses
quantitsdedonnes
Exemple:deuxalgorithmespourunemmetche:
A1effectuen2oprationsdebase,A2effectuen.log2noprations

Deuxmachines:
M1effectue210(environmille)oprationsparsconde
M2effectue220(environunmilliond')oprationsparseconde

Tempsdecalcul(ensecondes):

2003-2004

Algorithmique 6 : Recherche,

54

Complexitasymptotique(2)
M1
A1

M2
A2

A1

A2

n=210

210

10

<0,01

n=220

230

20.210

220

20

2003-2004

Algorithmique 6 : Recherche,

55

Rapiditdecroissancecompare
decertainesfonctionsusuelles

2003-2004

Algorithmique 6 : Recherche,

56

Calculdelacomplexitdunalgorithme

Calculdelavaleurd'unpolynmeenunpoint
1.pa[0]
2.pouri1nfaire{puissance(a,n)retournean}
3.xpipuissance(x,i)
4. pp+a[i]*xpi
fpour
Nombredemultiplications
en3>1+2+3+...+(n1)=(nl)n/2
en4>n
Nombred'additions en4>n
soitautotal:n(n+3)/2
<n2 pourn>3.
2003-2004

Algorithmique 6 : Recherche,

57

Notationsutilises
GrandO

f(n)=0(g(n))s'ilexisteC>0etno>0telsque
f(n)C.g(n)pourtoutnno
Grandomga

f(n)=(g(n))s'ilexisteC>0etno>0telsque
f(n)C.g(n)pourtoutnno

Grandthta

f(n)=(g(n))s'ilexisteC1etC2>0etno>0telsque
C1.g(n)f(n)C2.g(n)pourtoutnno
2003-2004

Algorithmique 6 : Recherche,

58

Exemples
f(n)=O(1)festmajore
f(n)=(1)
festminore
3n+2=O(n)
3n+3=O(n)
100n+6=O(n)
10n2+4n+2=O(n2) 3n+3=O(n2)
1000n2+100n6=O(n2)
10n2+4n+2=O(n4)
6*2n+n2=O(2n)
>c'estlapluspetitefonctiong(n)quiest
intressante
2003-2004

Algorithmique 6 : Recherche,

59

Exemples(suite)
3n+3=(n)
100n+6=(n)
10n2+4n+2= (n2)
6*2n+n2=(n2) 6*2n+n2=(n)
6*2n+n2=(1)
>c'estlaplusgrandefonctiong(n)quiest
intressante

2003-2004

Algorithmique 6 : Recherche,

60

Tempsdexcutiondesalgorithmes
Tempsconstant(raresalgorithmes,cf.adressage
dispers) O(1)
Tempslogarithmique(exemple:recherche
dichotomique) O(log2n)
Tempslinaire(exemple:recherchesquentielle)
O(n)
Tempspolynomial
O(nk)(coteuxsikdpasse3)
quadratique
O(n2)
cubique O(n3)

Tempsexponentiel
2003-2004

O(cn)(viterengnral)

Algorithmique 6 : Recherche,

61

Comparaisondescomplexitsd'algorithmesdela
mmeclasse
Calculdelavaleurd'unpolynmeenunpoint(1)
pa[0]
pouri1nfaire
xpipuissance(x,i)
pp+a[i]*xpi
fpour
n(n+1)/2multiplications,nadditions:algorithmeenO(n2)
2003-2004

Algorithmique 6 : Recherche,

62

Calculdelavaleurd'unpolynmeenunpoint(2)
pa[0]
xpi1
pouri1nfaire
xpixpi*x
pp+a[i]*xpi
fpour
2nmultiplications,nadditions:algorithmeenO(n)

2003-2004

Algorithmique 6 : Recherche,

63

Calculdelavaleurd'unpolynmeenunpoint(3)
pa[n]
pourin10,pas1faire
pp*x+a[i]
fpour

nmultiplications,nadditionsalgorithmeenO(n)

Complexitoptimalepourcetteclassed'algorithmes:
enO(n)
2003-2004

Algorithmique 6 : Recherche,

64

Calculdelacomplexitdalgorithmesderecherchesimples

Oprationslmentairesretenues:les
comparaisons
1. Recherchesquentielledansuntableaunon
tri
complexitaupire ncomparaisons
complexitmoyenne n/2comparaisons
algorithmeenO(n)

2.Recherchesquentielledansuntableautri
complexitaupirencomparalsons
complexitmoyennen/2comparaisons
algorithmeenO(n)
2003-2004

Algorithmique 6 : Recherche,

65

Recherchedichotomique(dansuntableautri1)

complexitaupire=complexitmoyenne=
nombrepd'intervallesconsidrs

Exempleavecn=8=23tableaude8lments
niveau 0
niveau 1
niveau 2
niveau 3

Profondeur de larbre de dcision de lordre de log2n :


complexit algorithmique en O(log2n)
2003-2004

Algorithmique 6 : Recherche,

66

Tris

2003-2004

Algorithmique 6 : Recherche, complexit,


tris

67

Tris
Donnesdansunensembled'lmentsSmunid'unordretotal
ordre |
a<a (rflexif)
partiel |
a<betb<c=>a<c (transitif)
|
a~betb<a=>a=b (antisymtrique)
total |
a,ba=bOUa<bOUb<a(total)
Problmedutri
lmentsal,...,an~Sdonns
trouverunepermutation:{1,...,n}{1,...,n}telleque
aa(n)
Engnral,ons'intressepluttaursultatdel'applicationde
2003-2004

Algorithmique 6 : Recherche,

68

Trisinternesettrisexternes
internes:l'ensembledesdonnespeuttretraitenmmoire
centrale
externes:onopresurunepartiedesdonnesseulement

Trisd'entiers:mthodedesseaux
trier:desentiersentre1etm
principe:
oncremfilesd'attentevidesnumrotes0,,m1
onparcourtlinairementlesdonnes,etonplaceai
danslafilenumroteai
onplacelesfilesd'attenteboutbout
2003-2004

Algorithmique 6 : Recherche,

69

Exemplem=10,4732815
0

Rsultat:1,2,3,4,5,
Estimationducot:
- chaquelmentpeuttreplacdansunefileentemps
constant,d'oO(n)pourlesnlments;
- concatnationdemfilesenO(m);
- sim=0(n),cottotalenO(n).

2003-2004

Algorithmique 6 : Recherche,

70

Cettemthodepeuttregnralisedeskupletsd'entiers
munisdel'ordrelexicographique,etplusgnralementdes
chanes(delongueurvariable):
(s1,...,sp)<(t1,...,tq)sietseulementsi
oubienp<qetsi=tipour1ip(sestunprfixedet);
oubienilexistejtelquesi<tjetsi=tipourtouti<j.

Exemples:
634<63472
64589<647

tri<triage
seau<selle

Pourdessuitesdekupletsdontchaquecomposanteestunentier
entre0etml,onobtientunalgorithmedecotO((m+n)k).
2003-2004

Algorithmique 6 : Recherche,

71

Casgnral:
ontriedeslmentsquelconquesmunisd'unordre(total)
laseuleoprationdisponibleestlacomparaisondedeuxlments

Exemple:tridetroislmentsa,b,c

a<b
a<c

b<c

a, b, c
a, c, b

2003-2004

a<c

c, a, b

b, a, c

b<c

b, c, a

Algorithmique 6 : Recherche,

c, b, a

72

Estimation du cot

Arbrebinairedehauteurh=>auplus2 hfeuilles

ThormeUnarbrededcisionpournlmentsaunehauteursuprieureou
galelog(n!).
Eneffet,unarbrededcisiondoitavoiraumoinsautantdefeuillesquede
rsultatspossibles,c'estdiren!feuillesaumoins.Donclahauteurdecetarbre
estlog(n!)

Estimation
FormuledeStirling:n!approximpar(n/e)n,donclenombredetestsncessairesest
minorparn(lognloge)=nlogn1,44n

=>onnepeutpasesprerfairemieuxqueO(nlogn)

2003-2004

Algorithmique 6 : Recherche,

73

Mthodesdetrilmentaires(1)
Triparslection
Donnes:untableaudenlmentstrier
Principe:pourchaquepositionsuccessivedansletableau,oncherchel'lment
quioccuperacettepositiondansletableautri,etonl'yplaceenpermutant
cetlmentavecl'lmentcourant.
reste trier
liste trie

case courante

liste trie

2003-2004

devrait se trouver
dans la case courante

reste trier

Algorithmique 6 : Recherche,

74

20

18

2003-2004

24

13

27

32

12

Algorithmique 6 : Recherche,

36

15

17

75

19

Algorithmedetriparslection
procduretriSlection(tab,nbre)
{recherchepourchaquecasel'lmentquidoitytreaffectetyplacecet
lment}
paramtres(D/R)tab:tableau[1,MAX]d'entiers
(D)nbre:entier
variablesindDuMin,position:entier
dbut
pourposition1nbre1faire
indDuMinslection(tab,nbre,position,nbre)
{recherchelindicedellmentminimumentrepositionetlafindetab}
changer(tab,position,indDuMin){changedeuxpositionsdanstab}

fpour
fin

2003-2004

Algorithmique 6 : Recherche,

76

Algorithmedetriparslection(2)
fonctionslection(tab,nbre,indDbut,indFin)retourne(entier)
{recherchel'indicedel'lmentminimumdetabentreindDbutetindFin}
paramtres
(D)tab:tableau[1,MAX1d'entiers
(D)nbre,indDbut,indFin:entiers
variablesindDuMin,ind:entiers
dbut
indDuMinindDbut
pourind(indDbut+1)indFinfaire
si
tab[indDuMin]>tab[ind]alorsindDuMinind
fpour
retourner(indDuMin)
fin

2003-2004

Algorithmique 6 : Recherche,

77

Mthodesdetrilmentaires(1)
Triparinsertion
Donnes:untableaudenlmentstrier
Principe:lapartiegaucheesttrie;onessaied'insrerchaquenouvellment
danscetteliste,endcalantd'uncranlapartiedroiterestante.
place du nouveau
reste
liste trie

nouveau
reste

liste trie

2003-2004

reste trier

Algorithmique 6 : Recherche,

78

20

18

2003-2004

24

13

27

32

12

Algorithmique 6 : Recherche,

36

15

17

79

19

Algorithmedetriparinsertion
procduretriInsertion(tab,nbre)
{recherchepourchaquelmentlacaseoildoittreaffectetyplacecetlment}
paramtres
(D/R)tab:tableau[1,MAX]d'entiers
(D)nbre:entier
variablesindVal,numPlace:entiers
dbut
pourindVal2nbrefaire
{recherchede1'endroitodoits'insrerlavaleurplaceenindVal}
numPlaceInsertion(tab,nbre,indVal)
{silavaleurn'estpasinsrerenfindeznetrie,l'insrerlaplacevoulue}

si(numPlaceindVal)alors
{librelapositionnumPlacepardcalageetyplacetab[indVal]}
dcalerEtPlacer(tab,numPlace,indVal)
fsi
fpour
fin

2003-2004

Algorithmique 6 : Recherche,

80

procduredcalerEtPlacer(tab,nPlace,indVal)
{librelapositionnPlacepardcalageetyplacetab[indVall}

paramtres (D/R)tab:tableau[1,MAX]d'entiers
(D)nPlace,indVal:entiers
variablesindDuMin,ind,deCt:entiers
dbut
deCt tab[indVal]
{faireuntrouaurangnPlaceendcalantlesvaleursquisuiventd'unrangversladroite}

pourindindValnPlace+1pas1fairetab[ind]
tab[ind1]fpour
tab[nPlace] deCt
fin
2003-2004

Algorithmique 6 : Recherche,

81

Simulation du dcalage

2003-2004

Algorithmique 6 : Recherche,

82

Deuxalgorithmespourlarecherchedeplace
1.Recherchesquentielledansuntableautri
fonctioninsertion(tab,nbre,indV)retourne(entier)
{renvoielaplacelaquelleilfautaffectertab[indV]pourrespecterl'ordre}

paramtres(D)tab:tableau[1,MAX]d'entiers
(D)nbr,indV:entiers
variablesdpass:boolen;i,val,nbValTries:entiers
dbut
valtab[indV]; nbValTries indV1
dpassfaux; i0
tantquei<nbValTriesETnondpassfaire
ii+1
dpass(tab[i]>val)
ftq
sidpassalorsretourne(i)sinonretourne(i+l)fsi
fin

2003-2004

Algorithmique 6 : Recherche,

83

Simulationdutriparinsertionsquentielle

2003-2004

Algorithmique 6 : Recherche,

84

2.Recherchedichotomique

fonctioninsertion(tab,nbre,indV)retourne(entier)
{renvoielaplacelaquelleilfautaffectertab[indV]pourrespecterl'ordre}

paramtres(D)tab:tableau[1,MAX]d'entiers
(D)nbr,indV:entiers
variablesid,if,im,val:entiers
dbut
valtab[indV]; id0 ifindV+1
tantqueifid>1faire
im(id+if)/2
si(tab[im]>val)alorsifimsinonidimfsi
ftq
retourne(id+1)
fin

2003-2004

Algorithmique 6 : Recherche,

85

Simulationdutriparinsertiondichotomique

2003-2004

Algorithmique 6 : Recherche,

86

Complexit des tris lmentaires


Cotdutriparslection

onfait(nl)+(n2)+...+1testsdecomparaison,soitentout:
n(nl)/2comparaisons
onpeuttreamenfairen1changes

=>algorithmeenO(n2)

Cotdutriparinsertion:
enmoyennen2/4comparaisons
n2/8changesdeuxfoisplusdanslepiredescas

=>iciencorealgorithmeenO(n2)
2003-2004

Algorithmique 6 : Recherche,

87

Tris indirects
Problme : tri sur diffrents critres
On veut mmoriser les rsultats des tris par
nom, par taille, par date
Rep[1]

Rep[2]

nom

toto.C

toto.o

toto

taille

20 457

3 456

5 248

date

12.04.01

13.04.01

2003-2004

Rep[3]

15.04.1

Algorithmique 6 : Recherche,

88

Solution : utilisation
de tableaux dindices
On utilise trois tableaux diffrents qui
contiennent non les agrgats, mais les
indices des agrgats dans le tableau
triNom

triTaille

triDate

2003-2004

Algorithmique 6 : Recherche,

89

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,

90

Fin du volume 6

2003-2004

Algorithmique 6 : Recherche, complexit,


tris

91