Привет народ, сжатие данных это из области моего хобби и я люблю почитать и покодить на эту тему. Сделал свой алгоритм сжатия на тему LZSS и параллельно узнал про несколько вариантов кодера ZX*, автор на гитхабе с одной стороны пишет как именно он кодирует, с другой - есть вопрос, который я не могу сам понять, может кто-то есть кто понимает о чем речь. Привожу цитату с гитхаба:
Скрытый текст
Если кому-то английский не нравится:File Format
The ZX0 compressed format is very simple. There are only 3 types of blocks:
Literal (copy next N bytes from compressed file)
0 Elias(length) byte[1] byte[2] ... byte[N]
Copy from last offset (repeat N bytes from last offset)
0 Elias(length)
Copy from new offset (repeat N bytes from new offset)
1 Elias(MSB(offset)+1) LSB(offset) Elias(length-1)
ZX0 needs only 1 bit to distinguish between these blocks, because literal blocks cannot be consecutive, and reusing last offset can only happen after a literal block. The first block is always a literal, so the first bit is omitted.
The offset MSB and all lengths are stored using interlaced Elias Gamma Coding. When offset MSB equals 256 it means EOF. The offset LSB is stored using 7 bits instead of 8, because it produces better results in most practical cases.
Формат файла
Формат сжатия ZX0 очень прост. Существует всего 3 типа блоков:
Буквальный (копирует следующие N байт из сжатого файла)
0 Elias(length) byte[1] byte[2] ... byte[N]
Копировать с последнего смещения (повторить N байт с последнего смещения)
0 Elias(length)
Копировать с нового смещения (повторить N байт с нового смещения)
1 Elias(MSB(offset)+1) LSB(offset) Elias(length-1)
ZX0 требуется всего 1 бит, чтобы различать эти блоки, потому что литеральные блоки не могут быть последовательными, а повторное использование последнего смещения может произойти только после литерального блока . Первый блок всегда является литералом, поэтому первый бит опускается.
Смещение MSB и все длины сохраняются с использованием чересстрочной развертки Гамма-кодирование Элиаса. Когда смещение MSB равно 256, это означает EOF. Смещенный LSB хранится с использованием 7 бит вместо 8, поскольку в большинстве практических случаев это дает лучшие результаты.[свернуть]
Интересует вопрос по тому, что здесь Эйнар понимает под смещением?