begin process at 2012 05 27 13:29:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > ALGORITHME MOVE TO FRONT (MTF)

ALGORITHME MOVE TO FRONT (MTF)


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :mtf, bwt, compression, rle, huffman Niveau :Initié Date de création :28/02/2006 Vu / téléchargé :6 131 / 194

Auteur : noaie

Ecrire un message privé
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

voici une implémentation de la mft, cet article est la suite de mon code source sur <link rel="la BWT" href="http://www.cppfrance.com/codes/BWT-BURROWS-W HEELER-TRANSFORM_36246.aspx" />

la mtf consite a transformer une chaine de caractere, avec des caracteres a répétitions
exemple:
la phrase suivante 'BCCCBB' a transformer.
a l'intialisation on a un tableau d'index[0..255] = [0]...[A][B][C][D]...[255]
- 1er carractere 'B', on ecrit la position de B en sortie et on fait une rotation des valeurs des index.
ainsi tableau d'index[0..255] = [b][0]...[A][C][D]...[255]
- 2nd carractere 'C', on ecrit la position de C, et rotation des index.
tableau d'index[0..255] = [C][B][0]...[A][D]...[255]
- 3em carractere 'C', ecrit la position de 'C' = 0.
- 4em carractere 'C', ecrit la position de 'C' = 0.
- 5em carractere 'B', ecrit la position de 'B' = 1, rotations des index
tableau d'index [0..255] = [B][C][0]...[A][D]...[255]
- 6em carractere 'B', ecrit la position de 'C' = 0.

donc la mtf s'utlise apres la BWT, cela a pour avantage de laisser beaucoup de 0 pour la compression.

voila si vous avez des questions, des remarques, je suis preneur
    

Source

  • le fichier definition.h
  • --------------------------------------------
  • #define BYTE unsigned char
  • le fichier mtf.h
  • --------------------------------------------
  • void mtf(BYTE *source, BYTE *destination, int sizesrc) {
  • int i=0, index, pos;
  • BYTE tab[256];
  • for (index=0; index<256; index++) tab[index]=index; // initialisation du tableau d'index
  • for (i=0; i<sizesrc; i++){ // parcourt du buffer source
  • if (source[i]==tab[0]) { // la valeur courante est elle egale a l'index 0
  • destination[i]=0; // oui ecrire 0
  • } else { // sinon
  • for(pos = 0; tab[pos] != source[i]; ++pos); // recherche du nouvelle l'index
  • for(index=pos; index>0; index--) tab[index] = tab[index-1]; // index trouve rotation des index.
  • tab[0] = source[i];
  • destination[i] = pos; // ecriture de l'index trouvé.
  • }
  • }
  • }
  • le fichier imtf.h
  • --------------------------------------------
  • void imtf(BYTE *source, BYTE *destination, int sizesrc) {
  • int i=0, index, pos;
  • BYTE tmp, tab[256];
  • for (index=0; index<256; index++) tab[index]=index; // initialisation du tableau d'index
  • for (i=0; i<sizesrc; i++){ // parcourt du buffer a inverser.
  • if (source[i]==0) { // si s'agit de la meme valeur originale
  • destination[i]=tab[0]; // ecrire cette valeur
  • } else { // sinon
  • pos = tab[source[i]]; // recherche de la nouvelle valeur
  • for(index=source[i]; index>0; index--) tab[index] = tab[index-1]; // rotation des index
  • tab[0] = pos;
  • destination[i] = pos; // ecrire cette valeur
  • }
  • }
  • }
  • le fichier main.c
  • --------------------------------------------
  • /* --------------------------- move to front ----------------------------- */
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include "definition.h"
  • #include "mtf.h"
  • #include "imtf.h"
  • int main(int argc, char *argv[]){
  • BYTE *phrase="AAACACCAABBBBBB";
  • BYTE *dest;
  • BYTE *ori;
  • // préparation des buffers necessaire dest et ori
  • dest = (BYTE *) malloc(strlen(phrase)*sizeof(BYTE)+1); dest[strlen(phrase)]=0x0;
  • ori = (BYTE *) malloc(strlen(phrase)*sizeof(BYTE)+1); ori[strlen(phrase)] =0x0;
  • // calcul de la mtf et son inverse
  • mtf(phrase, dest, strlen(phrase));
  • imtf(dest, ori, strlen(phrase));
  • // affichage pour comparer
  • printf("phrase '%s'\n", phrase);
  • printf("imtf '%s'\n", ori);
  • system("PAUSE");
  • return 0;
  • }
le fichier definition.h
--------------------------------------------
#define BYTE unsigned char


