Algorithme d`échange

publicité
TD 1 : preuve et complexité des algorithmes
Ex1 : Faire la preuve de l’Algorithme de division euclidienne par soustraction par l’invariant
de boucle (condition à prouver : a=B*Q+R).
B := b;
R := a;
Q := 0;
Tant que R ≥ B faire
R := R − B ;
Q := Q + 1 ;
fintq ;
Solution :
Remarquons que les conditions initiales donnent : a = B ∗ Q + R.
Montrons que la propriété a = B ∗ Q + R est un invariant de boucle : notons R′, B′, Q′ les nouvelles
valeurs en sortie de B, Q, R. Alors R′ = R − B et Q′ = Q + 1. Ceci prouve que B′ ∗ Q′ + R′ = B ∗Q+ R.
De plus la quantité entière R − B diminue strictement à chaque tour, donc le programme se termine et
après la boucle on a : a = B ∗ Q + R et R < B.
La complexité est de O(B)
Ex2 : Faire la preuve de la multiplication par l’addition en utilisant les assertions d’hoare.
TD1: Complexité des Algorithmes de tri de tableaux
Algorithme d'échange
Algorithme Echange (t : tableau d'entiers ; i,j : entiers)
{ Echange le contenu des cases i et j dans le tableau t }
Variable pro : entier
Début
pro := t[i]
t[i] := t[j]
t[j] := pro
Fin
Ex1 : Tri à bulles
Algorithme TriBulles (t : tableau d'entiers ; n : entier)
{ Trie par ordre croissant le tableau t contenant n éléments }
Variables i,j : entier
Début
Pour i := 1 à n-1 faire
Pour j := 1 à n-i faire
Si t[j] > t[j+1]
Alors Echange(t,j,j+1)
Fin Si
Fin Pour
Fin Pour
Fin
1. Calculer la complexité du tri à bulles
2. Expliquez le principe de son fonctionnement
Ex2 : Ecrire l’algo récursif et ensuite calculer la complexité du tri selection.
Principe du tri extraction Aussi nommé tri sélection, En utilisant l'algorithme Minimum
1. Extraire l'élément le plus petit du tableau à trier.
2. Echanger cette valeur minimale avec la première case du tableau à trier.
3. Trier le reste du tableau (le tableau initial sans la première case) de la même manière.
Ex3 : Principe du tri rapide
1. Choisir un élément du tableau, élément que l'on nomme ensuite pivot.
2. Placer le pivot à sa position finale dans le tableau : les éléments plus petits que lui sont à sa
gauche, les plus grands à sa droite.
3. Trier, toujours à l'aide de cet algorithme, les sous-tableaux à gauche et à droite du tableau.
Pour que cette méthode soit la plus efficace possible, il faut que le pivot coupe le tableau en deux
sous-tableaux de tailles comparables.
Ainsi, si l'on choisit à chaque fois le plus petit élément du tableau comme pivot, on se retrouve dans le
cas de l'algorithme de tri par extraction : la taille du tableau de diminue que d'un à chaque fois alors
que le but est de diviser cette taille par deux.
Cependant, bien choisir le pivot peut être coûteux en termes de complexité.
Aussi on suppose que le tableau arrive dans un ordre aléatoire et on se contente de prendre le premier
élément comme pivot.
Algorithme tri rapide :
Question : Exécuter à l’aide d’un exemple, calculer la complexité de cet algo de tri.
Solution :
Par exemple, pour trier
101, 115, 30, 63, 47, 20, on va avoir les itérations suivantes :
Et on relance le processus sur les deux sous tableaux
et
Complexité
_
Dans le but de mesurer la complexité d'un algorithme de tri, deux quantités sont à observer :


le nombre d'échanges effectués,
le nombre de comparaisons effectuées entre éléments du tableau.
tri à bulles en n2.
tri rapide en n.log(n).
Téléchargement