Алгоритм на псевдокоде
Кодирование интервальным кодом
Обозначим
code – массив кодовых слов для записи числа l(Xi)
s_in – строка для кодирования
s_out – результат кодирования
l:=<длина s_in>
DO (i=1,…l)
t:=0
found:=нет
DO (j=i-1,…,i-W)
t:=t+1
IF (j>0) и (s_in[i]=s_in[j])
s_out:=s_out+code[t]
found:=да
OD
FI
OD
IF (not found) s_out:=s_out+code[n]+s_in[i] FI
OD
6.4 Частотный код
В 1990 году Б. Я. Рябко предложил алгоритм кодирования, использующий алфавитный код Гилберта-Мура, и названный частотным. Частотный код относится к адаптивным методам сжатия с постоянной избыточностью. Средняя длина кодового слова для этого метода определяется только длиной окна, по которому оценивается статистика кодируемых данных, к тому же частотный код имеет достаточно высокую скорость кодирования и декодирования.
Рассмотрим алгоритм построения частотного кода для источника с алфавитом А={a1, a2, ..., an}. Пусть используется окно длины W, т.е. при кодировании символа xi исходной последовательности учитываются W предыдущих символов:
Возьмем размер окна такой, что W=(2r - 1)·n, где n=2k - размер исходного алфавита, r, k - целые числа.
Порядок построения кодовой последовательности следующий:
1. Сначала оценивается число встреч в окне xi-W...xi-1 всех букв исходного алфавита. Обозначим эти величины через P(aj), j=1,…,n
2. P(aj) увеличивается на единицу и обозначается как
3. Вычисляются суммы Qi , i=1,…,n
…
4. Для кодового слова символа аj беретсяk знаков от двоичного разложения Qj, где .
5. Далее окно сдвигается на один символ вправо и для кодирования следующего символа алгоритм вновь повторяется.
Пример. Пусть А={a1, a2, a3, a4}, длина окна W=4. Необходимо закодировать последовательность символов
Построим кодовое слово для символа а3 .
1. Оценим частоты встреч в текущем "окне" всех символов алфавита:
2. Вычислим суммы Qj :
Q1 = 1
Q2 = 1 + 0.5 = 1.5
Q3 = 1 + 1 + 2 = 4
Q4 = 1 + 1 + 4 + 1 = 7
3. Определим длину кодового слова для а3:
k = 1 + log (4+4) - ëlog 4û = 1 + 3 - 2 = 2
4. Двоичное разложение Q3 =1002 , берем первые 2 знака. Таким образом, для текущего символа а3 кодовое слово 10.
Дата добавления: 2019-02-07; просмотров: 208;