Изменения

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

Арифметическое кодирование

96 байт добавлено, 15:08, 17 июня 2016
м
Выделение кейвордов во втором псевдокоде, интервики на энтропию
'''Арифметическое кодирование''' (англ. ''Arithmetic coding'') {{---}} алгоритм сжатия информации без потерь, который при кодировании ставит в соответствие тексту вещественное число из отрезка <tex>[0; 1)</tex>.
Данный метод, как и [[Алгоритм Хаффмана|алгоритм Хаффмана]], является [[Энтропия случайного источника|энтропийным]], т.е. длина кода конкретного символа зависит от частоты встречаемости этого символа в тексте. Арифметическое кодирование показывает более высокие результаты сжатия, чем алгоритм Хаффмана, для данных с неравномерными распределениями вероятностей кодируемых символов. Кроме того, при арифметическом кодировании каждый символ кодируется нецелым числом бит, что эффективнее кода Хаффмана (теоретически, символу <tex>a</tex> с вероятностью появления <tex>p(a)</tex> допустимо ставить в соответствие код длины <tex>-\log_2 p(a)</tex>, следовательно, при кодировании алгоритмом Хаффмана это достигается только с вероятностями, равными обратным степеням двойки).
== Принцип действия ==
# Повторим пункты 1{{---}}2 до тех пор, пока не получим ответ (до конца файла).
<code>
'''do''' '''for ''' i = 1 to n '''if ''' code >= segment[i].left && '''and''' code < segment[i].right
write(segment[i].character)
code = (code – segment[i].left) / (segment[i].right – segment[i].left)
'''break ''' '''while ''' (segment[i].character != eof)
</code>
=== Замечание ===
48
правок

Навигация