Preuve et Analyse des Algorithmes
14:00–16:00
aucun document autoris´ e
janvier
1 Stabilit´ e d’un algorithme de tri
Un algorithme de tri qui compare et d´eplace les ´el´ements d’un tableau est dit stable s’il ne change pas l’ordre relatif de deux ´el´ements ´egaux pour la cl´e de tri consid´er´ee.
Autrement dit, si t[i] =t[j] pour deux indicesi < j `a l’entr´ee de l’algorithme de tri, alors la position finale de l’´el´ement t[i] est inf´erieure `a celle de t[j].
1. Donner un exemple d’algorithme de tri stable.
2. Compl´eter la ligne 10 de la coupure de Lomuto.
3. Etudier la stabilit´e du tri bas´e sur Lomuto.
2 R´ esidu primitif
Soit m un nombre premier. On appelle r´esidu modulo m tout entier naturel inf´erieur
`
a m. Pour tout entier naturel z, il existe un et un seul r´esidu, que nous noterons [z]m, tel que
∃q ∈N, z =qm+ [z]m (1)
On rappelle que la multiplication modulaire (x, y)7→x⊗y:= [xy]m d´efinit un op´erateur binaire associatif sur les r´esidus modulom. Un r´esidug est dit primitif modulom si pour tout r´esidu non nuly modulom, il existe un entierk tel quey= [gk]m, on dit alors que k est le logarithme `a baseg dey. Un r´esultat classique de la th´eorie des nombres, que nous admettrons, affirme que tout nombre premier m admet au moins un ´el´ement primitif.
1. Quelle notion math´ematique permet d’affirmer l’existence et l’unicit´e du r´esidu d´ecrit dans la relation (1).
2. Quels sont les r´esidus primitifs modulo 7 ?
1 p r o c e d u r e s p l i t ( x , l e f t , r i g h t , i )
2 T := x [ l e f t ] ;
3 i := l e f t ;
4 f o r j := l e f t + 1 t o r i g h t do
5 i f x [ j ] < T t h e n
6 i := i + 1
7 swap ( x [ i ] , x [ j ] )
8 f i
9 done
10 // ? ? ?
11 end . {s p l i t}
Lomuto
1
1 char val( ullong z )
2 {
3 int r = 0;
4 while ( ... ) {
5 ...
6 ...
7 }
8 return r;
9 }
3. Montrer que sixest un r´esidu quelconque alors il existe deux entiersi < j tel que [xi]m = [xj]m, sans quem ne soit n´ecessairement premier.
4. Montrer que si x est un r´esidu non nul (m premier) alors il existe un entier k >0 tel que [xk]m = 1.
5. Montrer queg est primitif si et seulement si
∀k, 0< k < m−1 =⇒ [gk]m 6= 1.
6. Ecrire une fonctionprimitif(int m) qui renvoie le plus petit r´esidu primitif mod- ulo m.
7. Ecrire une fonctionint dl (int y, int g, int m) qui d´etermine le logarithme dey en base g sachant que g est primitif modulo m.
8. Pr´eciser le temps de calcul moyen.
3 Logarithme des mots de poids 1
Un mot binaire de poids 1, s’´ecrit 2v pour un certainv. Dans cet exercice, on s’int´eresse aux fonctions ´ecrites en Langage C qui d´eterminent l’entierv pour des entiers de 64 bits mais de poids 1.
1. Donner un exemple de contexte d’utilisation.
2. Compl´eter la fonctionchar val(ullong z)en privil´egiant l’utilisation des op´erateurs bit-`a-bit du Langage C.
3. Le type de retour de la fonctionvalest-il correct ? 4. Pr´eciser les temps de calcul.
5. Ecrire une fonction int log(ullong z) plus efficace.
6. Pr´eciser le temps de calcul.
7. D´ecrire une solution bas´ee sur le fait que 2 est primitif modulo 67.
2