Добавлен: 27.06.2023
Просмотров: 201
Скачиваний: 2
Алгоритм на псевдокоде кодированием кодом «Стопка книг»
Обозначения:
code – массив кодовых слов для позиции «стопки»;
s_in – строка для кодирования;
s_out – результат кодирования;
S – строка, содержащая исходный алфавит.
l:=<длина s_in>
DO (i=1,…l)
T:=<номер символа s_in[i] в строке S>
s_out:=s_out+code[t]
stmp:=S[t]
delete(S,t,1) \\преобразование
insert(stmp,S,1) строки S
OD
3.3 Интервальный код
В 1987 г. Элиас П. предложил интервальный код [10]. В нем используется окно длины W, т.е. при кодировании символа xi исходной последовательности учитываются W предыдущих символов:
При кодировании символа xi определяется интервал до его предыдущей встречи в окне длины W, обозначается это расстояние λ(xi). Если символ xi есть в окне, то значение λ(xi) равно номеру позиции символа в окне. Позиции в окне нумеруются справа налево. Если символа xi нет в окне, то λ(xi) присваивается значение W+1, а xi кодируется словом, состоящим из λ(xi) и самого символа xi.
Окно сдвигается вправо после процесса кодирования.
Пример описания кода для исходного алфавита: A={a1,a2,a3,a4}, пусть длина окна W=3. Существует некоторый префиксный код для записи числа λ(Xi):
λ (хi) |
1 |
2 |
3 |
4 |
σi |
0 |
10 |
110 |
111 |
Пусть кодируется последовательность а1а1а2а3а2а2…
- Сначала символа а1 нет в окне, поэтому на выход кодера передается 111 и восьмибитовый ASCII-код символа а1 Затем окно сдвигается на одну позицию вправо.
- При кодировании следующего символа а1 на выход кодера передается 0, так как теперь символ а1 находится в первой позиции окна. Далее окно снова сдвигается на одну позицию вправо.
- Следующий символ а2 кодируется комбинацией 111 и восьмибитовым ASCII-кодом символа а2, так как символа а2 нет в окне. Окно снова сдвигается на одну позицию вправо.
- Следующий символ а3 кодируется комбинацией 111 и восьмибитовым ASCII-кодом символа а3, так как символа а3 нет в окне. Окно снова сдвигается на одну позицию вправо.
- Следующий кодируемый символ а2 находится во второй позиции окна и поэтому кодируется комбинацией 10. Окно снова сдвигается на одну позицию вправо.
- И последний символ а2 находится в первой позиции окна и поэтому кодируется комбинацией 0. Таким образом, закодированное сообщение имеет следующий вид: 111 a1 0 111 a2 111 a3 10 0
а1 а1 а2 а3 а2 а2 …
1
111 а1
а1 а1 а2 а3 а2 а2 …
2
0
а1 а1 а2 а3 а2 а2 …
3
111 а2
а1 а1 а2 а3 а2 а2 …
41
111 а3
а1 а1 а2 а3 а2 а2 …
5
10
а1 а1 а2 а3 а2 а2 …
6
0
Рисунок 12 Кодирование интервальным кодом
В процессе декодирования используется точно такое же окно. По принятому кодовому слову можно определить, в какой позиции окна находится данный символ. Если поступает код 111, то декодер считывает следующий за ним символ. Каждая декодированная буква полностью включается в окно.
Сжатие данных интервальным кодом достигается за счет малых расстояний между встречами более вероятных букв, что позволяет получить более короткие кодовые слова.
Алгоритм на псевдокоде методом кодирования интервальным кодом
Обозначения:
code – массив кодовых слов для записи числа λ(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
3.4 Частотный код
Частный код использует алфавитный код Гилберта-Мура, был предложен в 1990 г. Рябко Б.Я [11]. Для частотного кода избыточность - величина постоянная, а сам код реализует адаптивный метод сжатия. Длинна окна является параметром, определяющим среднюю длину кодового слова, а также позволяет оценивать статистику кодируемых данных. Также этот код характеризуется высокой скоростью операций кодирования и декодирования.
Пример построения алгоритма частотного кода для источника с алфавитом А={a1, a2, ..., an}: Пусть используется окно длины W, точнее при кодировании символа xi исходной последовательности учитываются W предыдущих символов:
К примеру, размер окна определяется W=(2r − 1)n, где n=2k − размер исходного алфавита, r, k − целые числа [12].
Порядок построения кодовой последовательности следующий:
- На первом шаге оценивается число встреч в окне xi-W.…xi-1 всех букв исходного алфавита. Обозначим эти величины через P(aj), j=1…, n
- P(aj) увеличивается на единицу и обозначается как Р’(аj) = P(аj) + 1
- Вычисление суммы Qi, i=1…, n
Q1= Р’(а1),
Q2= Р’(а1) + ,
Q3= Р’(а1) + Р’(а2)+ ,
…
Qn= Р’(а1) + … + Р’(аn-1) + .
- Для кодового слова символа аj берется k знаков от двоичного разложения Qj, где k=1 + log (n+W) – [log Р’(аj) ].
- Далее окно сдвигается на один символ вправо и для кодирования следующего символа алгоритм вновь повторяется.
Пусть А={a1, a2, a3, a4}, длина окна W=4. Необходимо закодировать последовательность символов
Строится кодовое слово для символа а3.
1. Оценка частоты встреч в текущем "окне" всех символов алфавита:
Р’(а1) = Р’(а2) =1, Р’(а3) =4, Р’(а4)=2.
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.
Алгоритм на псевдокоде. Частотный код
Обозначения:
w – окно;
W – размер окна;
P – массив частот символов;
Q – массив для величин Qi..
DO (i=1,…n) w[i]:=a[i] OD \\заполнение окна символами алфавита
DO (not EOF) \\ до конца входного файла
DO (i=1,…,n) P [i]:=1 OD
DO (i=1,…,n) P [w[i]]:= P [w[i]] +1 OD \\частоты встречи
символов в окне
pr:=0
DO (i=1,…,n)
Q [i] := pr+ P [i] /2 \\вычисление суммы
pr:=pr+ P [i]
OD
C:=Read( ) \\чтение следующего символа из файла
DO (j=1,…,n)
IF (C= a[i]) m:=j FI \\определение номера символа в алфавите
OD
k = 1 + log2 (n+W) − ⎣log2 P[m] ⎦ \\длина кодового слова
DO (j=1,…,k) \\формирование кодового слова
Q [m]:=Q [m] *2 в двоичном виде
code:= ⎣Q [m]⎦
IF (Q [m] >1) Q [m]:= Q [m] - 1 FI
OD
Write(code) \\код символа – в выходной файл
DO (i=0,…,n-1) w[i]:= w[i+1] OD
w[n]:=C \\включение в окно текущего символа
OD
ЗАКЛЮЧЕНИЕ
Функции кодирования и декодирования возможно применять при анализе данных и их преобразовании. Функцию кодирования выполняет вычислительный процессор функцию декодирования управляющий процессор. Кроме того, необходимость в помехоустойчивости, требует формирование помехозащищенных кодовых последовательностей
Коды должны быть эффективными как в аппаратной реализации, так и в программно-аппаратной реализации. Для обеспечения быстродействия и высокой эффективности системы, применяется сжатие и таким образом упрощения обработки на программном уровне, повышается достоверность данных полученных по каналу. Важно чтобы код был достаточно простым для удобства пользования человеком
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
- Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. «Алгоритмы. Построение и анализ» — «Вильямс», 2011 г. — 1296 стр.
- Джеймс Андерсон. «Дискретная математика и комбинаторика» — «Вильямс», 2004 г.
- Новиков. Ф.А. «Дискретная математика для программистов» — «Питер», 2001 г. — 304 стр.
- Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн. Алгоритмы: построение и анализ — 2-е изд. — М.: «Вильямс», 2007. — с. 459.
- Сальникова Н.А. Информатика. Основы информатики. Представление и кодирование информации. Часть 1 [Электронный ресурс]: учебное пособие/ Сальникова Н.А.— Электрон. текстовые данные.— Волгоград: Волгоградский институт бизнеса, Вузовское образование, 2009.— 94 c.— Режим доступа: http://www.iprbookshop.ru/11321.html.— ЭБС «IPRbooks»
- Соколов В.П. Кодирование в системах защиты информации [Электронный ресурс]: учебное пособие/ Соколов В.П., Тарасова Н.П.— Электрон. текстовые данные.— М.: Московский технический университет связи и информатики, 2016.— 94 c.— Режим доступа: http://www.iprbookshop.ru/61485.html.— ЭБС «IPRbooks»
- Голиков А.М. Кодирование и шифрование информации в системах связи. Часть 1. Кодирование [Электронный ресурс]: учебное пособие для специалитета: 210601.65 Радиоэлектронные системы и комплексы. Курс лекций, компьютерный практикум, задание на самостоятельную работу/ Голиков А.М.— Электрон. текстовые данные.— Томск: Томский государственный университет систем управления и радиоэлектроники, 2016.— 327 c.— Режим доступа: http://www.iprbookshop.ru/72112.html.— ЭБС «IPRbooks»
- Марков А. А. Введение в теорию кодирования. — М.: Наука, 1982. — 192 с.
- Морелос-Сарагоса Р. Искусство помехоустойчивого кодирования. Методы, алгоритмы, применение / пер. с англ. В. Б. Афанасьева. — М.: Техносфера, 2006. — 320 с. — (Мир связи). — 2000 экз
- С.Коутинхо. Введение в теорию чисел. Алгоритм RSA. Москва: Постмаркет, 2001. — 328 с.
- Костров Б. В. Основы цифровой передачи и кодирования информации. - ТехБук, 2007 г., 192 стр.
- Рябко Б.Я., Фионов А.Н. Эффективный метод адаптивного арифметического кодирования для источников с большими алфавитами // Проблемы передачи информации. - 1999. - Т.35, Вып. - С.95 - 108.