Algorithmique - ROB3 TD3 - Diviser pour régner Exercice 1 (Triominos) Un triomino est une tuile en forme de L formée de trois carrés 1 × 1. Le problème est de n n couvrir par des triominos un échiquier troué 2 × 2 . Les triominos peuvent être orientés de façon arbitraire, mais ils doivent couvrir toutes les cases de l'échiquier (exceptée la case manquante) sans chevauchement. Question 1.1 Proposer une méthode de type diviser pour régner pour résoudre ce problème. Question 1.2 Prouver la validité de la méthode proposée. Question 1.3 On considère maintenant un échiquier 2n × 2n avec deux cases manquantes, qu'on cherche à couvrir de triominos sans chevauchement. Peut-on trouver un algorithme ? Question 1.4 On considère maintenant un échiquier carré comportant un nombre pair de cases, privé de deux angles diagonalement opposés, qu'on cherche à couvrir de dominos sans chevauchement. Peut-on trouver un algorithme ? Exercice 2 (Élément majoritaire) A[1..n]. Un élément majoritaire est un élément (donc si n = 6 ou n = 7, un élément est majoritaire On considère dans cet exercice un tableau apparaissant dans plus de n/2 positions si il apparaît dans au moins 4 positions). Les éléments ne peuvent être ordonnés (ce ne sont pas nécessairement des entiers), mais on peut tester si A[i] = A[j] (on peut voir le tableau comme un chier GIF, par exemple). On cherche à déterminer si le tableau A comporte un élément majoritaire. Question 2.1 Montrer comment résoudre ce problème en Question 2.2 Montrer comment résoudre ce problème en ments du tableau A sont à valeurs dans {1, . . . , k} avec k O(n log n) O(n) tests. si on suppose que les élé- une constante. Exercice 3 (Algorithme de Stooge) On considère l'algorithme récursif ci-dessous, qui trie le sous-tableau A[i . . . j]. L'appel initial est Stooge(A,1,n), où dans tout l'exercice que A est un tableau indicé de 1 à n. Pour simplier, on suppose n est une puissance de 3 (autrement dit, n = 3p pour un entier p ≥ 0), ce qui garantit que le reste de la division entière est nul dans tous les appels récursifs. fonction Stooge(tableau A, entier i, entier j) : tableau si (A[i]>A[j]) échanger le contenu de A[i] et A[j]; fin si; si (j-i>1) k := (j-i+1)/3; # quotient de la division entière Stooge(A,i,j-k); # premier 2/3 du tableau Stooge(A,i+k,j); # dernier 2/3 du tableau Stooge(A,i,j-k); # premier 2/3 à nouveau fin si; retourner A; Question 3.1 Montrer par récurrence forte que Stooge(A,1,n) trie le tableau A en ordre croissant. Question 3.2 Soit taille n. T (n) le nombre d'échanges au pire réalisé par Stooge sur un tableau de Ecrire la relation de récurrence permettant de calculer T (n) la complexité de l'algorithme à l'aide du théorème maître. Question 3.3 Est-ce que Stooge est un bon algorithme de tri ? pour n > 2. En déduire