Algo Volume 6
description
Transcript of Algo Volume 6
-
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 abstrait
ensemble de valeurs E, lment a; estce que a E?
rponse: boolen (x) { xE | x=a }
plus gnralement
existetil x vrifiant certains critres
(x) { xE | j(x)}
trouver tous les x satisfaisant certains critres
{ xE | j(x)}(bases de donnes)
Algorithmique 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
- 257891213151718192024273236257891213151718192024273236
Algorithmique 6 : Recherche, complexit, tris
- 257891213151718192024273236257891213151718192024273236
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
Objectif: classer M lments dans un tableauPrincipe: dans un tableau de p cases, on classe l'lment x, lindice k, donn par une fonction d'adressage hclasser un lment x entier k, compris entre 1 et pFonction h: h(x)=kla valeur k ne dpend que de l'lment x ;l'lment x n'est pas plac relativement aux autres lments -
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.JoAliMarcPauleJeanneMichleIzabelle12345678 -
Une autre fonction dadressage
h5 associe c1ck la somme :(Somme (rang de ci dans lalphabet * i) modulo 9) +1Suite de prnoms : Marc, Izabelle, Paule, Jeanne, Jo, Michleh5 (Marc) = ((13*1+1*2+18*3+3*4) mod 9) + 1 = 81 mod 9 + 1 = 1h5 (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
MarcPauleJoIzabelleMichleJeanne123456789 -
Recherche 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
MarcPauleJoIzabelleMichleAliJeanne123456789 -
Mthodes 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)MarcPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789 -
Retrait 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)
MarcPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789XPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789XPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789XPauleLolaIsabelleJoIzabelleMichleXJeanne123456789 -
Rsolution 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 collision -
Exemple
Ajout de Lola (code associ par h5 : 2) puis de Isabelle (code associ par h5 : 1)Zone de
dbordement
( la suite
du tableau)
MarcPauleJoIzabelleMichleAliJeanne123456789LolaIsabelle101112131415 -
Recherche
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)
MarcPauleJoIzabelleMichleAliJeanne123456789LolaIsabelle101112131415 -
Mthodes 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 prcdent -
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 lmentExemple (avec h5): ajout de Lola (code 2)Lola
MarcPauleJoIzabelleMichleAliJeanne123456789 -
Exemples (suite)
Lola
ajout de Isabelle (1)
Isabelle
ajout de Jos (1)
Isabelle
Jos
Lola
MarcPauleJoIzabelleMichleAliJeanne123456789MarcPauleJoIzabelleMichleAliJeanne123456789 -
Recherche 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
MarcPauleJoIzabelleMichleAliJeanne123456789 -
Retrait 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
MarcPauleJoIzabelleMichleAliJeanne123456789 -
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
-
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 usuellesAlgorithmique 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
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(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
- 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)
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
- Recherche dichotomique (dans un tableau tri 1)complexit au pire
= complexit moyenne =
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
- Tris internes et tris externesinternes: 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, , 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
- Exemple m = 10, 4 7 3 2 8 1 5Rsultat: 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).
12345780123456789Algorithmique 6 : Recherche, complexit, tris
- Cette mthode peut tre gnralise des kuplets d'entiers munis de
l'ordre lexicographique, et plus gnralement des chanes (de longueur
variable):
(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 slectionDonnes: 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
- 201895241327283271236151719
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 insertionDonnes: 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
- 201895241327283271236151719
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
On utilise trois tableaux diffrents qui contiennent non les agrgats, mais les indices des agrgats dans le tableau
de tableaux dindicestriNom
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