Une petite demonstration du fonctionnement de la compression LZW

Cette applet a été faite dans le cadre d'un TP/Projet  informatique destiné à faire connaissance avec

le langage JAVA. Ce projet a été initie dans le cadre de la formation continue dispensée par le CNAM/CAMOS.

Le module correspondant est la valeur d'acceuil et de reconversion informatique débouchant sur un DEST.Diplome équivalent a BAC+4.

Cette valeur est destinée a ceux dont les origines profesionnelles ou scolaires ne sont pas en rapport avec la programmation et l'informatique pure. Comme quoi rien n'est impossible.

Faisons un peut de technique:

Le projet a pour but de montrer comment fonctionne la Compression LZW .

    Petit historique:

       La technique de compression et décompression LZW à été inventée par trois personnes que sont Lempel et Ziv. Ils ont conçu cet algorithme en 1977. Par la suite Welch l'a amélioré en 1984.C'est un algorithme de compression sans perte. Il existe d'autres variantes de LZW qui se nomment LZ**.

*Le brevet a été déposé par Unysis.  

On a fréquemment demandé à Unisys si une licence d'Unisys est exigée afin d'utiliser le logiciel LZW obtenu par téléchargement sur Internet ou depuis d'autres sources. La réponse est simple. Dans tous les cas, une licence écrite ou un rapport signé par un représentant autorisé d'Unisys est exigé d'Unisys pour toute utilisation, vente ou distribution de n'importe quel logiciel (y compris les logiciels appelés "freeware"), et/ou matériel fournissant les capacités de conversion LZW (par exemple, logiciel téléchargé)

La variante non brevetée est le LZ77.

   Définition de la compression:

    La compression de données informatiques consiste à réduire la taille de l'information pour le stockage de cette information et son transport.        

    Description:

    Cet algorithme réduit la taille des chaînes de caractères (c’est-à-dire les mots récurrents.).

Il  utilise un dictionnaire c’est-à-dire une table de données contenant des chaînes de caractères.
Au cours du traitement de l’information, les chaînes de caractères sont placées une par une dans le dictionnaire. Lorsqu’une chaîne est déjà présente dans le dictionnaire, son code de fréquence d’utilisation est incrémenté. Les chaînes de caractères ayant des codes de fréquence élevés sont remplacées par un " mot " ayant un nombre de caractères le plus petit possible et le code de correspondance est inscrit dans le dictionnaire. On obtient ainsi une information encodée et son dictionnaire.

Compression (Pour l'Algo de L'Applet, Voir le cours)

Décompression (Algo utilisé dans L'Applet)

STRING = get input character
   WHILE there are still input characters DO
       CHARACTER = get input character
IF STRING+CHARACTER is in the string table then
STRING = STRING+character
ELSE
output the code for STRING
add STRING+CHARACTER to the string table
STRING = CHARACTER
END of IF
END of WHILE
output the code for STRING
Read OLD_CODE
output OLD_CODE
WHILE there are still input characters DO
Read NEW_CODE
IF NEW_CODE is not in the translation table THEN
STRING = get translation of OLD_CODE
STRING = STRING+CHARACTER
ELSE
STRING = get translation of NEW_CODE
END of IF
output STRING
CHARACTER = first character in STRING
add OLD_CODE + CHARACTER to the translation table
OLD_CODE = NEW_CODE
END of WHILE

D'apres LZW Data Compression by Mark Nelson Dr. Dobb's Journal October, 1989

Liens:

Un descriptif de l'applet Compress Articles et explications Un Site interresant
Le projet au format ZIP Sun Download Download JRE 1.3l Le Site de Sun Java 1.3

Voir l'applet

La Documentation de L'applet au format JAVA DOC html     

 

 Infos générales:

La combinaison de LZW et d'autres algorithmes de compression ont donné naissance à des produits très connus comme par exemple PKZIP,RAR. 

Cette méthode est peu efficace pour les images mais donne de bons résultats pour les textes et les données informatiques en général (plus de 50%). Et poutant elle est utilisée pour le format GIF.

Pour infos :  

Si l'applet ne fonctionne pas correctement sachez qu'elle a été faite avec le JDK 1.3 de SUN . D'autres part pour des raisons de frime, de nouvelles technologies enfin bref, pour être à la mode l'interface est entièrement faite en SWING. Donc PLug-In 1.3_0_0_2 de rigueur.

En fait je pense que SWING est beaucoup plus professionnelle que AWT. Elle est beaucoup plus riche et permet de faire de petites merveilles au niveau des applications Java1.3. (Elle est entièrement écrite en Java) En ce qui concerne les Swing Applet, on peut dire que l'applet que je vous presente est un peut en avance sur son temps, car voir des applet sur le WEB faites avec SWING est encore assez rare.(Nestscape 6 est compatible SWING) Ceci est du aux différents navigateurs qui ne supporte pas encore la plate-forme JAVA 1.3. Voir dans les prochains mois les évolutions des différents navigateurs.

Fait par Schild Patrick le 15/06/2001  schild.patrick@wanadoo.fr