LZMA


LZMA (англ. Lempel-Ziv-Markov chain-Algorithm) — алгоритм сжатия данных, разрабатываемый с 1996 или 1998 года Игорем Павловым[1]. Используется в архиваторе 7-Zip того же автора для создания сжатых архивов в формате 7z.

Алгоритм основан на схеме сжатия данных по словарю, сходной с использованной в LZ77, и обеспечивает высокий коэффициент сжатия (обычно превышающий коэффициент, получаемый при сжатии с использованием bzip2), а также позволяет использовать словари различного размера (до 4 Гб[2]).

Также lzma — утилита командной строки с открытым кодом для сжатия данных из LZMA SDK, которая работает с файлами, имеющими формат и расширение .lzma.

Комплект средств разработки с открытым исходным кодом LZMA, написанный на языке C++, использует улучшенный алгоритм сжатия LZ77, дополненный алгоритмом интервального кодирования, а также специальными процедурами для обработки двоичных файлов.

LZMA поддерживает различные варианты хеш-цепочек, двоичных и префиксных деревьев в качестве основы алгоритмов поиска по словарю.

LZMA SDK содержит также алгоритм BCJ/BCJ2, реализованный для процессоров архитектуры x86, ARM, PowerPC, IA-64 и ARM Thumb. В нём точки перехода перед сжатием нормализуются — то есть, например, для x86 это означает, что инструкции ближних и условных переходов и вызовы функций преобразуются из формы с относительным смещением «перейти на 1665 байт назад» в форму с абсолютным адресом «перейти к адресу 5554».