Я изучаю 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) + ч во второй последней строке кода.
Спасибо.
[страница wikipedia] (http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch) имеет полное пошаговое кодирование и декодирование. Что вас беспокоит? –
Одна концептуальная проблема заключается в том, что «состояние» декодера включает в себя бит, оставшийся от предыдущего вызова - это не простой процесс 1,2,3 с разделяемыми шагами. –
@Paul Rubel Я отредактировал свой вопрос, чтобы более четко выразить свою проблему. Надеюсь, этого достаточно. – Ghost