Алгоритм сжатия LZW - PullRequest
       66

Алгоритм сжатия LZW

0 голосов
/ 11 мая 2019

Читая о LZW в Википедии, я подумал о следующем.

Мы находимся в начале процесса кодирования, коды 0 - 255 используются для однобайтовых строк, и следующий размер кода для записи в закодированный файлравно 9:

(бит на строку), (диапазон слотов для строк):
8,0..255
9,256..511
10,512..1023

Но почему мы не можем (со знанием, например, что размер кода равен 9), многократно использовать предыдущие коды и упорядочивать словарь как пирамида:

vector<vector<CodeString>> dictionary(maxCodeLen - 7);

и инициализировать его следующим образом

dictionary[0](256);
dictionary[1](512);
dictionary[2](1024);

и выберите коды для конкретной строки в зависимости от текущего размера кода (например, 10101010 и 010101010 это разные коды), и декодер может декодировать его путем увеличения кода текущего размера (который определяет массив в пирамиде)и начиная с начала каждого массива в пирамиде.

Таким образом, мы могли бы добиться лучшего соотношения скорости и размера при сжатии данных с помощью алгоритма LZW, благодаря включению ценных дополнительных кодов размером 9,10,11.

Почему это не такприменение

...