TD 8 – Révisions

publicité
TD 8
Licence 3 Info et Math/Info
TD 8 – Révisions
Exercice 1 Combien de lignes (en notation asymptotique θ(.)) écrit le programme suivant
(justifier) :
function fun(n)
if (n>1) then
print_line ("encore une") ;
fun(n/2) ;
fun(n/2) ;
Exercice 2 On se donne un tableau T de n éléments entiers (non triés). On aimerait retirer
en temps θ(n.log(n)) tous les doublons de T . Comment faire ?
Exercice 3 Donner un algorithme efficace en temps, et qui utilise peu de mémoire, pour
réarranger les éléments d’un tableau de telle sorte que chaque élément négatif est avant tout
élément positif.
Exercice 4 On considère la récurrence suivante : T (n) = 2T (n/2) + 5n.log2 (n) avec T (1) =
1. Dire lesquelles de ces affirmations sont vraies :
1. T (n) = θ(n.log2 (n))
4. T (n) = θ(n)
2. T (n) = Ω(n.log2 (n))
3. T (n) = θ(n.(log2 (n))2 )
3
5. T (n) = O(n.(log(n)) ) 6. T (n) = θ(n.(log5 (n))2 )
Exercice 5 Calculer la distance d’édition entre EXERCICES et EXAMEN avec l’algorithme
vu en cours.
Exercice 6 Multiplication : Soit un ensemble S muni d’une opération · : S 2 → S associative, i.e. e1 · (e2 · e3 ) = (e1 · e2 ) · e3 pour tout e1 , e2 , e3 ∈ S. En général, en fonction du type
des éléments de S, il peut être moins coûteux de calculer (e2 · e3 ) puis e1 · (e2 · e3 ), plutôt
que (e1 · e2 ) puis (e1 · e2 ) · e3 .
On veut calculer ici e1 · e2 · · · · · en où e1 , . . . , en ∈ S sont donnés en entrée. On veut
déterminer le parenthésage de coût minimal. Pour cela on suppose disposer d’une fonction
de coût C qui à tout 1 ≤ i ≤ j < k ≤ n associe le coût C(i, j, k) de multiplier deux éléments
eij et e(j+1)k , où eij = ei · . . . ej et e(j+1)k = ej+1 · · · · · ek .
1. Donner un algorithme de programmation dynamique qui permet de calculer le coût
minimal pour calculer e1 · · · · · en , et retourne le parenthésage associé et donner sa
complexité asymptotique. Idée : introduire une fonction K(i, k) qui représente le coût
minimal pour calculer ei ·· · ··ek . Pour calculer les valeurs de K, itérer sur des différences
k − i croissantes.
2. Supposons que S soit l’ensemble des matrices d’entiers. Pour tout e, f ∈ S, à quelle
condition e · f est bien défini ? Quel est le coût de calculer e · f avec l’algorithme naïf ?
Si on vous calculer le produit de n matrices, comment définir la fonction C ?
1
Téléchargement