UM2 - Faculté des Sciences – Feuille TD HLIN301– Septembre 2014 1
Révisions
Donnez un algorithme pour les problèmes suivants :
Algorithme 1 :PlusProche(dT : tableau d’entier, dx : entier, rPP : entier)
Données :T1 tableau d’entiers ; xun entier
Résultat :P P est un des éléments de Tles plus proches de x, c’est à dire P P Tet
i[0..taille(T)[,|xP P | ≤ |xT[i]|
Algorithme 2 :Somme ?(dA : tableau d’entier ,dB : tableau d’entier , dSom :entier) : Booléen
Aet B2 tableaux d’entiers de même taille net Som un entier Résultat : Renvoie Vrai si il existe i, j [0..n 1] tels
que A[i] + B[j] = Som, Renvoie Faux sinon
Algorithme 3 :plusPetitEcart(dT : tableau d’entier) : entier
Données :T: tableau d’entier
Résultat : renvoie le plus petit écart entre 2 éléments distincts de T, autrement dit
min{|T[i]T[j]|avec i, j [0, taille(T)[ et i6=j}
Algorithme 4 :LignesEgales ?(dT : Tableau ) :Booléen
Données :T[0...n 1,0...n 1] un tableau de nlignes et ncolonnes et composé de 0 et de 1
Résultat : renvoie Vrai si et seulement si Tpossède 2 lignes identiques, c’est à dire ssi
i, j [0...n[tels que i6=jet k[0...n[, T [i, k] = T[j, k]
Algorithme 5 :InsérerTabTrié(dr T : tableau d’entier, dm : entier, de : entier)
Données :m < taille(T)1, le sous-tableau T[0..m]est trié %; le sous-tableau T[m+ 1..taille(T)[ est «vide»
Résultat : modifie Ten y insérant eparmi les mpremiers éléments : le sous-tableau T[0..m + 1] est trié
Preuve d’arrêt
Algorithme 6 :AA(dN : entier, rn : entier)
Données :NZ
début
nN;
tant que n6= 0 faire
si npair alors nn2
sinon
nn+ 1
fin si
fin tq
fin algorithme
Algorithme 7 :BB(dN : entier, rf : entier)
Données :NN
Résultat :f=?
Variable : nN
début
nN;f7! ;
tant que n6= 7 faire
si n > 7alors ff×n;nn1
sinon
nn+ 1 ;ff/n
fin si
fin tq
fin algorithme
Algorithme 8 :PGCD(dN, M : entier ) : entier
Données :N, M N
Résultat : renvoie pgcd(N, M )
Variables : n, m N
début
nN;mM;
tant que n6= 0 et m6= 0 faire
si m > n alors mmn
sinon
nnm
fin si
fin tq
renvoyer m+n
fin algorithme
Algorithme 9 :coefBin(dn, p : entier,) :entier
Données :n, p N, n >p>0
Résultat : retourne le coefficient binomial n
p
début
si p=0 ou n=p alors
renvoyer 1
sinon
renvoyer coefBin(n-1,p-1)+coefBin(n-1,p)
fin si
fin algorithme
1. Pour quelles valeurs de Nl’algorithme 6 s’arrête-t-il ?
2. Etablir la preuve d’arrêt de l’algorithme 7. Que calcule cet agorithme ?
3. On considère l’algorithme 8. Dites pour chacune des expressions suivantes si leur valeur est dans Net, dans
l’affirmative, si elle décroît strictement à chaque itération. m;n;mn;nm;|mn|;m+n;mn
Cet algorithme s’arrête-t-il ?
4. Pour l’algorithme 9, donnez une expression entière positive qui décroît strictement à chaque appel récursif.
Propriété invariante
1. Montrez que l’algorithme 13 s’arrête, démontrez les invariants A= 3(XC) + 1 ; B= 3(XC)2.
On admet sans le montrer l’invariant Z= (XC)3. Que calcule alors cet algorithme ?
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=i1),
(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 ;eN
Résultat :present =Vrai si et seulement si eT; 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 : iN, r1N, r2N, r3N;
début
i0;r10;r21;
tant que i < n faire
r3r1;r1r2;r2r3+r2;ii+ 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. irifie que 2i6a < 2i+1
Variables p, q, i : Entiers ;
début
i0;p1;q2;
tant que qafaire
pq;qp+p;ii+ 1 ;
fin tq
renvoyer i
fin algorithme
Algorithme 13 :CC(dX :entier, rZ :entier)
Données :XN
Résultat :ZN
Variables : A, B, C N
début
A1;B0;CX;Z0;
tant que C > 0faire
ZZ+A+B;BB+ 2 ×A+ 1 ;
AA+ 3 ;CC1;
fin tq
fin algorithme
Algorithme 14 :g(dn : entier) :entier
Données :nN
Résultat : Renvoie l’entier ? ? ?
Variables : R, V, i N;
début
R1; V1; i1;
tant que i < n faire
V2V;RR+V;ii+ 1;
fin tq
renvoyer R;
fin algorithme
UM2 - Faculté des Sciences – Feuille TD HLIN301– Septembre 2014 3
Complexité d’algorithmes
1. Donnez, en fonction du paramètre B, le nombre d’affectations, additions, multiplications, comparaisons effec-
tuées par l’algorithme puissance :
Algorithme 15 :puissance(dA : entier, dB : entier, rR : entier)
Données :A, B N
Résultat :R=AB
Variable X, R N;
début
X0 ; R 1;
tant que X<Bfaire
RR * A ; X X+1
fin tq
fin algorithme
2. Quel est, en fonction de N, le nombre d’affectations (lignes 1 et 2) effectuées par l’algorithme ci-dessous ?
(*) Même question en comptant à présent les affectations des lignes 1 et 2, et aussi les affectations «cachées»
effectuées par les itérations «Pour» ?
début
R0;1
pour Ide 1 à Nfaire
pour Jde 1 à Ifaire
RR+ 1 ;2
finpour
finpour
fin algorithme
3. Quels sont les nombres minimum et maximum d’itérations exécutées par l’algorithme 16 sur la donnée T. Quel
est le pire des cas pour cet algorithme. Dans ce pire des cas, combien de fois l’agorithme compare-t-il un élément
de Tavec e? Donnez l’ordre de grandeur de la complexité de cet algorithme. Que calcule-t-il ?
Algorithme 16 :Truc(dT : Tableau d’entier, de : entier) : entier
Données :Tun tableau d’entier trié en ordre croissant ; eun entier
Résultat : entier ...
Variable I, J : entier;
début
I0;
tant que I < taille(T)et T[I]< e faire
II+ 1
fin tq
JI;
tant que J < taille(T)et T[J] = efaire
JJ+ 1
fin tq
renvoyer JI;
fin algorithme
4. Donnez un algorithme minimisant le nombre de multiplications pour le problème :
Données :Xun entier et a0, a1,...,ann+1 entiers correspondant aux coefficients d’un polynôme ; ces coefficients sont
représentés par un tableau a[0..n]d’entiers
Résultat :Rest la valeur du polynôme au point X,R=anXn+an1Xn1+. . . +a2X2+a1X+a0
5. (*) En vous inspirant de l’algorithme «Multiplication Russe » du cours, écrivez un algorithme qui étant donné
2 entiers A, B Ncalcule R=AB. Donnez en fonction du paramètre Bl’ordre de grandeur de la complexité
de votre algorithme. Comparez-la à celle de l’algorithme 15.
6. Étant donné un tableau de nentiers, on cherche à savoir si l’un de ses éléments est égal à la somme des n-1
autres éléments.
Ex : Dans le tableau 3 8 -6 3 -1 9 le 2`eme élément de valeur 8 est égal à la somme des 5 autres.
Une première méthode pour ce problème consiste pour chaque élément du tableau à calculer la somme des
autres éléments et à vérifier si elle est égale à l’élément. Écrivez cet algorithme. Donnez sa complexité.
On peut améliorer, au sens de la complexité, l’algorithme précédent. Écrivez ce deuxième algorithme et donnez
sa complexité.
UM2 - Faculté des Sciences – Feuille TD HLIN301– Septembre 2014 4
7. Écrivez un algorithme plusLgPrefSuff qui étant donné un tableau T[1..n]renvoie le plus grand entier k
[1, n 1] tel que le sous–tableau T[1..k]est à la fois préfixe et suffixe de T. Si un tel sous–tableau n’existe pas
l’algorithme doit renvoyer 0. 1
Par exemple pour le tableau T1=142451424le plus grand sous-tableau préfixe et
suffixe (différent de T1) est 1 4 2 4 . L’algorithme renvoie donc 4.
Pour résoudre ce problème, vous identiefierez un sous–problème que vous spécifierez. Vous en donnerez un
algorithme et évaluerez sa complexité. Donnez alors la complexité de votre algorithme plusLgPrefSuff.
8. Un botaniste étudiant un spécimen de plante a mesuré sa taille toutes les heures. Au début de chaque heure h
il mesure la taille et la note dans un tableau à l’indice h. La taille initiale de la plante est stockée dans l’élément
d’indice 0. Après nmesures, il constate que la plante n’a pas cessé de croître. Il voudrait connaître l’heure au
cours de laquelle la plante a atteint la moitié de sa taille actuelle.
Par exemple si les relevés de taille sont
012345
0 0,75 1,3 1,6 2 3
la plante a atteint la moitié de sa taille actuelle (3m) au cours de la deuxième heure. La réponse attendue par
le botaniste est donc 2.
Donnez un algorithme de complexité O(log2(n)qui étant donné un tableau trié de nmesures calcule l’informa-
tion souhaitée par le botaniste.
9. Soit le problème :
Données : un tableau T[1 . . . n]de valeurs prises dans Z
Résultat :SomM ax :SomMax = 0 si tous les éléments de Tsont négatifs, sinon SomMax est la somme maximale
des sous-Tableaux de T, c’est à dire SomMax est la valeur max de S(a, b)S(a, b) = Σb
i=aT[i]
Exemple : pour le tableau ci-dessous, la somme max est SomMax =S(3,11) = 190.
1 2 34567891011 12 13 14 15
31 -41 59 26 -53 58 97 -93 -23 84 35 -98 -80 -72 -85
(a) Algorithme brutal. Donnez la complexité de l’algorithme suivant :
début
SomM ax 0;
pour i= 1 ànfaire
pour j=iànfaire
S0
pour k=iàjfaire
SS+T[k]
finpour
SomM ax M ax(S, SomMax);
finpour
finpour
fin algorithme
(b) Un peu plus malin : comment améliorer simplement l’algorithme précédent ? Complexité ?
(c) Encore un peu plus malin : approche “Diviser et Résoudre”. Pour trouver la sous-somme maximale
d’un tableau T[d...f], on calcule les sous-sommes maximales des sous-tableaux T[d . . . (d+f)div 2] et
T[1+(d+f)div 2. . . f ]. Où peut alors se situer la sous-somme maximale du tableau T[d...f]? En déduire
un algorithme. Donnez sa complexité.
(d) Toujours plus malin. Le 4ème algorithme maintient l’invariant suivant :
«A l’itération i, SomMax est le Max des S(a, b)pour 1abiet SomMaxDroite est le Max des
S(a, i)pour 1ai
Que faire pour maintenir l’invariant tout en faisant progresser l’indice i? En déduire un algorithme optimal.
1. On pose k6=ncar sinon il n’y aurait pas de problème. En effet pour tout tableau Tde taille n, le sous–tableau T[1..n], c’est à dire
T, est à la fois préfixe et suffixe de T.
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !