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).