Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche...

36
Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection, à bulles, fusion, Dijkstra) Utilisation des tableaux de nombres : histogrammes, matrices

Transcript of Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche...

Page 1: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Chapitre III. Algorithmique élémentaire des tableaux

(recherche, tri)DéfinitionRecherche séquentielleRecherche dichotomiqueTri (insertion, sélection, à bulles, fusion, Dijkstra)Utilisation des tableaux de nombres : histogrammes, matrices

Page 2: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Définition des tableaux

• Tableau : collection d’objets de même type Type Element = Enregistrement

Debutclé : entier;

inf1 : chaîne de caractères;inf2 : réel;

…. Fin Enregistrement;Var Tab[1..N] Tableau des Element;

• Problèmes :– Recherche des éléments (par clé)– Tri (une relation d’ordre est définie sur l’ensemble des

clés)

Page 3: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Recherche séquentielle

• La recherche ne porte que sur la valeur de la clé – « recherche associative »

• Lorsqu'on recherche une clé qui est présente on parle de recherche positive (variétés des algorithmes : plusieurs occurrences, - première, dernière, toutes)

• S’il n’existe pas de solution, la recherche se termine sur un échec et ne rend pas de résultat. On parle de recherche négative

Page 4: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Recherche séquentielle dans un tableau non trié (1)

Var L: tableau[1…n] des entiers X: entier

j: entierDébutj:=1TQ (j<=n et L[j]!=X) faire j:=j+1;FTQSi j>n alors j:=0 Fsi

• Complexité Moy?

Page 5: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Recherche séquentielle dans un tableau non trié (2)

• Opération fondamentale : comparaison• Probabilités qu’un élément se trouve à la ième

place :

• Probabilité qu’un élément ne se trouve pas dans le tableau :

• Coût moyen (nombre de comparaisons)

nqqq ,...,, 21

p

11

n

iiqp

