1Fermer3
RHJPPLe 03/04/2012 à 23:17
Tu dois pouvoir trouver la compression optimale* avec l'algorithme de Viterbi.

n est le nombre de bits par valeur et m est la longueur en bits des longueurs dans ton codage.

Il y a 1 + 2n états à chaque instant dans le treillis qui représentent le type d'écriture courant : l'état d'écriture littérale et les 2n états d'écriture d'une valeur particulière.

Les transitions entre deux états du même type ont un coût de n bits pour l'écriture littérale alors que le coût est de 0 bit pour les valeurs particulières. Les transitions entre des types d'état différents ont un coût de 1 + m + n bits.
Bien sûr, les transitions impossibles (comme celles qui amènent aux types d'état de valeur particulière qui ne correspondent pas à la valeur courante) ont un coût infini.

Pour prendre en compte m, on peut ajouter une variable d'état qui est un compteur représentant la longueur du type courant. Cette variable est incrémentée et est propagée au travers des transitions lorsque le type reste le même. Si lors d'une telle transition, la variable dépasse sa valeur limite, alors elle est remise à 0 et le coût de la transition est incrémenté de 1 + m bits pour la valeur littérale et de 1 + m + n bits pour les valeurs particulières. Attention, dans ce cas, l'algorithme n'est plus optimal mais les résultats devraient être très bons.

*Dans le cas où tu n'as jamais besoin de plus de m bits pour représenter une longueur.