Изменения

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

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

324 байта добавлено, 16:01, 17 июня 2016
Кодирование
# Повторим пункт (3) до конца входного потока.
# Выберем любое число из получившегося отрезка, которое и будет результатом арифметического кодирования.
 
== Псевдокод ==
 
<tex>s</tex> {{---}} текст, подаваемый на вход
 
<tex>left</tex>, <tex>right</tex> {{---}} границы отрезка, содержащего возможный результат арифметического кодирования
 
<tex>segment[i].left</tex>, <tex>segment[i].right</tex> {{---}} границы подотрезка отрезка <tex>[0; 1)</tex>, соответствующего символу <tex>i</tex>
 
'''double''' ArithmeticCoding (s: '''string'''):
left = 0
right = 1
'''for''' i = 0 '''to''' length(s)-1
'''read'''(symb = s[i]) newRight = left + (right - left) * segment[symb].right <span style="color:green"> // segment[symb] — подотрезок отрезка [0; 1), соответствующий символу symb </span>
newLeft = left + (right - left) * segment[symb].left
left = newLeft
48
правок

Навигация