55
 правок
Изменения
→Адаптивное арифметическое кодирование
        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;
== См. также ==
