2013-09-12 3 views
0

Я изучаю LZW algorithm для сжатия данных с недавнего времени. Я понял алгоритм кодирования, однако я не могу использовать алгоритм декодирования, который преобразует закодированные данные обратно в исходную форму.Алгоритм декомпрессии данных LZW

Ниже псевдокод для декодера взяты из here

string entry; 
char ch; 
int prevcode, currcode; 
... 

prevcode = read in a code; 
decode/output prevcode; 
while (there is still data to read) 
{ 
    currcode = read in a code; 
    entry = translation of currcode from dictionary; 
    output entry; 
    ch = first char of entry; 
    add ((translation of prevcode)+ch) to dictionary; 
    prevcode = currcode; 
} 

Я ищу шаг за шагом объяснение этого кода.

EDIT: То, что я не понимаю, заключается в следующем: Почему у нас есть 3 разные строки, а именно записи, prevcode и currcode? По-моему, нужно быть закодированной строкой, а вторая - выходной строкой, которая создается. Так что же такое третья строка?

Во-вторых, я действительно не понимаю, цель (перевод prevcode) + ч во второй последней строке кода.

Спасибо.

+0

[страница wikipedia] (http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch) имеет полное пошаговое кодирование и декодирование. Что вас беспокоит? –

+1

Одна концептуальная проблема заключается в том, что «состояние» декодера включает в себя бит, оставшийся от предыдущего вызова - это не простой процесс 1,2,3 с разделяемыми шагами. –

+0

@Paul Rubel Я отредактировал свой вопрос, чтобы более четко выразить свою проблему. Надеюсь, этого достаточно. – Ghost

ответ

2

Если вы понимаете компрессионную часть, вы также должны понимать, что для декомпрессии для работы декомпрессор должен перестроить таблицу сжатия из распакованных данных точно так же, как она была создана во время сжатия - в противном случае коды, входящие в это не простые коды символов будут бессмысленными. Вот что делают эти дополнительные утверждения.

Смежные вопросы