Лемпель – Зив – Стац - 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-битное значение смещения.
Длина кодируется как:
Длина | Битовое кодирование |
---|---|
2 | 00 |
3 | 01 |
4 | 10 |
5 | 1100 |
6 | 1101 |
7 | 1110 |
С 8 до 22 | 1111 xxxx, где xxxx - длина - 8 |
23–37 | 1111 1111 xxxx, где xxxx - длина - 23 |
длина> 37 | (1111 повторений N раз) xxxx, где N - целочисленный результат (длина + 7) / 15, а |
Конечный маркер
Конечный маркер кодируется как 9-битный маркер 110000000. После конечного маркера при необходимости добавляются от 0 до 7 дополнительных битов «0», чтобы дополнить поток до границы следующего байта.
Патенты
Отделение Stac Electronics Hifn имеет несколько патентов на сжатие LZS.[2][3] Срок действия этих патентов истек из-за неуплаты пошлин, и попытки восстановить их в 2007 году потерпели неудачу.
В 1993–94 годах компания Stac Electronics успешно подал в суд Microsoft за нарушение патентов LZS в Двойной пробел программа сжатия диска, включенная в MS-DOS 6.0.[4]
Смотрите также
Рекомендации
- ^ INCITS / ANSI X3.241-1994 - Метод сжатия данных - адаптивное кодирование со скользящим окном для обмена информацией
- ^ Друг, Роберт С. «Заявление Hifn о правах интеллектуальной собственности, заявленных в draft-friend-tls-lzs-compress, RFC1967, RFC1974, RFC2118, RFC2395 и RFC3078». Получено 21 июля 2010.
- ^ Друг Роберт. «Заявление Hifn о правах интеллектуальной собственности, заявленных в алгоритмах сжатия LZS и MPPC». Получено 21 июля 2010.
- ^ Жалоба на нарушение патентных прав и требование суда присяжных В архиве 2007-05-09 на Wayback Machine Автор: Stac Electronics v Microsoft Corporation