Изменения

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

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

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

Навигация