ORSAY
Universit Paris XI
I.U.T. d'Orsay
Dpartement Informatique
Anne scolaire 2003-2004
Algorithmique : Volume 6
Recherche
Adressage dispers
Tris
Complexit
2003-2004
Algorithmique 6 : Recherche,
Recherche
2003-2004
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,
18
27
9
19
32
13
2
8
7
2003-2004
36
15
12
17
Algorithmique 6 : Recherche,
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
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
2003-2004
24
h1("MmeDupont")=9
h2(100 340) = 8
x : chane de caractres
2003-2004
25
Jo
Ali
Izabelle
8
Constatations :
2003-2004
26
Marc Paule
1
Jo
3
2003-2004
Izabelle Michle
6
Jeanne
8
27
28
2003-2004
29
Exemples (avec h5 )
Recherche de "Isabelle"
Ajout de "Ali"
Ajout de "Lola"
Marc Paule
1
Jo
3
2003-2004
Izabelle Michle
6
Ali
Jeanne
30
2003-2004
Jeanne
9
31
32
33
Exemples (avec h5 )
Marc Paule Lola
1
X
1
X
1
X
1
Isabelle
4
2003-2004
Isabelle
4
Paule Lola
2
Paule Lola
2
Isabelle
Jo Izabelle Michle
5
Jeanne
9
Jeanne
9
Jeanne
9
Jeanne
34
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
39
40
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
Izabelle Michle
6
42
Paule
Jos
Lola
Isabelle2003-2004
Jo
3
Izabelle Michle
6
Ali
Jeanne
43
Paule
Jos
Lola
Isabelle2003-2004
Jo
3
Izabelle Michle
6
Ali
Jeanne
Algorithmes de la mthode
d'adressage dispers avec rsolution
externe
type Info2 = agrgat
principal : chane
dbord : Liste
fin
fonction code (uneChane) retourne (entier)
{retourne la valeur donne par la fonction dadressage}
45
{ajoute l'lment laChane dans une table, par adressage dispers, avec
rsolution externe des collisions}
table[ind].dbord.premier()
table[ind].dbord.insreAvant(laChane)
fsi
fin 2003-2004
46
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
2003-2004
48
{retire llment laChane du champ Principal du code adresse ind; ce champ reoit la
valeur de tte de la liste de dbordement si possible}
table[ind].principal elt
table[ind].dbord.supprimer()
fsi
fin
2003-2004
49
2003-2004
50
2003-2004
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
Algorithmique 6 : Recherche,
66
Tris
2003-2004
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
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
Algorithmique 6 : Recherche,
90
Fin du volume 6
2003-2004
91