Читая о 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.
Почему это не такприменение