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