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 fonctiond’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