- •§ 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
- •Дельта – алгоритм
- •Арифметическое кодирование
Определение.
Очередь - это список, в который элементы всегда добавляются с одного (переднего) конца, а удаляются с другого.
Как и стек, очередь можно реализовать одним массивом (рис. 7), где приведена очередь, содержащая список из элементов P, Q, R, S, T. Два указателя обозначают ячейки текущего переднего и заднего концов очереди.
Рис. 6
Чтобы добавить (Add) новый элемент к очереди, как и в случае стека, полагают first= first+1 и помещают новый элемент в name [first].
Чтобы удалить (Delete) элемент из очереди, заменяют last = last +1. Эта техника с точки зрения доступа к элементам основана на принципе “первый вошел - первый вышел”.
Поскольку массив name имеет конечную длину l, указатели first и last рано или поздно доберутся до его конца. Если длина списка, представленного этой очередью, никогда не превосходит l, то можно трактовать name [0] как элемент, следующий за элементом name [l-1]
Поиск в ширину использует очередь, в глубину стек.
1.2. Множества. Представление множеств.
1) Применение списков.
При этом объем памяти, необходимый для представления множества, пропорционален числу его элементов. Время, требуемое для выполнения операции над множествами, зависит от природы операции.
Пусть А и В - множества.
Операция А В требует времени, по крайней мере пропорционального сумме размеров этих множеств, поскольку как список, представляющий А, так и список, представляющий В, надо просмотреть хотя бы один раз. Если оба списка упорядочены, то для нахождения их пересечения существует линейный алгоритм.
Операция АВ требует времени, пропорционального сумме размеров множеств, поскольку надо выделить элементы, входящие в оба множества, и вычеркнуть один экземпляр каждого такого элемента. Если же А и В не пересекаются, то можно найти АВ за время, не зависящее от размера А и В. Для этого необходимо сделать конкатенацию списков, представляющих А и B. Задача объединения двух непересекающихся множеств усложняется, если необходимо быстро определять, входит ли данный элемент в данное множество. Сложность - О(1).
2) Битовое представление представление в виде двоичного вектора.
Пусть U- универсальное множество (т.е. все рассматриваемые множества являются его подмножествами), U= n. Линейно упорядочим его. Подмножество SU
представляется в виде вектора vs из n битов, такого, что i-ый разряд в vs равен 1 тогда и только тогда, когда i-ый элемент множества U принадлежит S.
vs называется характеристическим вектором для S.
Определение принадлежности i-ого элемента множества U данному множеству не зависит от размера данного множества. Основные операции над множествами ( объединение, пересечение ) можно осуществить как операции и над двоичными векторами ( за время O( 1 )).
3) Представление в виде массивов.
Определяется массив A такой, что :
Определение принадлежности i-ого элемента множества U данному множеству решается за O(1),
операции объединение и пересечение - за время, пропорциональное U.