TD 6 : Compression

publicité
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
Téléchargement