TD d’algorithmique avanc´ee TD 2 : r´ecursivit´e
Jean-Michel Dischler et Fr´ ed´ eric Vivien
Suite de Fibonacci
La suite de Fibonacci est d´efinie comme suit :
Fib(n) =
1 sin= 0
1 sin= 1
Fib(n−1) + Fib(n−2) sinon.
1. ´Ecrivez un algorithme r´ecursif calculant Fib(n).
2. Montrez que la complexit´e (en nombre d’additions) de cet algorithme est en Ω(2n2).
3. ´Ecrire un algorithme r´ecursif qui calcule, pourn >0, le couple (Fibonacci(n),Fibonacci(n−1)).
4. Utilisez l’algorithme pr´ec´edent pour ´ecrire un nouvel algorithme calculantFibonacci(n).
5. Qu’elle est la complexit´e (en nombre d’additions) de cet algorithme ?
Op´ erations ensemblistes
Dans cette partie on consid`ere des ensembles repr´esent´es par des tableaux, certains ensembles seront tri´es et d’autres pas.Toutes les solutions propos´ees doivent ˆetre r´ecursives.
1. Nous voulons un algorithme Appartenance(A, x) qui recherche si un ´el´ement x appartient `a l’en- sembleA. Sixappartient effectivement `a A, l’algorithme renverraVrai, etFauxsinon.
(a) Cas des ensembles non tri´es : i. ´Ecrivez un tel algorithme.
ii. Quelle est sa complexit´e en nombre de comparaisons ? (b) Cas des ensembles tri´es (dans l’ordre croissant) :
i. ´Ecrivez un tel algorithme.
ii. Quelle est sa complexit´e en nombre de comparaisons ?
iii. Utilisez une recherche dichotomique pour am´eliorer votre algorithme.
iv. Quelle est la complexit´e de votre nouvel algorithme ?
2. Nous voulons maintenant un algorithmeUnion(A,B) qui nous renvoie l’union des deux ensembles qui lui sont pass´es en argument.
(a) Cas des ensembles non tri´es : i. ´Ecrivez un tel algorithme.
ii. Quelle est sa complexit´e ?
(b) Cas des ensembles tri´es (dans l’ordre croissant) : i. ´Ecrivez un tel algorithme.
ii. Quelle est sa complexit´e ?
3. Nous voulons maintenant un algorithmeIntersection(A,B) qui nous renvoie l’intersection des deux ensembles qui lui sont pass´es en argument.
(a) Cas des ensembles non tri´es : i. ´Ecrivez un tel algorithme.
ii. Quelle est sa complexit´e ?
(b) Cas des ensembles tri´es (dans l’ordre croissant) : i. ´Ecrivez un tel algorithme.
ii. Quelle est sa complexit´e ?
4. Nous voulons maintenant un algorithme Diff´erence(A, B) qui nous renvoie la diff´erence des deux ensembles qui lui sont pass´es en argument (La diff´erence de Aet deB, not´ee A\B est l’ensemble des
´
el´ements deA n’appartenant pas `aB).
(a) Cas des ensembles non tri´es : i. ´Ecrivez un tel algorithme.
ii. Quelle est sa complexit´e ?
(b) Cas des ensembles tri´es (dans l’ordre croissant) : i. ´Ecrivez un tel algorithme.
ii. Quelle est sa complexit´e ?