Upload
madina-oo
View
232
Download
1
Embed Size (px)
DESCRIPTION
algorithme exercice volume 6 IUT D'ORSAY
Citation preview
Algorithmique : Volume 6
Recherche
Adressage dispers
Tris
Complexit
Ccile Balkanski, Nelly Bensimon, Grard Ligozat
Universit Paris XI
I.U.T. d'Orsay
Dpartement Informatique
Anne scolaire 2003-2004
Recherche
Algorithmique 6 : Recherche, complexit, tris
Recherche
Problme gnral abstraitAlgorithmique 6 : Recherche, complexit, tris
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
201895241327283271236151719257891213151718192024273236Algorithmique 6 : Recherche, complexit, tris
32
18
9
5
2
24
27
20
36
19
13
8
12
15
17
7
arbre binaire de recherche
Algorithmique 6 : Recherche, complexit, tris
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 exaequo, mme geAlgorithmique 6 : Recherche, complexit, tris
Recherche et type de donnes
On utilise divers types de donnes sur lesquelles on fait des oprations de base: ajout suppression mise jour consultationChaque structure a des avantages et des inconvnients : tableau, tableau tri, arbre binaire, liste chane, etc.Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
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
variablestrouv: 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
Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
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
variablestrouv, 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
Algorithmique 6 : Recherche, complexit, tris
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
257891213151718192024273236Algorithmique 6 : Recherche, complexit, tris
Algorithmique 6 : Recherche, complexit, tris
Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
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
variablesid, 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
Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
32
18
9
5
2
24
27
20
36
19
13
8
12
15
17
7
Simulation de recherche
Algorithmique 6 : Recherche, complexit, tris
Algorithmique 6 : Recherche, complexit, tris
Adressage Dispers
Algorithmique 6 : Recherche, complexit, tris
Adressage dispers
Quelques exemples de fonctions dadressage
x : chane h1(x) = nombre de caractres de la chaneh1("Paul") = 4 h1("MmeDupont")=9
x : entier h2(x) = somme de ses chiffres dcimauxh2(342) = 9 h2(100 340) = 8
x : entier h3(x)= nombre de bits 1 dans l'criture binaireh3(342) = h3(101010010) = 4
x : chane de caractresh4(x) = somme des codes ASCII des caractres de la chane
Exemple de classement par la fonction dadressage h1
Suite de prnoms : Marc, Izabelle, Paule, Jeanne, Ali, Jo, MichleCodes associs par h1 (nb caractres) : 4, 8, 5, 6, 3, 2, 7Constatations :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.JoAliMarcPauleJeanneMichleIzabelle12345678Une autre fonction dadressage
= 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
MarcPauleJoIzabelleMichleJeanne123456789Recherche dun lment
Algorithme de recherche d'un lment x dans une table construite par adressage dispers d'une suite d'lments :
on calcule le code associ cet lment x par la fonction dadressage, soit p.
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.
Ajout dun lment
Algorithme d'ajout d'un lment X dans une table construite par adressage dispers d'une suite d'lments:
on calcule le code associ cet lment par la fonction d'adressage, soit p.
on affecte l'lment la p-ime place dans la table, condition toutefois que cette place ne soit pas dj occupe risque de collision
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
MarcPauleJoIzabelleMichleAliJeanne123456789Mthodes de rsolution des collisions : mthodes internes
lnternes car on opre dans le tableau alloupremire possibilit : on utilise la place libre dans le tableauAlgorithme 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)MarcPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789Retrait dun lment
on calcule le code associ cet lment x par la fonction d'adressage : soit p ;
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)
Recherche dun lment
on calcule le code associ cet lment x par la fonction d'adressage : soit p.
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)
Exemples (avec h5 )
retrait de Marc (code 1)
retrait de Ali (code 8)
recherche de Isabelle (code 1)
MarcPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789XPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789XPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789XPauleLolaIsabelleJoIzabelleMichleXJeanne123456789Rsolution interne des collisions (suite)
Deuxime solution: on partitionne le tableau en deux:une zone d'adressage primaireune zone de dbordementAlgorithme d'ajout d'un lment entr en collision : rechercher une place libre dans la zone de dbordement et y placer l'lment entr en collisionExemple
Ajout de Lola (code associ par h5 : 2) puis de Isabelle (code associ par h5 : 1)Zone de
dbordement
( la suite
du tableau)
MarcPauleJoIzabelleMichleAliJeanne123456789LolaIsabelle101112131415Recherche
on calcule le code associ cet lment x par la fonction d'adressage, soit p
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
et retrait
on calcule le code associ cet lment x par la fonction d'adressage, soit p
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
Exemples
Recherche de Ali (h5 : 8), puis Lola (h5 : 2)
Retrait de Marc (h5 : 1)
Recherche Isabelle (h5 : 1)
MarcPauleJoIzabelleMichleAliJeanne123456789LolaIsabelle101112131415Mthodes de rsolution externe des collisions
"Externes " car on alloue des zones de stockage supplmentairesLe 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 prcdentAjout dun lment
Lola
MarcPauleJoIzabelleMichleAliJeanne123456789Exemples (suite)
Lola
ajout de Isabelle (1)
Isabelle
ajout de Jos (1)
Isabelle
Jos
Lola
MarcPauleJoIzabelleMichleAliJeanne123456789MarcPauleJoIzabelleMichleAliJeanne123456789Recherche dun lment
on calcule le code associ cet lment x par la fonction d'adressage, soit p
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)Jos
Lola
Isabelle
MarcPauleJoIzabelleMichleAliJeanne123456789Retrait dun lment
on calcule le code associ cet lment x par la fonction d'adressage, soit p
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)Isabelle
Jos
Lola
MarcPauleJoIzabelleMichleAliJeanne123456789Algorithmes 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
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
variablesok: 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
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
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
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
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
Complexit des algorithmes
Algorithmique 6 : Recherche, complexit, tris
Complexit des algorithmes
Complexit temporelle, complexit spatialecot en temps: temps ncessaire l'excution
cot en espace: espace mmoire ncessaire
Pire des cas, complexit moyennela 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 posterioritude thoriquetude pratique de l'algorithme implment, bancs d'essaiAlgorithmique 6 : Recherche, complexit, tris
Complexit d'un problme, complexit dun algorithme
contraintes sur un problmepar 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'autresla comparaison des pires des cas peut ne pas tre une bonne indicationAlgorithmique 6 : Recherche, complexit, tris
Complexit asymptotique
Ncessit d'tudier la complexit pour de grosses quantits de donnesExemple : deux algorithmes pour une mme tche:A1 effectue n2 oprations de base, A2 effectue n.log2 n oprations Deux machines :M1 effectue 210 (environ mille) oprations par scondeM2 effectue 220 (environ un million d') oprations par secondeTemps de calcul (en secondes) :Algorithmique 6 : Recherche, complexit, tris
Complexit asymptotique (2)
M1M2A1A2A1A2n = 210210101< 0,01n = 22023020. 21022020Algorithmique 6 : Recherche, complexit, tris
Rapidit de croissance compare
de certaines fonctions usuelles
Algorithmique 6 : Recherche, complexit, tris
Calcul de la complexit dun algorithme
Calcul de la valeur d'un polynme en un point1. p a[0]
2. pour i 1 n faire {puissance(a, n) retourne an}
3. xpi puissance (x , i)
4.p p + a[i]* xpi
fpour
Nombre de multiplicationsen 3 > 1+2+3+...+ (n1) = (nl)n/2
en4 > n
Nombre d'additions en 4 > nsoit au total: n(n + 3)/2< n2pour n > 3.Algorithmique 6 : Recherche, complexit, tris
Notations utilises
Grand Of(n) = 0(g(n)) s'il existe C> 0 et no > 0 tels que
f(n) C. g(n) pour tout n no
Grand omgaf(n) = (g(n)) s'il existe C> 0 et no > 0 tels que
f(n) C. g(n) pour tout n no
Grand thtaf(n) = (g(n)) s'il existe C1 et C2 > 0 et no > 0 tels que
C1.g(n) f(n) C2. g(n) pour tout n no
Algorithmique 6 : Recherche, complexit, tris
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)
10n2+4n+2=O(n2) 3n+3 = O(n2)
1000n2 + 100 n 6 = O(n2) 10n2+4n+2= O(n4)
6*2n + n2 = O(2n)
> c'est la plus petite fonction g(n) qui est intressanteAlgorithmique 6 : Recherche, complexit, tris
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'est la plus grande fonction g(n) qui est intressanteAlgorithmique 6 : Recherche, complexit, tris
Temps dexcution des algorithmes
Temps constant (rares algorithmes, cf. adressage dispers)O(1)Temps logarithmique (exemple: recherche dichotomique)O(log2n)Temps linaire (exemple: recherche squentielle)O(n)Temps polynomial O(nk) (coteux si k dpasse 3)quadratique O(n2)cubique O(n3)Temps exponentielO(cn) ( viter en gnral)Algorithmique 6 : Recherche, complexit, tris
Comparaison des complexits d'algorithmes de la mme
classe
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(n2)
Algorithmique 6 : Recherche, complexit, tris
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)
Algorithmique 6 : Recherche, complexit, tris
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)
Algorithmique 6 : Recherche, complexit, tris
Calcul de la complexit dalgorithmes de recherche simples
Oprations lmentaires retenues: les comparaisonsRecherche squentielle dans un tableau non tri
complexit au pire n comparaisonscomplexit moyennen/2 comparaisonsalgorithme en O(n)
2. Recherche squentielle dans un tableau tri
complexit au pire n comparalsonscomplexit moyenne n/2 comparaisonsalgorithme en O(n)
Algorithmique 6 : Recherche, complexit, tris
nombre p d'intervalles considrs
Exemple avec n = 8 = 23 tableau de 8 lmentsniveau 0
niveau 1
niveau 2
niveau 3
Profondeur de larbre de dcision de lordre de log2n :
complexit algorithmique en O(log2n)
Algorithmique 6 : Recherche, complexit, tris
Tris
Algorithmique 6 : Recherche, complexit, tris
Tris
Donnes dans un ensemble d'lments S muni d'un ordre totalordre|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
trier: des entiers entre 1 et m
principe:
- on cre m files d'attente vides numrotes 0, , m1
- on parcourt linairement les donnes, et on place ai
dans la file numrote ai
- on place les files d'attente bout bout
Algorithmique 6 : Recherche, complexit, tris
- 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).
12345780123456789Algorithmique 6 : Recherche, complexit, tris
(s1,..., sp) < (t1,..., tq) si et seulement si
ou bien p < q et si = ti pour 1 i p (s est un prfixe de t);
ou bien il existe j tel que si < tj et si = ti pour tout i < j.
Exemples:634 < 63472tri < triage
64589 < 647seau < selle
Pour des suites de kuplets dont chaque composante est un entier entre 0 et ml, on obtient un algorithme de cot O((m+n)k).
Algorithmique 6 : Recherche, complexit, tris
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
Estimation du cot
Arbre binaire de hauteur h => au plus 2h feuillesThorme 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'estdire 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)Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
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
sitab[indDuMin] > tab[ind] alors indDuMin ind
fpour
retourner(indDuMin)
fin
Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
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[ind1] fpour
tab[nPlace] deCt
fin
Algorithmique 6 : Recherche, complexit, tris
Simulation du dcalage
Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
Simulation du tri par insertion squentielle
Algorithmique 6 : Recherche, complexit, tris
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 0if 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
Algorithmique 6 : Recherche, complexit, tris
Simulation du tri par insertion dichotomique
Algorithmique 6 : Recherche, complexit, tris
Complexit des tris lmentaires
Cot du tri par slectionon fait (nl) + (n2) + ... + 1 tests de comparaison, soit en tout: n(nl)/2 comparaisonson peut tre amen faire n-1 changes=> algorithme en O(n2)
Cot du tri par insertion:en moyenne n2/4 comparaisonsn2/8 changes deux fois plus dans le pire des cas=> ici encore algorithme en O(n2)
Algorithmique 6 : Recherche, complexit, tris
Tris indirects
Problme : tri sur diffrents critresOn veut mmoriser les rsultats des tris par nom, par taille, par dateRep[1]Rep[2]Rep[3]nom toto.C toto.o tototaille 20 457 3 456 5 248date 12.04.0113.04.01 15.04.1Algorithmique 6 : Recherche, complexit, tris
Solution : utilisation
de tableaux dindices
triNom
triTaille
triDate
312231123Algorithmique 6 : Recherche, complexit, tris
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
Algorithmique 6 : Recherche, complexit, tris
Fin du volume 6
Algorithmique 6 : Recherche, complexit, tris
iUT
ORSAY