
- •§ 8. Диафантовы множества.
- •Теорема Лагранжа.
- •8.1. Разрешимость в натуральных числах.
- •Определение.
- •Определение.
- •Теорема 8.1.
- •Теорема 8.2.
- •Необходимость.
- •Достаточность.
- •8.2. Нумерация кортежей.
- •Канторова нумерация.
- •Геделево кодирование.
- •Определение.
- •Теорема 8.3.
- •Теорема 8.4.
- •Определение.
- •0.2. Машина с неограниченными регистрами (мнр) [Ктл, c.16]
- •0.3. Равнодоступные адресные машины (рам) [Ахо, с.22]
- •Типы операндов.
- •Команды.
- •0.4. Интерпретация программы как функции.
- •0.6. Вычислительная сложность рам-программ.
- •Определение.
- •Определение.
- •Определение.
- •Логарифмический критерий.
- •0.7. Модификации рам.
- •0.8. Неветвящиеся программы и равномерный весовой критерий.
- •Определение.
- •0.9. Неветвящиеся программы и логарифмический весовой критерий.
- •0.10. Ветвления.
- •0.11. Операции с двоичными векторами фиксированной длины. Определение.
- •Определение.
- •0.12. Машина Тьюринга (k-ленточная).
- •Определение.
- •Определение.
- •0.13. Связь мт и рам.
- •Теорема 0.1.
- •Утверждение 1.
- •Утверждение 2.
- •§ 1. Структуры данных. Определение.
- •1) Вставка.
- •2) Удаление.
- •1.1. Очередь и стек. Определение.
- •Определение.
- •1.2. Множества. Представление множеств.
- •1) Применение списков.
- •3) Представление в виде массивов.
- •4) Представление в виде графа.
- •Определение.
- •Определение.
- •§ 2. “Разделяй и властвуй”.
- •Теорема 2.1
- •§ 3. Динамическое программирование
- •Алгоритм 3.1.
- •§ 4. Редактирующее расстояние
- •Алгоритм 4.1.
- •Алгоритм 4.2.
- •§ 5. Порядковые статистики Определение.
- •Алгоритм 5.1
- •Теорема 5.2.
- •§ 6. Вхождение образца
- •Определение.
- •Алгоритм 6.1a.
- •Алгоритм 6.1б. Вычисление функции отказов.
- •Теорема 6.2.
- •Алгоритм 6.1.Б вычисляет f за o(n) шагов.
- •Конец пока
- •Алгоритм lz
- •Дельта – алгоритм
- •Арифметическое кодирование
Алгоритм 3.1.
Вход. r0, r1,..., rn, где ri -1 и ri - числа строк и столбцов матрицы M i.
Выход. Минимальная сложность умножения матриц Mi в предположении, что для умножения (pq)-матрицы на (qr)-матрицу требуется pqr операций.
Метод:
begin
for i = 1 to n do mii = 0;
for l = 1 to n-1 do
for i = 1 to n-1 do
begin
j = i+l;
mij = MIN (mik+mk+1,j + ri-1rkrj);
ik<j
end;
write m1n;
end
m1n - стоимость пути.
Для того, чтобы получить порядок, в котором можно производить умножения, надо приписать каждой клетке таблицы то значение k , на котором достигается минимум в (*).
§ 4. Редактирующее расстояние
Задача.
Определение слова, похожего на какое-то слово. ( Распознавание ошибки в написании слова и предложение вариантов ее исправления).
Разрешены операции:
-
забыть букву,
-
вписать лишнюю букву,
-
перепутать букву.
Чтобы определить похожие слова, надо ввести понятие расстояния между словами (s1, s2).
Затем опрашивается база данных и выдается либо слово из базы данных, полностью совпадающее с проверяемым словом s, либо множество слов {q | (q,s) k}, где k фиксированное число.
Стоимость каждой операции над словом 1.
Лемма.
(s1, s2) = (s2, s1) ( )
Для любой из перечисленных операций существует обратная:
вставка удаление
замена обратная замена
Таким образом мы показали, что это метрика:
-
(s1, s2) 0
-
(s1, s2) = (s2, s1) ( условие леммы )
-
(s1, s2) (s1, s3) + (s3, s2)
Веса команд (их относительная стоимость) несущественны.
Можно ввести некую функцию, определяющую часоту ошибок.
Например, i e часто встречающаяся ошибка, z b редко встречающаяся.
Необходимо эффективно находить расстояние . Из одного алфавита можно перейти к другому и вычислять расстояние там, а потом вернуться назад в исходный алфавит. В данном случае сложность поиска даже больше, чем O(log2 n).
Варианты поиска:
-
перебор время exp (долго ).
-
методы динамического программирования более короткий способ.
Пример.
Пусть X = Aa, Y = Bb.
Пусть есть три способа получить X Y:
-
Aa B & b
-
A Bb &
a- удаление a -
A B & a b
Алгоритм 4.1.
Вход. Две строки a1... ak , b1...bk
Выход
-
Строится таблица M = {mij}, i = 1..k, j = 1.. m, где mij = ( ai , bj).
Варианты вычисления элементов таблицы:
а) mij = MIN ( mi,j-1+1; mi-1,j+1; mi-1,j-1 + (biaj ) ) ,
б)
Таблица должна быть симметричной!
2) Ищется минимальный по времени и стоимости путь.
Сложность алгоритма O(mn) размер матрицы стоимость операций ( = 1).
Если взять другие разрешенные операции:
-
{ удаление, перестановка } универсальная переборная задача.
-
{ вставка, удаление, замена, перестановка } полиномиальная.
Задача.
Найти n1/2
Алгоритм 4.2.
1) Самый простой: идем снизу, пока квадрат числа не достигнет (n+1)
a = 0;
while (a+1)2 n do a++;
Сложность алгоритма O(n1/2).
2) Аналогия быстрого умножения.
a = 0;
d = n;
repeat
d = d/2;
if ((a+d)2 n) a + = d;
until (d == 1);
Сложность алгоритма O(log2 n), так как d каждые два шага уменьшается в 2 раза.
Корректность.
Надо показать, что ряд 00 k/2 + 10 k/2 / 2 + ... + s01 может принимать любые значения в диапазоне [0, k-1].