User Tag List

Показано с 1 по 5 из 5

Тема: Алгоритм компрессора ZX0 (ZX5, ZX2)

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    13.01.2022
    Адрес
    г. Новосибирск
    Сообщений
    103
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Алгоритм компрессора ZX0 (ZX5, ZX2)

    Привет народ, сжатие данных это из области моего хобби и я люблю почитать и покодить на эту тему. Сделал свой алгоритм сжатия на тему 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, поскольку в большинстве практических случаев это дает лучшие результаты.
    [свернуть]


    Интересует вопрос по тому, что здесь Эйнар понимает под смещением?
    Atari 65XE / Atari XEGS / Commodore 64C

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Алгоритм календаря
    от Mick в разделе Программирование
    Ответов: 13
    Последнее: 02.05.2012, 08:34
  2. Алгоритм текстового Quest'a
    от ALKO в разделе Программирование
    Ответов: 11
    Последнее: 23.12.2010, 00:47
  3. Алгоритм и..
    от Пётр в разделе Программирование
    Ответов: 4
    Последнее: 21.05.2008, 21:52
  4. сложнопонимаемый алгоритм
    от psb в разделе Программирование
    Ответов: 35
    Последнее: 27.05.2006, 01:42

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •