Изменения

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

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

745 байт добавлено, 18:58, 17 июня 2016
Псевдокод
*<math>\mathtt{code}\,</math> {{---}} вещественное число, подаваемое на вход;
*<math>\mathtt{length}\,</math> {{---}} длина восстанавливаемого текста;
*<math>\mathtt{n}\,</math> {{---}} мощность алфавита исходного текста;
*<math>\mathtt{letters[n]}\,</math> {{---}} массив символов, составляющих алфавит исходного текста;
*<math>\mathtt{probability[n]}\,</math> {{---}} массив вероятностей обнаружения символа в тексте;
*<math>\mathtt{segment}\,</math> {{---}} структура, задающая подотрезок отрезка <tex>[0; 1)</tex>, соответствующего конкретному символу на основе частотного анализа. Имеет поля:
** <math>\mathtt{left}\,</math> {{---}} левая граница подотрезка;
<code>
'''struct''' segment {
'''double''' left
'''double''' right
'''char''' character
}
 
'''void''' DefineSegments(letters: '''char'''[n], probability: '''double'''[n])
'''double''' l = 0
'''for''' i = 1 '''to''' n
segment[i].left = l
segment[i].right = l + probability[i]
segment[i].character = letters[i]
 
'''string''' ArithmeticDecoding(code: '''double'''):
'''string''' s = ""
48
правок

Навигация