48
правок
Изменения
м
</code>
*<math>\mathtt{s}\,</math> {{---}} текст, подаваемый на вход;
*<math>\mathtt{left}\,</math>, <math>\mathtt{right}\,</math> {{---}} границы отрезка, содержащего возможный результат арифметического кодирования;
→Псевдокод
=== Псевдокод ===
*<math>\mathtt{s}\,</math> {{---}} текст, подаваемый на вход;
*<math>\mathtt{n}\,</math> {{---}} мощность алфавита исходного текста;
*<math>\mathtt{letters[n]}\,</math> {{---}} массив символов, составляющих алфавит исходного текста;
*<math>\mathtt{segment}\,</math> {{---}} структура, задающая подотрезок отрезка <tex>[0; 1)</tex>, соответствующего конкретному символу на основе частотного анализа. Имеет поля:
**<math>\mathtt{left}\,</math> {{---}} левая граница подотрезка;
**<math>\mathtt{right}\,</math> {{---}} правая граница подотрезка;*<math>\mathtt{left}\,</math>, <math>\mathtt{right}\,</math> {{---}} границы отрезка, содержащего возможный результат арифметического кодирования.
<code>
'''double''' right
}
'''void''' DefineSegments(letters: '''char'''[n], probability: '''double'''[n])
'''double''' l = 0
segment[letters[i]].left = l
segment[letters[i]].right = l + probability[i]
'''double''' ArithmeticCoding(s: '''string'''):
right = newRight
'''return''' (left + right) / 2
</code>
'''Замечание:''' для оптимизации размера кода можно выбрать из полученного на последнем шаге диапазона <tex>[left; right]</tex> число, содержащее наименьшее количество знаков в двоичной записи.