Изменения

Перейти к: навигация, поиск
Адаптивное арифметическое кодирование
weight[c] = 1
'''return''' weight
 
==== Кодирование строки ====
'''double''' '''adaptiveCoding'''(in : '''char['''n''']''', alphabet : '''set<char>'''):
'''int['''m''']''' weight = defineWeights(alphabet)
'''int['''m''']''' segments = defineSegments(alphabet)
<font color=green>// начальные границы отрезка
'''double''' left = 0
'''double''' right = 1
'''for''' i = 0 '''to''' n - 1
'''char''' c = in[i]
<font color=green>// увеличиваем вес символа строки</font>
weight[c]++
<font color=green>// определение новых границ диапазона с искомым кодом</font>
<font color=green>//, с учётом полученного символа c</font>
'''double''' newRight = left + (right - left) * segments[c].right
'''double''' newLeft = left + (right - left) * segments[c].left
left = newLeft
right = newRight
'''resizeSegments'''(alphabet, weight, segments)
'''return''' (left + right) / 2;
== См. также ==
55
правок

Навигация