TD1 et TD2- Premiers pas

publicité
L3 - Introduction à l’algorithmique (Année 2013/2014) F .Papadopoulos/B. Francesco/G. Lucarelli
TD1 et TD2- Premiers pas
Exercice 1.
Complexité
Pour les algorithmes suivant, calculez leur complexité en fonction des différents paramètres.
AlgoA(n : entier) :
initialisation : i=0;
for (i == 0, i ≤ n, i = i + 2) do
afficher (i) ;
end
AlgoB(n : entier, m : entier) :
initialisation : i=0, j=0;
while (i ≤ m et j ≤ n) do
i ← i+1 ;
j ← j+1 ;
end
AlgoC(n : entier, m : entier) :
initialisation : i=0, j=0;
while (i ≤ m ou j ≤ n) do
i ← i+1 ;
j ← j+1 ;
end
AlgoD(n : entier, m : entier) :
initialisation : i=0, j=0;
while (i ≤ n) do
if j≤ m then
j ← j+1 ;
else
i ← i+1 ;
j ← 1;
end
end
Exercice 2.
Chebyshev
Chebyshev(n : entier ; x : entier) :
if n==0 then
retourner (1) ;
else
if n==1 then
retourner (x) ;
else
retourner (2*x*Chebyshev(n − 1, x)-Chebyshev(n − 2, x)) ;
end
end
1
1. Quel est le résultat de l’appel de Chebyshev(5,2) ? (détailler)
2. Pour tout y ∈ N, quel est le résultat de l’appel de Chebyshev(3,y) ?
3. Quelle est la complexité de cet algorithme ?
Exercice 3.
Recherche séquentielle
On considère un tableau T que l’on suppose trié par ordre croissant. On cherche une valeur clé
dans T (on suppose qu’il existe dans T un élément dont la valeur est bien égal à clé et si plusieurs élément de T ont a la même valeur, alors on cherche l’indice de la première occurrence
de clé).
1. Donner un algorithme itératif qui résout ce problème.
2. À quoi correspond le pire cas ? En déduire un complexité en O de l’algorithme.
3. À quoi correspond le meilleur des cas ? En déduire un complexité en Θ de l’algorithme.
4. Comment faut-il modifier cette algorithme si clé n’appartient pas forcément au tableau ?
Ceci modifie-t-il la complexité de notre algorithme ?
Maintenant, nous supposons que clé apparaît exactement une fois dans le tableau et que toutes
les positions de clé dans le tableau sont équiprobables. Pour 1 ≤ i ≤ n, Ii représente l’événement "clé apparait en position i du tableau T ". Soit c(I) le nombre de comparaisons effectuées
pour l"événement I.
5. Montrer que c(Ii ) = i. En déduire la complexité en moyenne de l’algorithme.
On suppose maintenant qu’il existe une probabilité 1 − q (avec 0 ≤ q ≤ 1) que clé n’apparaisse
pas dans T . On considère maintenant l’événement supplémentaire In+1 : "clé n’est pas dans le
tableau".
6. Montrer que c(In+1 ) = n. Pour tout 1 ≤ i ≤ n + 1, calculer p(Ii ), la probabilité de
l’événement i. En déduire la complexité en moyenne de l’algorithme.
Exercice 4.
Comportements asymptotiques
1. Expliquer pourquoi l’affirmation "Le temps d’exécution est au moins en O(n2 )" n’a pas de
sens ?
2. Peut-on écrire 2n+1 = O(2n ) ? Et 22n = O(2n ) ?
3. Donner les relations d’inclusions entre les ensembles suivants : O(n log2 (n)), O(2n ), O(log2 (n)),
O(1), O(n2 ), O(n3 ) et O(n).
4. Montrer que si f (n) ∈ O(g(n)) alors g(n) ∈ Ω(f (n)).
5. Montrer que si f (n) ∈ O(g(n)) alors f (n) + g(n) ∈ O(g(n)).
6. Montrer que f (n) + g(n) ∈ Θ(max(f (n), g(n))).
7. Montrer que O(f (n) + g(n)) = O(max(f (n), g(n))).
Exercice 5.
Soit
Comportements asymptotiques des polynômes
P (n) =
d
X
ai ni
i=0
où ad > 0, un polynôme en n de degré d, et soit k une constante. Utiliser la définition des
notations asymptotiques pour démontrer les propriétés suivantes :
2
1. Si k ≥ d alors P (n) = O(nk ).
2. Si k ≤ d alors P (n) = Ω(nk ).
3. Si k = d alors P (n) = Θ(nk ).
Exercice 6.
Croissance asymptotiques relatives
Indiquer, pour chaque paire d’expression (A, B) du tableau ci-dessous, si A est en O, Ω ou Θ
de B. On suppose que k ≥ 1 et c > 1 sont des constantes. Remplir le tableau suivant :
A
nk
2n
log(n!)
B
cn
2n/2
log(nn )
O
Ω
Θ
X
Exercice 7.
secondes, minutes, heures, jours, mois, années, . . .
6
Considérons qu’un ordinateur exécute 10 opérations par secondes. Calculer le temps d’exécution d’algorithmes de complexité log2 (n), n, n log2 (n), n2 , n3 , 2n pour des entrées de taille
10, 20, 30 et 60.
Exercice 8.
fontion d’Ackermann
La fonctiond’Ackermann A : N × N → N est définie comme suit pour tout m, n ∈ N :
si m = 0

 n+1
A(m, n) = A(m − 1, 1)
A(m, n) =


si m > 0 et n = 0
A(m, n) = A(m − 1, A(m, n − 1)) si m > 0 et n > 0
1. Montrer que pour tout n ∈ N, on a A(1, n) = n + 2.
2. Calculer A(3, 2).
3. Calculer A(4, 4) (vous pouvez utiliser un ordinateur).
Exercice 9.
Chercher la star
On reconnaît une star dans une soirée aux propriétés suivantes :
– tout le monde est capable de la reconnaître ;
– la star ne peut reconnaître personne.
L’objectif de ce problème est de trouver des algorithmes pour identifier les stars de la soirée.
Pour cela vous disposez de l’opération ”i → j” qui consiste à demander à la personne i si elle
connaît la personne j.
1. Combien de stars peut-il y avoir dans la même soirée ?
2. Proposez divers algorithmes pour ce problème et comparez leur complexité.
Exercice 10.
Immeuble
Un immeuble est constitué de n étages. On dispose de k pots de fleurs. Il existe un étage i tel
que ∀j ∈ {0, . . . , n} si on lâche un pot de fleurs de l’étage j alors :
– si j ≥ i alors le pot de fleur se casse en atterrissant ;
– si j < i alors le pot de fleur résiste à chute.
L’objectif de ce problème est de trouver l’étage i avant de casser tous les pots de fleurs et en
minimisant le nombre de lâchers.
3
1. Montrer que si k ≥ log2 (n) alors on peut identifier i en O(log2 (n)) lâchers.
n
2. Montrer que si k < log2 (n) alors on peut identifier i en O(k + 2k−1
) lâchers.
p
3. Montrer que si k = 2 alors on peut identifier i en O( (n)) lâchers.
4
Téléchargement