Algorithmique avancée 1 L3 2009 2010 TD 6 : Compression 1 Algorithme de Sardinas & Patterson Si 𝑢, 𝑣 ∈ Σ∗ , on dénit 𝑢 − 𝑣 = {𝑢𝑙+1 . . . 𝑢𝑘 } si 𝑢 = 𝑢1 . . . 𝑢𝑘 et 𝑣 = 𝑢1 . . . 𝑢𝑙 (𝑙 ≤ 𝑘 ) et 𝑢 − 𝑣 = ∅ sinon (e.g. 𝑎𝑏𝑐 − 𝑎 = {𝑏𝑐}, 𝑎𝑏 − 𝑏𝑎 = ∅). Étant donné 𝑆 ⊆ Σ∗ , on dénit ∪ 𝑇0 = 𝑢−𝑣 Exercice 1. 𝑢,𝑣∈𝑆 𝑢∕=𝑣 et on dénit 𝑇 comme étant le plus petit ensemble qui contient 𝑇0 et qui satisfait l'inégalité ∪ ((𝑠 − 𝑣) ∪ (𝑣 − 𝑠)) ⊆ 𝑇 𝑠∈𝑆,𝑣∈𝑇 a. Montrer que 𝑆 est uniquement déchirable ssi 𝑇 ne contient pas le mot vide. b. Quel 𝑆 est uniquement déchirable : 𝑆0 = {0, 10, 11} 𝑆4 = {00, 01, 10, 11} 𝑆1 = {0, 01, 11} 𝑆2 = {0, 01, 10} 𝑆5 = {110, 11, 10} 𝑆3 = {0, 01} 𝑆6 = {110, 11, 100, 00, 10} c. Donner un algorithme (polynômial) pour décider si 𝑆 est un code. Estimer la complexité de l'algorithme. (Optimalité compétitive). Supposons que 𝑝 est t.q. 𝑙𝑜𝑔(1/𝑝(𝑥)) est un entier. Notons 𝑙(𝑥) = 𝑙𝑜𝑔(1/𝑝(𝑥)) (les longueurs des mots dans le codage Shannon-Fano). Notons 𝑙′ (𝑥) les longueurs des mots de n'importe quel code. Montrer que 𝑃 𝑟[𝑙(𝑥) < 𝑙′ (𝑥)] ≥ 𝑃 𝑟[𝑙(𝑥) > 𝑙′ (𝑥)] Exercice 2 ′ (avec égalité ssi ∀𝑥 : 𝑙′ (𝑥) = 𝑙(𝑥)). (Indication : 𝑠𝑔𝑛(𝑙(𝑥) − 𝑙′ (𝑥)) ≤ 2𝑙(𝑥)−𝑙 (𝑥) − 1 pour 𝑥 entier) 2 Extra Exercice 3. On considère 𝑛 pièces de monnaie, parmi lesquelles il existe au plus une pièce fausse (qui est soit plus lourde, soit plus légère que les autres). On peut utiliser une balance pour comparer le poids de deux ensembles de pièces. a. Si on a le droit d'utiliser la balance 𝑘 fois, donner une borne supérieure pour le plus grand 𝑛 tel qu'on puisse trouver (si elle existe) la pièce fausse et déterminer si elle est plus légère/lourde. Stefan Ciobaca Camille Vacher Jules Villard ENS de Cachan Algorithmique avancée 2 L3 2009 2010 b. Donner une stratégie pour déterminer s'il y a une pièce fausse, laquelle est-ce le cas échéant, et si elle est plus lourde/légère, parmi 12 pièces, en utilisant la balance 3 fois. c. Le but de cet exercice est de créer un algorithme polynomial en 𝑛 pour calculer le nombre minimal de requêtes à la balance pour déterminer complètement la conguration dans laquelles on est. (a) montrer qu'il sut de considérer des requêtes dans lesquelles le nombre de pièces de chaque côté de la balance est égal. (b) supposons qu'on a fait un certain nombre de requêtes (avec le même nombre de pièces de chaque côté) à la balance et qu'on a annoté les pièces avec : un '+' pour chaque fois que cette pièce se trouve sur le plateau le plus lourd un '-' pour chaque fois que cette pièce se trouve sur le plateau le plus léger un '=' pour chaque fois que cette pièce est dans une pesée équilibrée (c) Supposons qu'on a fait un certain nombre de requêtes et qu'on a annoté les pièces. Sous quelles conditions d'annotation est-ce que la conguration nale est uniquement determinée ? (d) Supposons qu'on a fait un certain nombre de requêtes et qu'on a annoté les pièces. Montrer que dans les deux situations suivantes le nombre minimal de requêtes qu'il reste encore à faire pour déterminer de facon unique la conguration de pieces et le même : − = on a annoté la 𝑖-ème pièce avec 𝑎+ 𝑖 fois '+', 𝑎𝑖 fois '−' et 𝑎𝑖 fois '='. − = on a annoté la 𝑖-eme piece avec 𝑏+ 𝑖 fois '+', 𝑏𝑖 fois '−' et 𝑏𝑖 fois '=' et il existe une permutation 𝜋 t.q. 𝑠𝑔𝑛(𝑎𝑖 ) = 𝑠𝑔𝑛(𝑏𝜋(𝑖) ). (𝑠𝑔𝑛(𝑥) ∈ {−1, 0, 1}, selon que 𝑥 soit négatif, nul ou positif) (e) Montrer comment calculer en temps polynomial la matrice 𝑀 [𝑖1 , 𝑖2 , . . . , 𝑖8 ] où 𝑀 [𝑖1 , 𝑖2 , . . . , 𝑖8 ] représente le nombre minimal de requêtes pour arriver au but, étant donné qu'il y a : 𝑖1 pièces annotées avec au moins un +, au moins un −, au moins un = 𝑖2 pièces annotées avec au moins un +, au moins un −, et pas de = etc. 𝑖8 pièces annotées avec rien (f) Conclure qu'on peut déterminer en temps polynomial le nombre minimal de requêtes (g) Comment peut-on optimiser l'algorithme ? Stefan Ciobaca Camille Vacher Jules Villard ENS de Cachan