pnnqqqnMoy n )1(...21)( 21

Page 6: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Recherche séquentielle dans un tableau non trié (3)

• Recherche positive (on sait que la clé recherchée se trouve dans le tableau), places équiprobables :

• Coût moyen minimal : Si lorsque les éléments les plus recherchés sont

au début du tableau

• Si plusieurs recherches, il est possible de faire évoluer le tableau de sorte que les éléments les plus recherchés se trouvent au début – recherche autoadaptative– M1. Après chaque recherche, placer l’élément recherché en tête

(début)– M2. Faire progresser l’élément recherchée d’une place vers le

début.– M1 est meilleure pour les listes chaînées, M2 pour les tableaux.

2/)1()( nnMoy

nqqq ...21

Page 7: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Recherche séquentielle dans un tableau trié (1)

(1) Dénotons probabilités que l’élément recherché X se trouve à la i-ème place

(2) Probabilités que X soit strictement compris entre j-ème et j+1-ème, j=1,..,n-1

Probabilités que X soit strictement inférieur (resp. supérieur) au premier (resp. au dernier)

(3)

nqqq ,...,, 21

jp

npp ,0

1..... 110 nn qqppp

Page 8: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Recherche séquentielle dans un tableau trié(2)

• Cas particulier : recherche positive (pj=0), toutes les places sont équiprobables (qj=1/n) :

• Comme c’est le cas de recherche dans un tableau non-trié

• Complexité

jnjni

i pjiqnMoy

01

1)(

2/)1()( nnMoy

n

Page 9: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Recherche dichotomique

• Recherche d’un élément X dans un tableau trié (on supposera l’ordre croissant)

• Principe : comparer avec l’élément du milieu m du tableau (tab[m])• Si X=tab[m] , la solution est trouvée, arrêt• Si X>tab[m], il est impossible que X se trouve avant m dans le

tableau et il ne reste à traiter que la moitié droite du tableau• Si X<tab[m], X ne peut se trouver que dans la moitié gauche du

tableau.

On continue ainsi la recherche, en diminuant de moitié le nombre d’éléments de la liste restant à traiter, après chaque comparaison , et si on recherche X dans un tableau ne contenant aucun élément, la recherche se termine sur un échec : X n’est pas dans le tableau.

Illustration graphique

Page 10: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Recherche dichotomique. Version récursive

Procédure dichot(val X : élément; tab : tableau[1..n] des entiers, g,d : entiers, ref res : entier){cette procédure renvoie soit l’indice de X dans le tableau soit 0. A

l’appel g=1 et d=n}var m : entierDébut

Si g<d alors

m:=(g+d)/2 {division entière} Si X=tab[m] alors res:=m sinon Si X<tab[m] alors dichot(X,tab,g,m-1,res) sinon dichot(X,tab,m+1,d,res) FinSi FinSi sinon res:=0FinSi

Fin dichot

Page 11: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Version récursive. Eléments d’analyse

• Une procédure(fonction) récursive s’appelle récursive terminale si il n’y a aucun traitement à exécuter après chacun des appels à elle-même qu’elle contient

• Transformation en version itérative

Procédure P(U)Debut Si C alors traite; P(a(U)); sinon Terminaison;Fin P

Procédure P(V)Var U;Debut Tant que C faire traite; U=a(U); FinTq Terminaison; Fin P

Page 12: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Version Récursive. Complexité• Opération fondamentale : comparaison

• L’itération atteint 1 quand • donc i = (ou dépasse)

• Ainsi : la recherche dichotomique représente une amélioration importante par rapport à la recherche séquentielle

1)2/()( nTnT

)1(...11....8/111

1)8/(111)4/(11)2/()(

nT

nTnTnTnT

12/ in

nlg

nnT lg)(

Page 13: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Tri (insertion, sélection, à bulles, fusion, Dijkstra)

(1) Tri par sélection

• Principe : on recherche le minimum dans la partie restante du tableau et on l’échange avec l’élément qui suit la partie déjà triée.

• Après k placements les k plus petits éléments du tableau sont déjà à leur place définitive

G

Page 14: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Tri par sélection avec recherche séquentielle du minimum (1)

• Algorithme itératif

Procédure tri-select-iter(ref tab: tableau [1..n] des entiers)Var i,j,k : entiersDébut

i:=1;Tant que i<n faire

j:=i; Pour k:=i+1 à n faire {boucle de recherche de min } Si tab[k]<tab[j] j:=k; FinSi FinPour échanger(tab[j], tab[i]); i:=i+1; FinTantqueFin tri-select-iter

Page 15: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Tri par sélection avec recherche séquentielle du minimum (2)

• Version récursive

Procédure tri-select(ref tab: tableau [1..n] des entiers, val i : entier){ appel avec i=1}Var i,j,k : entiersDébut

Si i<n alors{recherche séquentielle du minimum}Pour k:=i+1 à n faire {boucle de recherche de min } Si tab[k]<tab[j] j:=k; FinSi échanger(tab[j], tab[i]);{tri de la fin du tableau}Tri-select(tab, i+1)

Fin tri-select

Page 16: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Analyse de complexité

• Opération fondamentale : comparaison. • Pour tout tableau de taille n le nombre de comparaisons pour

trouver le minimum est n-1• Maxc(n)=n-1+Maxc(n-1) pour n>1 et

• Maxc(1)=0

• En itérant

• Le nombre de comparaisons ne dépend pas de la valeur des éléments

2/111

1

nniMaxnMaxn

iCC

22

1n

nnMoynMax CC

Page 17: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Tri (insertion, sélection, à bulles, fusion, Dijkstra)

(2) Tri par insertion

• Principe : à la i-ème étape on insère le i-ème élément à son rang parmi les i-1 éléments précédents qui sont déjà triés entre eux.

• Après la i-ème étape les i plus petits éléments du tableau ne sont pas forcément à leur place

• Tri de « joueur des cartes »

G

Page 18: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Tri par insertion: version récursive

Procédure tri-insert(réf tab: tableau [1..n] des entiers, val i : entier)Var k,x : entiers Début Si i>1

alorstri-insert(tab,i-1) {tri du début de la liste}

{recherche de la place de tab[i]} k:=i-1; x:=tab[i]; Tant que k>0 et tab[k]>x faire tab[k+1]=tab[k]; {décalage des éléments} k:=k-1; FinTantQue {on a tab[k] < x; la place de x est k+1} t[k+1]:=x; FinSiFintri-insert

Page 19: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Analyse• La procédure n’est pas récursive terminale • (transformer en itérative est une tâche plus complexe)• Complexité dans le pire des cas : le tableau est trié dans l’ordre

décroissant• Pour un tableau de n éléments on doit faire n-1 comparaisons après

l’appel de tri-insert(tab,i-1) (sans compter la comparaison de k avec 0)

• Maxc(n)=n-1+Maxc(n-1) pour n>1 et

• Maxc(1)=0

• ou si on compte le test de dépassement de la

borne*

* Sinon on peut utiliser la technique de sentinelle et insérer un élément inférieur à tous les éléments du tableau à tab [0]

22

1n

nnnMaxC

nMoynMax CC 21 nnnnMaxC

Page 20: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Tri (insertion, sélection, à bulles, fusion, Dijkstra)

(3) Tri à bulles

• Principe : on parcourt le tableau en effectuant un échange à chaque fois que l’on trouve deux éléments successifs qui ne sont pas dans le bon ordre.

• Il existe plusieurs versions – tri à bulles avec parcours du début à la fin avec 2 boucles Pour

imbriquées;– tri à bulles amélioré (on retient l’indice de la dernière

permutation);– tri « shaker » - deux parcours du début à la fin, et inversement;– tri avec parcours de la fin au début;

Page 21: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Tri à bulles

Procédure tri-bulles(réf tab : tableau[1..n] d’entiers);Var i,j : entiers;Début i:=1; Tant que i<n faire Pour j:=n jusqu’à i+1 par pas -1 faire Si Tab[j]<Tab[j-1] alors échanger(Tab[j],Tab[j-1]) FinSi FinPour i:=i+1; FinTantqueFintri-bulles

Page 22: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Analyse

• Après k pas, les k plus petits éléments du tableau sont à leur place définitive.

• Le nombre de comparaisons • Maxc(n)=n-1+Maxc(n-1) pour n>1 et

• Maxc(1)=0

• Maxc(n)=Moyc(n)

22

1n

nnMoynMax CC

Page 23: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Tri (insertion, sélection, à bulles, fusion, Dijkstra)

(4) Tri par fusion

…. ….

Page 24: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Algorithme de tri par fusion (2)

Procédure Tri-Fusion(val A,p,r)

Var q:entier

Début

Si p<r

Alors

Tri-Fusion(A,p,q)

Tri-Fusion(A,q+1,r)

Fusionner(A,p,q,r)

FinSi

Fin Tri-Fusion

2/rpq

Page 25: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Fusion de deux tableaux ordonnés

• Interclassement des deux tableaux : étant donnés un tableau tab1 de n éléments et un tableau tab2 de m éléments, il s’agit de construire un tableau tab3 trié, qui contient la réunion des éléments de tab1 et tab2 en conservant les répétitions.

• On utilisera la technique de sentinelle : dans la dernière case des tableaux augmentés (n+1) et (m+1) on insérera un élément maxelt d’emblée plus grand que les autres.

Page 26: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Fusion de deux tableaux ordonnés

Procédure fusion-tab(réf tab1: tableau [1…n+1] d’éléments; réf tab2: tableau [1…m+1] d’éléments; réf tab3: tableau [1…n+m] d’éléments)Var i,j,k: entiers;Début i:=1;j=1;k:=1; tab1[n+1]:=maxelt; tab2[m+1]:=maxelt; Tant que k< m+n faire Si tab1[i]<tab2[j] alors tab3[k]:=tab1[i]; i:=i+1; sinon tab3[k]:=tab2[j]; j:=j+1; FinSi k:=k+1; FinTantQueFinfusion-tab

Page 27: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Analyse de complexité du tri-fusion

1. Fusion: MaxNbr de tours de la boucle Tq = n+m• Lors de chaque tour on a une comparaison et 2 affectations. • Donc Max(n+m)=

2. Tri-fusion:

• avec a=b=2

• D’après le théorème général, cas 2 (cf. chap. 1)

)()( mnmnT

)()2/(2)(, NNTNTmnN

)()/()( log abNbNaTNT

NNNNNT ab lglglog

Page 28: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Tri (insertion, sélection, à bulles, fusion, Dijkstra)

(5) Algorithme de Dijkstra à deux couleurs• Supposons que dans un tableau nous

avons des nombres pairs et impairs (ou des objets de deux couleurs)

• Problème : placer les nombres pairs au début du tableau et les nombres impairs à la fin.

Page 29: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Tri de Dijkstra à deux couleurs

P1: A gauche de l’indice G tous les objets sont rouges

P2: A droite de l’indice D tous les objets sont bleus

Problème : combler la zone d’incertitude

G D

Page 30: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Tri de Dijkstra à deux couleurs(2)

• Faire décroitre la zone d’incertitude en conservant la validité des conditions• G:=0;D:=N• Tant que G<D

– Tant que (G<D && T[G+1] rouge)– G:=G+1; – FTQ– Tant que (D>G&& T[D] bleu)

D:=D-1;FTQ

Si (G<D) alorspermuter T[G+1] et T[D];

G:=G+1; D:=D-1; fin-SiFin TantQue

Page 31: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Utilisation des tableaux de nombres : histogrammes matrices

• Tableau Hist [1…n] : permet de stocker les occurrences des valeurs d’une variable aléatoire X(t) : ai-1<xi<ai

• Problème : une variable aléatoire discrète prend des valeurs entières dans l’intervalle de 1…n.

• Proposer un algorithme de calcul de l’histogramme en

n

Page 32: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Matrices

• Une matrice peut être représentée par un tableau rectangulaire de nombres

• Ex: A : tableau[1…3][1..2] des entiers• La transposée d’un matrice A est la matrice At

en échangeant les lignes et les colonnes de A:

232221

131211

aaa

aaaA

2313

2212

2111

aa

aa

aa

At

Page 33: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Matrices et vecteurs

• Vecteur est un tableau de nombres à une dimension Vect : tableau des entiers [1..n].

• Vecteur colonne est équivalent à une matrice nx1, vecteur ligne est sa transposée.

• Vecteur unité ei est le vecteur dont la i-ème composante est égale à 1 et toutes les autres composantes sont égales à 0;

0

...

0

1

0

ie

Page 34: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Opérations sur les matrices

• 1. Addition

• 2. Multiplication scalaire

• 3. Soustraction

opposé de :

• 4. Multiplication

ijnmijnm bBetnjmiaA ,..1,,..,1, ijijijijnm bacBAcC :

ijij aAaAR ,

A ijaAA 1

ijijijijnm bacBABAcC : ijnmijnm bBetaA ,

ijpnijnm bBetaA , jkij

n

jikikpm bacABcC

1

:

Page 35: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Algorithme direct de multiplication de matrices

• Fonction Multiplier_Matrices(réf A: tableau [1..m][1..n] d’entiers; ref B: tableau[1..n][1..p] d’entiers): tableau [1..m][1..p] d’entiersVar C: tableau [1..m][1..p] d’entiers; i,j,k: entiers;DébutPour i allant de 1 à m faire

Pour j allant de 1 à p faire C[i][j]:=0; Pour k allant de 1 à n faire C[i][j]:= C[i][k]+A[i][k]*B[k][j]; FinPour FinPourFinPourretourner C;FinMultiplier_Matrices

• Complexité si A,B sont NxN 3N

Page 36: Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri) Définition Recherche séquentielle Recherche dichotomique Tri (insertion, sélection,

Calcul du déterminant

• Soit une matrice de taille nxn.• Le ij-ème mineur est la matrice de taille (n-

1)x(n-1) obtenue en supprimant la i-ème ligne et la j-ème colonne de A.

• Définition récursive du déterminant :

ijnn aA

ijA

1det1...detdet

1det

111

12121111

11

nsiAaAaAa

nsiaA

nnn