Widać również, że jeden z tym symboli występuje o wiele częściej niż pozostałe.

Jeśli obliczyć entropię dla danych wejściowych i zakodowanych, mamy: ciąg źródłowy: stąd ciąg zakodowany: stąd

Entropia ciągu zakodowanego jest wyraźnie mniejsza niż entropia ciągu źródłowego.

Algorytm dekodowania Algorytm dekodowania jest praktycznie taki sam: występuje taka sama tablica i wraz z pojawianiem się kolejnych indeksów wejściowych modyfikowana tak, jak przy kodowaniu.

Przykładowa implementacja w C void mtf_encode_buf (unsigned char *buf_in, unsigned char *buf_out, int size) { int i,j; unsigned char state;

for(i=0; i<256; ++i) state[i] = i; for (i=0; i<size; ++i) { buf_out[i] = state[buf_in[i]]; for (j=0; j<256; ++j) if (state[j] < state[buf_in[i]]) ++state[j]; state[buf_in[i]] = 0;

void mtf_decode_buf (unsigned char *buf_in, unsigned char *buf_out, int size) { int i,j; unsigned char state; unsigned char tmp;

for (i=0; i<256; ++i) state[i] = i; for (i=0; i<size; ++i) { buf_out[i] = state[buf_in[i]]; tmp = state[buf_in[i]]; for (j=buf_in[i]; j; --j) state[j] = state[j-1]; state = tmp;

Kategoria:Algorytmy kompresji bezstratnej