- •Введение
- •1. Алгоритмы сортировки
- •1.1. Общие положения
- •1.2. Сортировка простыми включениями
- •Словесное описание алгоритма
- •1.3. Сортировка простым выбором
- •1.4. Сортировка простым обменом
- •1.5. Задания для самостоятельной работы
- •2. Алгоритмы покрытия
- •2.1. Постановка задачи покрытия
- •2. 2. Алгоритм полного перебора
- •2. 3. Алгоритм граничного перебора по вогнутому множеству
- •2.4. Алгоритмы, использующие сокращение таблицы покрытий
- •1. Для случая построения одного кратчайшего покрытия
- •2. В случае построения минимального покрытия
- •3. При условии построения всех безызбыточных покрытий
- •2.5. Алгоритм приближенного решения задачи о покрытии
- •2.6. Задачи для самостоятельной работы
- •3. Алгоритмы на графах
- •3.1. Общие положения
- •3.2. Алгоритмы нахождения оптимального пути
- •Волновой алгоритм построения кратчайшего пути для взвешенного графа
- •Волновой алгоритм построения длиннейшего пути во взвешенном графе
- •3.3. Нахождение компонент связности
- •Алгоритм построения компонент связности в неориентированном графе
- •Пример 3.5
- •3.4. Алгоритмы нахождения подграфов
- •3.5. Дерево. Остов
- •Пример 3.7.
- •Алгоритм построения произвольного остова
- •Алгоритм построения минимального остова
- •Алгоритм построения системы независимых циклов графа
- •Пример 3.12.
- •3.6. Алгоритм кратчайшей раскраски графа
- •3.7. Задачи для самостоятельной работы
- •4. Конечные автоматы
- •4.1. Общие положения
- •4.2. Представление автомата
- •4.3. Взаимные преобразования автоматов
- •4.4. Определение реакции автомата на входное слово
- •4.5. Задания для самостоятельной работы
- •5. Машины тьюринга
- •5.1. Общие положения
- •5.2. Операции над машинами Тьюринга
- •6. Структуры данных
- •6.1. Списки
- •6.2. Двусвязный список
- •6.3. Кольцевой список
- •6.4. Стек
- •6.5. Очередь
- •6.6. Задания для самостоятельной работы
- •Литература
2.4. Алгоритмы, использующие сокращение таблицы покрытий
Теорема 2.3. (о ядре). Если в столбце таблицы покрытий содержится единственная единица, то строка, содержащая эту единицу, входит во все покрытия и называется ядерной.
Множество ядерных строк заранее выделяется и запоминается для введения во все покрытия. Ядерные строки из ТП удаляются и вычеркиваются все покрытые ими столбцы, т.е. вычеркиваются все столбцы, в которых есть 1 в ядерных строках.
Теорема 1.4. (об антиядре). Если после удаления ядерных строк и покрытых ими столбцов в какой-либо строке не останется 1, то этa строка не входит ни в одно безызбыточное покрытие. Такие строки называются антиядерными и вычеркиваются из ТП без запоминания.
Определение 2.4. Вектор поглощает вектор ,E F, если для всех компонент этих векторов можно одновременно записать. В противном случае векторы называются несравнимимы.
Пример 2.2. Пусть заданы два вектора E=(1,1,0,1), F=(0,1,0,1). Сравнивая их поэлементно (например, слева направо), заключаем, что E F.
Теорема 2.5 (о поглощающих столбцах). В ТП могут быть вычеркнуты все поглощающие столбцы (рассматриваемые как векторы) без ущерба для построения всех безызбыточных покрытий.
Теорема 2.6 (о поглощаемых строках при поиске одного кратчайшего покрытия). Если при решении задачи о покрытии достаточно гарантировать получение хотя бы одного кратчайшего покрытия, то можно удалить все поглощаемые строки.
Теорема 2.7 (о поглощающих строках при построении минимальных покрытий). Если при решении задачи о покрытии достаточно гарантировать построение всех (хотя бы одного) минимального покрытия, то можно вычеркивать поглощаемую строку, если цена её больше или равна цене поглощающей строки.
Используя теоремы 2.3 2.7, упрощаем ТП. При этом возможны два исхода.
1. ТП после упрощения становится пустой (вычеркнуты все столбцы). В этом случае множество ядерных строк требуемое покрытие.
2. Остаток ТП более не упрощается приёмами из теорем 2.3 2.7. Получаем циклический остаток (ЦО) таблицы покрытий. Покрытие ЦО таблицы можно строить методами граничного перебора либо разложения по столбцу.
Полное решение (покрытие исходной таблицы) состоит из ядерных строк и строк покрытия ЦО.
Расмотрим варианты алгоритма построения ЦО для ТП.
1. Для случая построения одного кратчайшего покрытия
Словесное описание алгоритма:
0. Считаем исходную таблицу покрытий текущей, а множество ядерных строк – пустым;
1. Находим ядерные строки, запоминаем множество ядерных строк. Текущую ТП сокращаем: вычеркиваем ядерные строки и все столбцы, покрытые ими;
2. Вычеркиваем антиядерные строки;
3. Вычеркиваем поглощающие столбцы;
4. Вычеркиваем поглощаемые строки;
5. Если в результате выполнения п.1-4 текущая ТП изменилась, снова выполняем п.1, иначе преобразования заканчиваем.
Получаются два результата: множество ядерных строк и ЦО ТП.
2. В случае построения минимального покрытия
При этом изменяется только п.4 алгоритма, который формулируется следующим образом: вычеркиваются поглощаемые строки, веса которых не меньше весов соответствующих поглощающих строк.