Block Sorting

Contrairement aux sujets précédents, vous avez une totale liberté d'implémentation. Vous devez implémenter l'algorithme de block sorting sur un flot d'octet en entrée, l'entrée sera compressé comme un bloc unique de données, donc en une seule fois. Il sera implémenté comme une série de filtres. Vous pouvez regarder les explications sur l'algorithme.

L'algorithme comprend de nombreuses phases, l'ordre d'enchainement des phases n'est pas celui que vous allez programmer, en effet vous allez programmer des plus au moins intéressantes. Tous ces algorithmes se programment simplement (pas de if imbriqués, ou de for) et en très peu de lignes. Si vous lancez dans des choses compliquées c'est que vous vous trompez.

Coeur de l'algorithme

En entrée une suite d'octets, en sortie : le nombre d'octets + le numéro de la ligne initiale + la dernière colonne de la matrice.

Coeur de l'algorithme : L'inverse

Inverse du filtre précédent. L'application des deux filtres doit redonner exactement le fichier initial.

Move to front

On entrée on prend le fichier généré par le coeur de l'algorithme, on sortie on utilise le même format. On remplace chaque caractère par son code pris dans une table. Chaque fois qu'un caractère est généré, il passe en première position dans la table et pousse les autres vers le bas pour boucher le trou.

Move to front : inverse

Inverse de la précédente.

RLE

Remplacer les suites de 0 par un entier 0 puis le nombre de zéros. Utilisez un égalisateur de probabilité en sortie.

RLE : inverse

Inverse de la précédente.

Tests

Triturer les algorithmes pour obtenir le meilleur taux de compression. Cette partie devra être rédigé et un rapport papier devra être rendu.


Thierry EXCOFFIER
Last modified: Tue Feb 15 10:47:44 CET 2005