Лемпель – Зив – Стац - Lempel–Ziv–Stac

Лемпель – Зив – Стац (LZS, или же Сжатие Stac) это сжатие данных без потерь алгоритм который использует комбинацию LZ77 алгоритм сжатия скользящего окна и фиксированный Кодирование Хаффмана. Первоначально он был разработан Stac Electronics для сжатия ленты и впоследствии адаптирован для сжатие жесткого диска и продается как Укладчик программное обеспечение для сжатия дисков. Позже он был определен как алгоритм сжатия для различных сетевых протоколов. LZS указан в Cisco IOS куча.

Стандарты

Сжатие LZS стандартизировано как стандарт INCITS (ранее ANSI).[1]

Сжатие LZS указано для различных интернет-протоколов:

  • RFC 1967Протокол сжатия PPP LZS-DCP (LZS-DCP)
  • RFC 1974Протокол сжатия PPP Stac LZS
  • RFC 2395Сжатие полезной нагрузки IP с использованием LZS
  • RFC 3943Сжатие протокола безопасности транспортного уровня (TLS) с использованием Lempel-Ziv-Stac (LZS)

Алгоритм

Сжатие и декомпрессия LZS использует LZ77 тип алгоритм. Он использует последние 2 КБ несжатых данных в качестве словаря скользящего окна.

Компрессор LZS ищет совпадения между данными, подлежащими сжатию, и последними 2 КБ данных. Если он находит совпадение, он кодирует ссылку смещения / длины на словарь. Если совпадений не найдено, следующий байт данных кодируется как «буквальный» байт. Сжатый поток данных заканчивается маркером конца.

Формат сжатых данных

Данные кодируются в поток токенов переменной разрядности.

Буквальный байт

Литеральный байт кодируется как бит 0, за которым следуют 8 бит байта.

Ссылка смещения / длины

Ссылка смещения / длины кодируется как бит «1», за которым следует закодированное смещение, за которым следует закодированная длина. Одно исключительное кодирование - это конечный маркер, описанный ниже.

Смещение может иметь минимальное значение 1 и максимальное значение 2047. Значение 1 относится к самому последнему байту в буфере истории, непосредственно предшествующему следующему байту данных, который должен быть обработан. Смещение кодируется как:

  • Если смещение меньше 128: бит «1», за которым следует 7-битное значение смещения.
  • Если смещение больше или равно 128: бит 0, за которым следует 11-битное значение смещения.

Длина кодируется как:

ДлинаБитовое кодирование
200
301
410
51100
61101
71110
С 8 до 221111 xxxx, где xxxx - длина - 8
23–371111 1111 xxxx, где xxxx - длина - 23
длина> 37(1111 повторений N раз) xxxx, где

N - целочисленный результат (длина + 7) / 15, а
xxxx - длина - (N * 15-7)

Конечный маркер

Конечный маркер кодируется как 9-битный маркер 110000000. После конечного маркера при необходимости добавляются от 0 до 7 дополнительных битов «0», чтобы дополнить поток до границы следующего байта.

Патенты

Отделение Stac Electronics Hifn имеет несколько патентов на сжатие LZS.[2][3] Срок действия этих патентов истек из-за неуплаты пошлин, и попытки восстановить их в 2007 году потерпели неудачу.

В 1993–94 годах компания Stac Electronics успешно подал в суд Microsoft за нарушение патентов LZS в Двойной пробел программа сжатия диска, включенная в MS-DOS 6.0.[4]

Смотрите также

Рекомендации

  1. ^ INCITS / ANSI X3.241-1994 - Метод сжатия данных - адаптивное кодирование со скользящим окном для обмена информацией
  2. ^ Друг, Роберт С. «Заявление Hifn о правах интеллектуальной собственности, заявленных в draft-friend-tls-lzs-compress, RFC1967, RFC1974, RFC2118, RFC2395 и RFC3078». Получено 21 июля 2010.
  3. ^ Друг Роберт. «Заявление Hifn о правах интеллектуальной собственности, заявленных в алгоритмах сжатия LZS и MPPC». Получено 21 июля 2010.
  4. ^ Жалоба на нарушение патентных прав и требование суда присяжных В архиве 2007-05-09 на Wayback Machine Автор: Stac Electronics v Microsoft Corporation