UM2 - Faculté des Sciences – Feuille TD HLIN301– Septembre 2014 2
2. Parmi les égalités suivantes, quelles sont celles vérifiées par l’itération de l’algorithme 11 : (r1=i),(r1=i−1),
(r1=fib(i)),(r2=r1+ 1 si i6= 1),(r2=f ib(i+ 1)) ? En déduire la valeur à renvoyer pour que l’algorithme
soit correct. Rappel fib(0)=0, fib(1)=1 et fib(n)=fib(n-1)+fib(n-2) pour n>1.
3. Faites une trace de l’algorithme 8 pour les données M= 48, N = 30. Pour chaque itération calculez l’ensemble
des entiers divisant à la fois met n. Que constatez-vous ? Quelle propriété, faisant intervenir l’ensemble des
diviseurs communs à Net M, semble invariante pour cette itération ? Preuve de l’invariant :
– montrez que les valeurs initiales de met nvérifient l’invariant.
– supposons l’invariant vrai à l’itération k; supposons que mk> nk>0. Quelles sont les valeurs de mk+1 et
nk+1 ? Soit dun diviseur commun à mket nk.ddivise-t-il mk+1 et nk+1 ? Inversement un diviseur commun
de mk+1 et nk+1, divise-t-il mket nk?
Supposons que le tant que s’arrête avec n= 0. Quels sont les diviseurs communs à net m? Quel est le plus
grand de ces diviseurs ? Conclure que l’algorithme calcule le pgcd de Met N.
4. Montrez que l’algorithme 12 s’arrête. Faites une trace de l’algorithme pour a= 18. Donnez un invariant liant
les valeurs de pet de i, un autre liant qet i. Montrez ces invariants. Montrez que l’algorithme est correct.
5. (*) Montrez en donnant un invariant que l’algorithme 7 est correct.
6. Algorithme 14. À l’aide de traces, trouvez une relation liant les valeurs des variables Vet i, puis celles de R
et i. Prouvez ces invariants. Que calcule cet algorithme ?
Écriture d’algorithme et de preuve
1. Réécrivez l’algorithme de recherche séquentielle dans un tableau trié vu en cours et donnez en un invariant.
2. Donnez un algorithme calculant le produit de 2 entiers par simples additions successives. Vous utiliserez un
Tant Que pour votre itération. Faites-en la preuve.
3. On cherche un algorithme pour le problème suivant :
Algorithme 10 :rechDichoVersion2(dT : tableau d’entier,de : entier, rpresent : booléen, rind : entier)
Données :Tun tableau d’entiers triés ;e∈N
Résultat :present =Vrai si et seulement si e∈T; Si present alors ind= min{i∈[0 . . . taille(T)[: T[i] = e}
Modifiez l’algorithme de recherche dichotomique vu en cours pour avoir l’invariant suivant :
> e< e
FinDeb0 taille(T)−1
4. Écrivez un algorithme indicePrédécesseur procédant par dichotomie qui étant donné un tableau d’entier trié
Tet un entier xrenvoie -1 si tous les éléments de Tsont supérieurs ou égaux à xet sinon renvoie le plus grand
indice ide Ttel que T[i]< x.
Algorithme 11 :f(dn : entier) :entier
Données :nun entier strictement positif
Résultat : Renvoie fib(n)
Variables : i∈N, r1∈N, r2∈N, r3∈N;
début
i←0;r1←0;r2←1;
tant que i < n faire
r3←r1;r1←r2;r2←r3+r2;i←i+ 1;
fin tq
renvoyer ????;
fin algorithme
Algorithme 12 :Logentier(da : entier ; ri : entier)
Données :aun entier strictement positif
Résultat :i=bLog2ac, i.e. ivérifie que 2i6a < 2i+1
Variables p, q, i : Entiers ;
début
i←0;p←1;q←2;
tant que q≤afaire
p←q;q←p+p;i←i+ 1 ;
fin tq
renvoyer i
fin algorithme
Algorithme 13 :CC(dX :entier, rZ :entier)
Données :X∈N
Résultat :Z∈N
Variables : A, B, C ∈N
début
A←1;B←0;C←X;Z←0;
tant que C > 0faire
Z←Z+A+B;B←B+ 2 ×A+ 1 ;
A←A+ 3 ;C←C−1;
fin tq
fin algorithme
Algorithme 14 :g(dn : entier) :entier
Données :n∈N∗
Résultat : Renvoie l’entier ? ? ?
Variables : R, V, i ∈N;
début
R←1; V←1; i←1;
tant que i < n faire
V←2∗V;R←R+V;i←i+ 1;
fin tq
renvoyer R;
fin algorithme