- •© Михеева е. А., 2016 © Ульяновский государственный университет, 2016 оглавление
- •Раздел 6. Элементы математической логики . . . . . . . . . . . . . . . . . . . . 9
- •Раздел 7. Ограниченно-детерминированные (автоматные) функции
- •Раздел 8. Вычислимые функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
- •Раздел 9. Теория кодирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
- •Раздел 6. Элементы математической логики Предисловие
- •Исчисление высказываний
- •Язык ив
- •Аксиомы ив
- •Формулы алгебры высказываний
- •Соответствие между формулами ав и ив
- •Непротиворечивость ив
- •Полнота ив
- •Логические операции над предикатами
- •Теорема о полноте системы одноместных предикатов, заданных на конечном множестве
- •Исчисление предикатов (ип)
- •Формулы исчисления предикатов
- •Определение формул
- •Замена переменных в формулах
- •Правила образования выводимых формул
- •Замена переменного предиката
- •Задания для самостоятельной работы
- •Раздел 7. Ограниченно-детерминированные (автоматные) функции
- •Детерминированные функции
- •Свойство детерминированной функции
- •Примеры детерминированных и недетерминированных функций
- •Способ задания д.Функций
- •Вес детерминированной функции
- •Ограниченно-детерминированные функции
- •Способы задания о.Д.Функций
- •Конечные автоматы
- •Задания для самостоятельной работы
- •Раздел 8. Вычислимые функции Машины Тьюринга
- •Пусть в некоторый момент головка машины обозревает символ , находясь в состоянии , тогда:
- •Методы построения машин Тьюринга
- •1. Принцип двойственности для программ (машин).
- •2. Последовательное подключение одной машины к другой.
- •3. Итерация машины.
- •4. Специальный операторный язык для записи алгоритмов.
- •Описание технологии программирования для машин Тьюринга
- •Вычислимые функции
- •Операции с, Пр и
- •Классы вычислимых и рекурсивных функций
- •Эквивалентность класса рекурсивных функций и функций, вычислимых на машинах Тьюринга
- •Задания для самостоятельной работы
- •Раздел 9. Теория кодирования Алфавитное кодирование
- •Критерий однозначности декодирования
- •Задания для самостоятельной работы
Критерий однозначности декодирования
Рассмотрим алфавитное кодирование для алфавитов U и D, задаваемое схемой :
a1 – B1,
… ( )
ar – Br.
Полагаем S1(U)=S(U), т.е. источник сообщений порождает множество всех слов в алфавите U. Очевидно, что алфавитное кодирование порождает отображение множества S(U) в множество S(D). Обозначим через S(D) образ множества S(U) в этом отображении.
В случае, когда отображение S(U) на S(D) взаимно однозначно, возможно декодирование, т.е. возможно по коду В однозначно восстановить исходное сообщение A, кодом которого является B.
Пример . Рассмотрим алфавитное кодирование, для которого U={a1,a2}, D={b1,b2} и схема имеет вид:
: a1 – b1,
a2 – b1 b2.
Пусть нам известен код B, нам нужно восстановить сообщение A. Произведем разбиение слова B на элементарные коды B=b1b1 b2 b1 b1 b1 b2 b1 b2 A=a1 a2 a1 a1 a2 a2 .
Данное алфавитное кодирование свойством взаимной однозначности обладает.
Определение : Пусть слово В имеет вид: В= В1В11. Тогда слово В1 называют началом или префиксом слова B, а В11 - концом или суффиксом слова В.
Определение
: Схема
обладает свойством
префикса,
если для любых i
и j
(1
i,
j
r,
i
j
) слово Вi
не является
префиксом слова Bj.
Теорема 1. Если схема обладает свойством префикса, то алфавитное кодирование будет взаимно однозначным.
Доказательство: Предположим, что некоторое слово В из S(D) допускает две расшифровки, а значит и два разбиения на элементарные коды:
Пусть
. В таком случае одно из слов
является префиксом другого.
Теорема доказана .
Пусть
. Из предыдущего примера :
:
a1
– b1,
a2 – b2b1,
Схемы
и
одновременно обладают свойством
взаимной однозначности.
Теорема 2 . Если либо схема , либо схема обладает свойством префикса, тогда алфавитное кодирование, задаваемое ( ), будет взаимно однозначным.
Пример .
U={a1,a2,a3} D={b1,b2,b3}
:
a1
-
b1
:
a1
- b1
a2 - b1 b2 a2 - b2 b1
a3 - b3 b1 a3 - b1 b3
Заметим, что схемы и не обладают свойством префикса, но алфавитное кодирование свойством взаимной однозначности обладает.
Введем ряд обозначений:
l(B) – длина слова B ,
l(Bi) = li (i = 1,2, … , r),
L = l(B1…Br) – вся длина кодов схемы .
Пусть
Bi
=
…
нетривиальное разложение элементарного кода Bi, т.е. разложение, отличное от разложения Bi = Bi ( == .
В этом разложении предполагается, что :
1. не может оканчиваться элементарным кодом .
2. не содержит в качестве префикса элементарного кода .
3. Параметр может быть целым числом 0 .
Соотношение (1) означает, что в элементарном коде Bi можно отбросить некое начало и некий конец так, что оставшаяся часть разбивается на элементарные коды.
Очевидно, что для каждого Bi число разложений (1) конечно. Обозначим через W максимум чисел , взятых по всем разложениям Bi и по всем i, т.е. W=max .
Пример: U={a1,a2,a3,a4,a5} ,
D={b1,b2,b3} .
a1 - b1 b2 = B1 l1=2 L = 16
a2 - b1 b3 b2=B2b2 l2=3 W = 2
a3 - b2 b3 = B3 l3=2
a4 - b1 b2 b1 b3= B1B2 l4=4
a5 - b2 b1 b2 b2 b3= b2B1B3 l5=5
Теорема
3 (А.А. Марков)
. Для всякого
алфавитного кодирования со схемой
существует
такое N0
, что проблема взаимной однозначности
алфавитного кодирования сводится к
проблеме для кодирования конечного
множества
-
всевозможных
слов в алфавите U,
длина которых
N0
и N0
.
Доказательство. Если в алфавитном кодировании нарушена взаимная однозначность, то найдется такое слово B, которое допускает по крайней мере 2 различные расшифровки A1 и A11. Для доказательства теоремы достаточно установить, что можно найти такое слово B, что для его расшифровок A1 и A11 имеют место неравенства :
l(A1), l(A11) .
Слово B, допускающее не менее двух расшифровок, называется неприводимым, если каждое слово B1 , получающееся из B путем выбрасывания непустого куска, допускает не более одной расшифровки.
С самого начала можно предполагать, что слово B – неприводимо. Рассмотрим A1 и A11 (его 2 расшифровки). С ними связаны 2 разбиения слова B на элементарные коды – верхнее Т1 и нижнее Т2 :
Пусть Т получается путем одновременного разбиения Т1 и Т2.
Слова этого нового разбиения Т разделим на 2 класса:
слова, являющиеся элементарными кодами (входят каждое ровно в одно разбиение),
все остальные слова (изображены жирными отрезками).
Заметим, слова второго класса являются одновременно непустыми началами и концами элементарных кодов из разных разбиений и отличны от элементарных кодов, так как слово B неприводимо.
Покажем, что каждые 2 слова 1и из второго класса различны
(. Предположим , что B B11B1111B111=B1B11B111 .
Утверждается, что слово B11B111, получающееся из B путем выбрасывания куска B1111, допускает по крайней мере две расшифровки. Для расположения слов 1и возможны 4 случая :
В случае а) при выбрасывании куска B1111 и сдвигании кусков B11 и B111 верхнее (нижнее) разбиение получается из склейки частей верхнего (нижнего) разбиения.
В случае б) верхнее (нижнее) разбиение получается из cклейки части верхнего (нижнего) разбиения для куска B11 и нижнего (верхнего) разбиения для B111 .
Нетрудно видеть, что случай в) сводится к случаю а), случай г) – к случаю б). Для этого в в) и г) нужно поменять ролями разбиения Т1 и Т2.
Итак, для слова B11 B111 во всех случаях получаем по крайней мере 2 расшифровки . Таким образом получили противоречие.
Число р слов второго класса не превосходит числа непустых собственных начал элементарных кодов, т.е.:
p (l(B1) - 1) + (l(B2) - 1) +…+ (l(Br) - 1) = L – r .
Слова из второго класса разбивают слово В не более чем на L – r + 1 кусков, некоторые из них могут быть пустыми (см. рис. ниже) .
Пусть 0 = p+1 = . Рассмотрим один из кусков, расположенный между словами j и j+1 (j=0,…, p):
jBi1…Bi j+1 .
В этом куске все слова Bi1,…, Bi принадлежат одному и тому же разбиению слова B, например Т1, а слово
jBi1…Bi j+1 = Bi
1 11 p
B
принадлежит другому разбиению – Т2 . При этом W. Поэтому с каждым куском связаны элементарных кодов одного разбиения и один элементарный код другого разбиения.
Если взять теперь два соседних куска:
входят в одно разбиение , а
входят в другое разбиение .
Отсюда легко получается оценка для максимального числа элементарных кодов, входящих в разбиение. Оно не превосходит
.
Мы
получаем, что
.
Пусть
N0 =
max(l(A1),l(A11)),
то взаимная однозначность кодирования
уже нарушается на множестве
, т.к.
.
Теорема полностью доказана.
Критерий
однозначности декодирования дает
простой алгоритм для установления по
схеме
, будет алфавитное кодирование обладать
свойством взаимной однозначности или
нет. Для этого достаточно рассмотреть
и выяснить, будет ли кодирование этого
конечного множества взаимно однозначным.
Трудоемкость такого алгоритма можно
оценить как
.
Оказывается, что данный алгоритм не
может быть использован даже в простых
примерах.
Пример
. (См. предыдущий пример). Мы имеем r=5,
W=2,
L=16,
и получаем
=519,
что весьма велико.
Алгоритм распознавания однозначности декодирования
Из доказательства критерия однозначности декодирования можно извлечь достаточно эффективный алгоритм для распознавания возможности
декодирования. Этот алгоритм формулируется на языке теории графов.
Пусть алфавитное кодирование задано схемой : а1 - B1,
… ()
а r - B r .
Для любого элементарного кода Bi рассмотрим все нетривиальные представления вида Bi = … . 2)
Пусть D0 – множество, содержащее:
а) пустое слово ;
б) слова , которые встречаются в (2) как в форме префиксов, так и окончаний.
Далее, каждому слову из D0 сопоставим точку на плоскости :
1
p 11
. . . .
Точки на плоскости, рассматривая как вершины графа, соединим ребрами в соответствии разложениям вида (2). Полученный ориентированный граф обозначим через Г().
Определение. Слово В , допускающее не менее двух расшифровок, называется неприводимым, если каждое слово В1 , получающееся из В путем выбрасывания непустого куска, допускает не более одной расшифровки.
Теорема 4. Алфавитное кодирование со схемой не обладает свойством взаимной однозначности Г() содержит ориентированный цикл, проходящий через вершину .
Доказательство. Необходимость: Пусть алфавитное кодирование не обладает свойством взаимной однозначности. Тогда найдется неприводимое слово B вида
,
для которого
,
,
….
.
Поэтому в графе Г() имеется ориентированный цикл, проходящий через вершину .
Достаточность : Пусть Г() содержит ориентированный цикл, проходящий через вершину . Тогда слово В, где
,
имеет две расшифровки, определяемые
двумя разбиениями
.
Теорема доказана.
Замечание. Алгоритм распознавания однозначности декодирования алфавитного кодирования со схемой состоит из построения графа Г() и выявления в нем ориентированных циклов, проходящих через .
Пример . Рассмотрим алфавитное кодирование со схемой :
a1 - b1 b2
a2 - b1b3 b2
a3 - b2 b3 ()
a4 - b1 b2 b1 b3
a5 - b2 b1 b2 b2 b3
Имеем следующие нетривиальные разложения :
В1=(b1)(b2), В2=(b1)( b3b2)= ( b1b3) (b2), В3=(b2)(b3),
В4=(b1)(b2b1b3)= ( b1b2) (b1b3)= (b1b2b1) (b3),
В5=(b2)( b1b2b2b3)= (b2)( b1b2) (b2b3)= (b2b1) (b2b2b3)= (b2b1b2) (b2b3)= (b2b1b2) (b2b3)= (b2b1b2b2) (b3).
Очевидно, D0 ={b2 , b1b3} и с ним связаны разложения
В2 =( b1 b3)( b2) ,
В4 =( b1 b2)( b1 b3) = В1(b1 b3),
В5 =( b2)( b1 b2)( b2 b3)= (b2) В1 В3.
Это дает возможность построить граф Г() . Г() содержит ориентированный цикл, порождающий слово В, где
В = В1 b1 b3 b2 В1 В3.
В1 В3 В1
b2
b1b3
Слово В имеет две расшифровки :
В = (В1 b1 b3 )( b2 В1В3 ), т.е. А1=а4 а5 ,
В = В1 (b1 b3 b2 )В1 В3 , т.е. А11= а1 а2 а1 а3 .
Пример. Рассмотрим алфавитное кодирование со схемой :
a1 - b1 ,
a2 - b2b1 ,
a3 - b1b2b2 , ()
a4 - b2b1b2b2 ,
a5 - b2b2b2b2 .
Имеем сдедующие нетривиальные разложения :
В2=(b2) b1= (b2)В1
В3=(b1)(b2b2)= В1(b2b2), В3=(b1b2)(b2);
В4=(b2)(b1)(b2b2)= (b2)В1(b2b2);
В4=(b2)(b1b2b2)=(b2)В3;
В4=(b2b1)(b2b2)=В2(b2b2); В4=(b2b1b2)(b2) ;
В5=(b2)(b2b2b2)= (b2b2)(b2b2) =(b2b2b2)(b2) .
Очевидно, D0= {b2 , b2b2, b2b2 b2 } и с ним связаны разложения
В1=b1 ,
В2=b2B1 ,
В3= В1 (b2b2),
В4=(b2)В1(b2b2); В4=(b2)В3; В4= В2(b2b2);
В5=(b2)(b2b2b2)= (b2b2)(b2b2) =(b2b2b2)(b2).
Мы получаем граф Г(), не содержащий ориентированного цикла, проходящего через вершину :
Следовательно, алфавитное кодирование со схемой обладает свойством взаимной однозначности. Заметим, данное заключение не может быть выведено из теоремы 2.
Замечание. Из теоремы 4 следуеталгоритм распознавания однозначности декодирования.
Пусть
С()
– алфавитный код. Пусть S1
- множество слов ,
обладающих следующим свойством : слово
является собственным суффиксом
некоторого кодового слова В
и собственным префиксом некоторого
кодового слова В1
, отличного от В
, и, кроме того, не является кодовым
словом кода С().
Положим S=
S1{}.
Сопоставим коду С()
ориентированный граф Г1(),
вершинами которого являются элементы
множества S,
и в котором дуга, ведущая из вершины
в вершину
(),
присутствует тогда и только тогда,
когда найдется кодовое слово В
и последовательность Р=
кодовых слов такие, что
.
При этом последовательность Р
может быть и пустой, если ни одна из
вершин ,
не совпадает с .
Дуге, ведущей из
в ,
припишем последовательность Р.
Дуги вида (,),
ведущие из
в
, рассматриваться не будут, за исключением
случая =.
Дуга (петля) из
в
присутствует в графе Г1()
тогда и только тогда , когда существует
слово В
и последовательность кодовых слов Р=
,
где S
2,
такие, что В=
.
Петле (,)
припишем слово В.
Пример: С()={a, ab, cab, baac} , S ={, b, c}.
B
=
a b a a c a b
b
a
B
=
a b a a c a b
aa
ab c
В данном примере кодирование не является взаимно однозначным.
Самокорректирующиеся коды. Коды Хэмминга
Равномерное
кодирование.
Пусть {A1,
…, As}
- некоторое подмножество попарно
различных слов в алфавите U,
имеющих одинаковую длину m
. Очевидно, что каждое слово А,
которое допускает разложение вида
,
имеет единственное разложение. S1(U)-
некоторое подмножество слов в U,
допускающее разложение вида А.
Рассмотрим схему A1
- В1
,
… ()
As – Вs .
Схема
определяет равномерное кодирование :
каждому слову
ставится
в соответствие слово
,
называемое кодом
слова А.
Рассмотрим один частный случай равномерного кодирования.
Пусть U={0,1}, {A1, … , As} – множество всех слов вида А=1…m в алфавите U, имеющих фиксированную длину m (здесь s = 2m). Предположим, что в канале связи действует источник помех, который в словах из {A1, …, As}, имеющих длину m, может выдавать ошибки не более чем в р символах. Совершенно ясно, что если передавать исходное сообщение 1…m (без предварительного кодирования), то на выходе канала невозможно будет установить, какое сообщение фактически было передано. В связи с этим возникает вопрос, нельзя ли осуществить кодирование слов А из множества {A1, …, As}, т.е. слов вида 1…m , словами вида 1 … l длины l так, чтобы по коду 11 … 1l , полученному на выходе канала при передаче кода 1 … l , можно было однозначно восстановить этот код, и, значит, исходное сообщение 1…m ? Коды, обладающие данным свойством, будем называть самокорректирующимися кодами относительно рассматриваемого источника помех.
Тривиальное решение задачи. U={0,1}; р=1, т.е. 0 1, 1 0. Искомый самокорректирующий код получается путем утроения символов исходного кода 12…m - 111222 … mmm .
Тривиальное решение не является корректным, т.к. l = 3m, мы приходим к кодам, для которых данный источник помех может вызвать большее число ошибок, чем р.
Корректное построение самокорректирующихся кодов было осуществлено Хэммингом (1950 г.), им подробно был разобран случай р=1.
Сообщения 1 … m кодируются наборами 1 … l , где l – длина кода и l=m+k. При наличии источника помех возможны следующие варианты получения кодов на выходе :
на входе на выходе
12
… l
12
… l
…
На
выходе число вариантов = l+1
. Для того, чтобы дополнительные
k
разрядов в коде 1…
l
хватало
для кодировки перечисленных (l+1)
случаев, или (l+1)
слов, необходимо, чтобы 2k
l+1
или
. (*)
Исходя из этих соображений выберем l как наименьшее целое число, удовлетворяющее неравенству (*) .
Дальнейшие построения будут состоять из трех этапов.
I. Построение кодов Хэмминга (описание алгоритма кодирования). Отрезок (1,2,…,l) разобьем на k последовательностей так : пусть V - произвольное натуральное число, 1 V l, и Vk … V1 – его двоичная запись.
Последовательность 1, 3, 5, 7, 9, … содержит все числа V с V1=1.
Последовательность 2, 3, 6, 7, 10, … содержит все числа V с V2=1.
Последовательность 4, 5, 6, 7, 12, … содержит все числа V с V3=1.
… . . . . . .
Последовательность 2k-1, 2k-1+1, … содержит все числа V с Vk=1.
Первыми членами этих последовательностей являются числа 1=20 , 2=21, …, 2k-1 , где 2k-1 l, a 2k l+1.
Члены i набора 1…l, у которых индекс i{1,2,…,2k-1}, называются контрольными членами, остальные – информационными. Легко видеть, что контрольных членов k, а информационных - l-k = m.
Правило построения набора 1…l по набору 1…m . Сначала определяются информационные члены 3 = 1,
5 = 2 ,
6 = 3,
. . .
Набор из информационных членов совпадает с набором 1 … m.
Далее определим контрольные члены : 1 = 3+5+7 +… (mod 2),
2 = 3+6+7 +… (mod 2),
4 = 5+6+7 +… (mod 2),
…
Hl1 – множество всех построенных наборов 1… l .
II.Обнаружение
ошибок в кодах Хэмминга.
1…
l
)Hl1.
Пусть при передаче кода 1…
l
произошла
ошибка в S-м
члене . Тогда на выходе канала было
принято слово
,
где
.
Пусть S
= Sk…S1
- запись
числа S
в двоичном счислении. Покажем, как можно
по коду
найти число S.
Рассмотрим число
,
где :
(1-я
последовательность),
(2-я
последовательность),
(3-я
последовательность),
. . . . . . . . .
Покажем, что S=S1.
Если
S1=0
,
то S
не принадлежит первой последовательности
и тогда
,
поэтому S11=
0.
Если S1=1, то S принадлежит первой последовательности и тогда
,
поэтому S11=1.
Таким образом S1 = S11. Аналогично доказывается, что S2 = S21, ... , Sk = Sk1. Значит S = S1.
Если
при передаче ошибки не произошло, то
S1
= 0. Если
была ошибка,
то член 1s
заменяем
на
.
III. Декодирование. Этот шаг состоит в построении исходного сообщения 1 … m по коду 1 … l . Для этого , очевидно , достаточно взять информационные члены из кода 1 … l .
Пример.
Построить самокорректирующийся код
для m
= 4. Находим наименьшее число
l
по неравенству
(*) :
, l=7,
l=m+k,
k=3.
В соответствии с этапом 1 получаем
самокорректирующийся код. Результат
этого построения представлен в следующей
таблице, в которой контрольные члены
помечены звездочкой :
1* |
2* |
3 |
4* |
5 |
6 |
7 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
В этой таблице сначала в столбцы с номерами 3, 5, 6 и 7 (информационные члены) вписываются сверху вниз наборы 0000, … , 1111. Затем по формулам
1 = 3+5+7 (mod 2),
2 = 3+6+7 (mod 2),
4 = 5+6+7 (mod 2)
заполняются столбцы с номерами 1, 2 и 4.
Пусть на вход канала поступил код 0110011, а в нем источник помех исказил 5-й член (S=5) . Тогда на выходе мы получим 0110111. Вычислим номер члена, в котором произошла ошибка. Мы имеем
S11 = 0+1+1+1=1,
S21 = 1+1+1+1=0,
S31 = 0+1+1+1=1.
Следовательно, S1 =101, т.е. S1 == 5. Мы обнаружили член, в котором произошла ошибка, и S1 =S.