le fichier mtf.h
--------------------------------------------
void mtf(BYTE *source, BYTE *destination, int sizesrc) {
   int i=0, index, pos;
   BYTE tab[256];
  
   for (index=0; index<256; index++) tab[index]=index; // initialisation du tableau d'index 

   for (i=0; i<sizesrc; i++){       // parcourt du buffer source
       if (source[i]==tab[0]) {     // la valeur courante est elle egale a l'index 0
          destination[i]=0;         // oui ecrire 0
       } else {                     // sinon 
          for(pos = 0; tab[pos] != source[i]; ++pos);                  // recherche du nouvelle l'index
          for(index=pos; index>0; index--) tab[index] = tab[index-1];  // index trouve rotation des index.
          tab[0] = source[i];
          destination[i] = pos;                                        // ecriture de l'index trouvé.
       }
   }
}

le fichier imtf.h
--------------------------------------------
void imtf(BYTE *source, BYTE *destination, int sizesrc) {
   int i=0, index, pos;
   BYTE tmp, tab[256];

   for (index=0; index<256; index++) tab[index]=index; // initialisation du tableau d'index 

   for (i=0; i<sizesrc; i++){     // parcourt du buffer a inverser.
       if (source[i]==0) {        // si s'agit de la meme valeur originale
          destination[i]=tab[0];  // ecrire cette valeur
       } else {                   // sinon
          pos = tab[source[i]];   // recherche de la nouvelle valeur
          for(index=source[i]; index>0; index--) tab[index] = tab[index-1];  // rotation des index
          tab[0] = pos;        
          destination[i] = pos;   // ecrire cette valeur
       }
   }
}

le fichier main.c
--------------------------------------------
/* --------------------------- move to front ----------------------------- */
#include <stdio.h>
#include <stdlib.h>
#include "definition.h"
#include "mtf.h"
#include "imtf.h"


int main(int argc, char *argv[]){
   BYTE *phrase="AAACACCAABBBBBB";
   BYTE *dest;
   BYTE *ori;
   
   // préparation des buffers necessaire dest et ori
   dest = (BYTE *) malloc(strlen(phrase)*sizeof(BYTE)+1); dest[strlen(phrase)]=0x0;
   ori  = (BYTE *) malloc(strlen(phrase)*sizeof(BYTE)+1); ori[strlen(phrase)] =0x0;

   // calcul de la mtf et son inverse   
   mtf(phrase, dest, strlen(phrase));
   imtf(dest,  ori,  strlen(phrase));
   
   // affichage pour comparer
   printf("phrase '%s'\n", phrase);
   printf("imtf   '%s'\n", ori);
  
   system("PAUSE");	
   return 0;
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip BWT BURROWS-WHEELER TRANSFORM

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture COMPRESSION FICHIERS ALGORITHME HUFFMAN C par xtremejames183
Source avec Zip CODEUR DE HUFFMAN par webis
Source avec Zip LZZ HUFFMAN COMPRESSION par f_l_a_s_h_b_a_c_k
Source avec Zip [C / WIN32] COMPRESSION HUFFMAN par Neo_Fr
Source avec Zip BWT BURROWS-WHEELER TRANSFORM par noaie

Commentaires et avis

Commentaire de psycho81 le 07/04/2006 11:39:07

Oups, finalement le voilà le MFT (désolé noaie :) )

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Compression RLE [ par dark_cross ] probleme je ne compredns pas pourkoi ca renvoye pas la bonne chose #include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;//lit le fichier caractere par car compression RLE [ par NYHC ] Slt,y'aurait-il kelkun ki pourrai me filer un coup de main?j'aurai besoin d'un programme en c pour compresser et décompresser des fichiers tels que de compression et c++ [ par fakbill ] A l'adresse http://www.cjkware.com/wamckee/huffman.zip j'ai touvé une implémentation en c++ de l'algo de huffman.Pb: Je ne cromprends rien à la façon compression RLE pour un bitmap [ par mat74 ] salutvoila en fait j'essaie de compresser un bitmap 8 bits avec la m&#233;thode RLE. j'ai compris la m&#233;thode mais je n'arrive a rien parce qu'il Compression JPEG [ par inkognitodz ] S.V.P. J'ai besoin du code (C++Builder) qui permet de compresser d Compression avec huffman sous SCILAB si possible Decompression aussi [ par Doser ] Besoin d'aide j suis un peu coincé compression et décompression un fichier texte selon l'algorithme de HUFFMAN [ par sarasofia ] [b]salut tout le monde s'il vous plaît[^^sad1] j ai besoin d'un programme de compression texte selon l algorithme de Huffman en C,C++, Matlab s'il vou algorithme de huffman( compression) [ par flamme19 ] sa[size=200]lut, je cherche un programme en c++ qui fait la compression, puis la décompression d'un texte donné en utilisant l'algorithme de huffman.. compression de huffman [ par chiheb1106 ] Est-ce qu'il y a un algorithme en C qui permet de réaliser la compression et la décompression d'un fichier texte selon la méthode de Huffman sans util compression des images fixes [ par mysoul22 ] Bonjour, Je veux implémenter les algorithmes de compression SPIHT et LZW, un etude comparative, sous c++ builder 6 pour compresser des images fixes n


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,246 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales