Изменения

Перейти к: навигация, поиск

Алгоритм LZMA

340 байт добавлено, 23:04, 21 декабря 2016
м
Нет описания правки
Главной инновацией LZMA было то, что вместо общей байтовой модели, модель LZMA использовала зависящие от контекста битовые поля в каждом представлении букв или фраз. Эта модель почти также проста как битовая, но дает лучший коэффициент сжатия, потому что избегает смешивания несвязных битов вместе в том же самом контексте.
===Сравнение с другими алгоритмами=======Основные преимущества====
По сравнению с алгоритмом LZ77 алгоритм LZMA имеет следующие преимущества: более высокий коэффициент сжатия, изменяемый размер словаря, небольшие требования по памяти для «распаковки» данных.
====Недостатки====
Алгоритм LZMA не на всех типах входных данных работает одинаково эффективно.
[[Файл:Lzma3.png]]
 
==Дельта-кодирование и декодирование==
{| class="wikitable"
|-
|style="background-color:#FFF;padding:2px 40px"|Входная последовательность: |style="background-color:#FFF"| <tex>2,3,4,6,7,9,8,7,5,3,4</tex>
|-
|style="background-color:#FFF;padding:2px 40px"|Закодированная последовательность: <tex>2,1,1,2,1,2,-1,-1,-2,-2,1</tex> |style="background- color:#FFF"|Закодированная последовательность: <tex>2,1,1,2,1,2,-1,-1,-2,-2,1</tex>
|-
|style="background-color:#FFF;padding:2px 40px"|Количество различных символов в входных данных: |style="background-color:#FFF"| <tex>8</tex>
|-
|style="background-color:#FFF;padding:2px 40px"|Количество различных символов после кодирования: |style="background-color:#FFF"| <tex>4</tex>
|}
#В цикле:
#:3.1 Сохраняем элемент с индексом <tex>i</tex>.
#:3.2 Вычисляем разницу между элементом под номером <tex>i</tex> и <tex>i-1</tex> и перезаписываем ее в элемент массива с индексом <tex>i</tex> .
'''function''' deltaEncode(bp: '''list<char>''', n: '''int'''):
'''char''' last = 0
'''for''' i = 0 '''to''' n - 1
'''char''' tmp = bp[i]
bp[i] -= last
<tex>a</tex> <tex>1</tex> <tex>3</tex> <tex>3</tex> <tex>0</tex> <tex>1</tex> <tex>3</tex> <tex>3</tex> <tex>1</tex> <tex>3</tex> <tex>2</tex>.
Как мы видим, теперь в нашей строке вместо <tex>10</tex> различных символов <tex>5</tex> различных символа.
Далее применим к получившейся строке метод «скользящего» окна:
Таким образом, произведя интервальное кодирование нашей строки, получим диапазон который будет отвечать закодированному сообщению.
 
== См.также ==
* [[Алгоритмы LZ77 и LZ78]]
* [[Алгоритм LZW]]
* [[Алгоритм LZSS]]
==Примечания==

Навигация