LZW алгоритм декомпрессии
Я пишу программу для назначения, которая должна реализовывать сжатие / декомпрессию LZW. Для этого я использую следующие алгоритмы:
-compression
<code>w = NIL; while ( read a character k ) { if wk exists in the dictionary w = wk; else add wk to the dictionary; output the code for w; w = k; } </code>
-decompression
<code>read a character k; output k; w = k; while ( read a character k ) /* k could be a character or a code. */ { entry = dictionary entry for k; output entry; add w + entry[0] to dictionary; w = entry; } </code>
Для стадии сжатия я просто выводю целые числа, представляющие индекс для словарная статья, также начальный словарь состоит из символов ASCII (0 - 255). Но когда я прихожу на стадию декомпрессии, я получаю эту ошибку например, если я сжимаю текстовый файл, состоящий только из «booop» он пройдет через эти шаги для создания выходного файла:
<code>w k Dictionary Output - b - - b o bo (256) 98 (b) o o oo (257) 111 (o) o o - - oo p oop (258) 257 (oo) p - - 112 (p) </code>
output.txt: 98 111 257 112
Затем, когда я прихожу, чтобы распаковать файл
<code>w k entry output Dictionary 98 (b) b b 111 (o) o o bo (256) o 257 (error) </code>
257 (oo) еще не добавлено. Может ли кто-нибудь увидеть, где я здесь не так, потому что я озадачен. Алгоритм неверен?