42. Алгоритм топологической сортировки. Алгоритм нахождения расстояния от источника до всех остальных вершин в графе в случае бесконтурного графа. Оценка вычислительной сложности
Алгоритм топологической сортировки
Алгоритм генерирует последовательность согласованных меток для вершин бесконтурного орграфа. В самом начале работы алгоритма антецеденты каждой вершины записываются в множество A(v)
begin for v ÎV do вычислить A(v); label := 0; while остаются неотмеченные вершины, для которых A(v) = Æ do begin label := 1+ label; u:= вершина с A(u) = Æ; присвоить метку вершине u; for каждой неотмеченной вершины v ÎV do A(v) := A(v)\{u} end end |
Пути в бесконтурном графе
Второй случай, для которого известен алгоритм нахождения расстояний от фиксированной вершины за время O(n2) — случай, когда граф является бесконтурным (веса дуг могут быть произвольными). Сначала докажем следующую лемму.
Лемма. В произвольном бесконтурном графе вершины можно перенумеровать так, что каждая дуга будет иметь вид vi, vj, где i < j.
Пример такой нумерации приведен на рисунке.
7 (3) 8 (1) (5) t = 9 s = 1 (2) 4 (5) 5 (6) (4) (1) (7) 6 (2) (10) (5) 2 3
Алгоритм нумерации вершин бесконтурного графа
Данные: Ориентированный бесконтурный граф V, E, определяемый списками инцидентности ЗАПИСЬ [v], v V.
Результаты: Для каждой вершины v V номер NR[v], такой что для произвольной дуги u, v E выполняется неравенство NR[u] < NR[v].
1 begin
2 for v V do ЧЗАХ [v] := 0;
{ ЧЗАХ [v] = число дуг, заходящих в v }
3 for u V do
4 for v ЗАПИСЬ [u] do ЧЗАХ [v] := ЧЗАХ [v] + 1;
5 СТЕК := ;
6 for v V do
7 if ЧЗАХ [v] = 0 then СТЕК v;
8 num := 0;
9 while СТЕК do
10 begin u СТЕК;
11 num := num + 1; NR[u] := num;
12 for v ЗАПИСЬ [u] do
13 begin ЧЗАХ [v] := ЧЗАХ [v] – 1;
14 if ЧЗАХ [v] = 0 then СТЕК v;
15 end
16 end
17 end
Алгоритм основывается на следующем простом факте: в произвольном (непустом) бесконтурном графе существует вершина, в которую не заходит ни одна дуга. Чтобы убедиться в этом, выберем произвольную вершину w1 графа, затем некоторую вершину w2, такую что w2 w1, затем вершину w3, такую что w3 w2, и т.д. Через конечное число шагов мы должны дойти до некоторой вершины wi, в которую не заходит ни одна дуга, ибо в силу бесконтурности ни одна вершина не может повторяться в последовательности w1, w2, w3 , ... .
В нашем алгоритме вершины, в которые не заходит ни одна дуга, накапливаются в стеке. В строке 10 выбирается верхний элемент стека u (это мог бы быть произвольный элемент стека), и этой вершине присваивается самый маленький из еще неиспользованных номеров. Таким образом, мы гарантируем то, что все дуги, выходящие из этой вершины, ведут к вершине с большими номерами. Затем вершина u вместе с выходящими из нее дугами удаляется из графа. Это приводит к уменьшению на единицу числа дуг, заходящих в каждую вершину v, такую что u v ; это число запоминается в ЧЗАХ [v]. Если для какой-нибудь из вершин v это число сводится к нулю, то v помещается в стек.
В силу бесконтурности графа и наших предыдущих замечаний полное опустошение стека, вызывающее окончание выполнения алгоритма (см. цикл 9), наступает не раньше, чем после присвоения номеров всем вершинам графа.
Легко заметить, что каждая дуга анализируется алгоритмом один раз в строке 4 и один раз в строке 12. Таким образом, сложность алгоритма есть O(m) (остается в силе предположение m = (n), в противном случае следовало бы написать O(m + n)).
Примечание:
При сравнении скорости роста двух функций f(n) и g(n) (c неотрицательными значениями) мы, как обычно, используем следующие обозначения:
f(n) = O(g(n)) существуют константы С, N > 0, такие что f(n) С g(n) для всех n N
f(n) = (g(n)) существуют константы С, N > 0, такие что f(n) С g(n) для всех n N.
То есть, в частности, f(n) = (g(n)) тогда и только тогда, когда g(n) = O(f(n)).
Согласно вышеизложенному алгоритму при описании алгоритма нахождения путей в бесконтурном графе мы можем предположить, что каждая дуга идет из вершины с меньшим номером в вершину с большим номером.
Алгоритм нахождения расстояний от источника до всех вершин в бесконтурном графе
Данные: Ориентированный граф V, E, где V = {v1, ... , vn}, и для произвольной дуги vi, vj E имеем i < j. Этот граф определен списками инцидентности ПРЕДШ[v], v V.
Результаты: Расстояния от v1 до всех вершин графа:
D[vi] = d(v1, vi), i = 1, ..., n.
1 begin
2 D[v1] := 0;
3 for j := 2 to n do D[vj] := ;
4 for j := 2 to n do
5 for vi ПРЕДШ [vj] do D[vj] := min(D[vj]), D[vi] + A[vi, vj])
6 end
Нетрудно доказать индукцией по j, что после выполнения цикла 4 для некоторого значения j выполняется равенство D[vi] = d(v1, vi), i = 1, ..., j. Достаточно воспользоваться тем фактом, что все промежуточные вершины кратчайшего пути из v1 в vi имеют номера меньше j.
Сложность алгоритма порядка O(m), так как каждая дуга vi, vj анализируется а строке 5 в точности один раз.
Описанные алгоритмы находят применения, в частности, в методах управления выполнением проекта, называемых PERT (Project Evaluation and Review Technique) или CPM (Critical Path Method). Эти методы основываются на построении графа (сети PERT или сети CPM), дуги которого соответствуют некоторым элементарным задачам, составляющим проект, а их веса указывают на время, необходимое для решения отдельных задач.
Кроме этого, мы предполагаем, что для произвольных дуг этого графа u, v и v, t задача, изображаемая дугой u, v, должна быть закончена перед началом решения задачи, изображаемой дугой v, t.
Легко заметить, что такой граф должен быть бесконтурным. Нашей задачей является нахождение самого длинного пути из вершины s, соответствующей началу проекта, до вершины t, соответствующей его окончанию. Такой путь называется критическим путем. Его длина определяет время, необходимое для реализации всего проекта. Очевидно, что задача сводится к задаче о кратчайшем пути путем изменения знака каждого веса a(u, v), где u v, на обратный.
- 2. Операции над множествами. Круги Эйлера. Покрытия и разбиения. Классы разбиения.
- 3. Законы алгебры множеств. Формула включений и исключений.
- 5. Соответствия. Способы задания соответствий.
- 6. Инволюция (обращение) соответствий. Объединение, пересечение, дополнение, произведение соответствий.
- 7. Функциональные соответствия, их связь с графиками функций.
- 8. Соответствие Галуа и его роль в проективном распознавании образов. Замкнутое подмножество.
- 9. Отношение. Бинарное отношение. Рефлексивное, симметричное, антисимметричное, асимметричное, транзитивное отношения.
- Унарные:
- Бинарные:
- Соответствия a, b, r
- 10. Отношение эквивалентности. Фактор-множество множества по отношению.
- 11. Отношение предпорядка, упорядоченности, строгой упорядоченности. Отношение частичного порядка.
- 12. Замыкание отношений. Рефлексивное, симметричное, транзитивное замыкание отношений.
- 13. Понятие нечеткого множества. Функция принадлежности. Способы формализации нечетких множеств. Наиболее распространенные параметрические функции принадлежности.
- 14. Основные логические операции над нечеткими множествами и их свойства.
- 15. Диаграмма Хассе как способ задания отношения частичного порядка на множестве.
- 16. Отображения. Изоморфизм. Автоморфизм. Гомоморфизм. Эпиморфизм. Эндоморфизм. Мономорфизм. Биморфизм.
- 17. Бинарная операция и ее основное множество. Способы задания бинарной операции. Таблица Кэли. Операционный квадрат таблицы Кэли.
- 18. Группоид. Квазигруппа. Латинский квадрат. Лупа. Полугруппа. Моноид. Группа. Абелева группа.
- 19. Группа симметрий фигуры.
- 20. Группа подстановок.
- 21. Иерархия систем с двумя бинарными операциями. Кольцо. Тело. Поле (коммутативное тело). Поле Галуа.
- 22. Решетка (структура). Решетка как частично упорядоченное множество.
- 23. Решетка как универсальная алгебра.
- Графы и ориентированные графы
- 27. Виды графов: двудольные графы, регулярные графы, полные графы, деревья, планарные графы
- 28. Изоморфизм графов.
- 29. Способы задания графов.
- 32. Эйлеров путь в графе. Задача о кенигсбергских мостах. Эйлеров цикл. Теорема о существовании эйлерова цикла.
- 33. Алгоритм нахождения эйлерова цикла и его вычислительная сложность.
- 34. Гамильтонов цикл в графе. Алгоритм с возвратом для поиска гамильтонова пути. Оценки вычислительной сложности алгоритма.
- 35. Задача коммивояжера. Алгоритм поиска субоптимального решения.
- 36. Задача построения минимального остовного дерева. Алгоритм Краскала. Алгоритм Прима. Оценка вычислительной сложности этих алгоритмов.
- 37. Перенумерация вершин графа. Алгоритм топологической сортировки.
- 39. Принцип оптимальности Беллмана. Алгоритм нахождения кратчайшего пути в ориентированном графе и его вычислительная сложность.
- 1 Begin
- 40. Алгоритм вычисления расстояний между всеми парами вершин графа. Общий случай.
- 41. Алгоритм нахождения расстояния от источника до всех остальных вершин в графе с неотрицательными весами дуг — метод Дейкстры. Оценка вычислительной сложности.
- 1 Begin
- 5 Begin
- 42. Алгоритм топологической сортировки. Алгоритм нахождения расстояния от источника до всех остальных вершин в графе в случае бесконтурного графа. Оценка вычислительной сложности
- 43. Знаковые графы и их практическое применение. Задачи из области социологии малых групп, экономики и политики.
- 44. Теорема о структуре (теорема Харари о балансе).
- 45. Знаковые орграфы как модель когнитивных карт. Контуры положительной и отрицательной обратной связи и устойчивость/изменчивость моделей на орграфах.
- 46. Двудольные графы. Необходимое и достаточное условие двудольности графа.
- 47. Сети Петри. Функционирование сети Петри. Конечные разметки сети.
- Иллюстрация к правилу срабатывания перехода
- 48. Сети Петри. Ограниченность, безопасность, сохраняемость, достижимость, живость. Моделирование на сетях Петри.
- 50. Конечный автомат как математическая модель устройства с конечной памятью и как управляющая система. Способы описания конечных автоматов: перечислительный; диаграмма состояний; таблица состояний.
- 51. Алгебра логики. Функции алгебры логики. Существенные и несущественные переменные. Бинарные логические операции. Формула. Суперпозиция функций. Таблицы истинности и таблицы Кэли.
- 52. Формы записи операций (функций) — инфиксная, префиксная, постфиксная. Эквивалентные формулы.
- 53. Основные схемы логически правильных рассуждений.
- 54. Функционально полные системы (базисы). Булева алгебра логики. Функциональная полнота системы булевых функций. Примеры других алгебр логики.
- 55. Основные эквивалентные соотношения в булевой алгебре. Выражение через дизъюнкцию, конъюнкцию и отрицание других логических бинарных операций. Двойственность.
- 56. Булева алгебра логики. Сднф и днф. Карта Карно. Функциональные схемы как приложение булевых функций.
- 57. Функции k-значной логики и их задание с помощью таблицы истинности и с помощью таблицы Кэли. Примеры k-значных логик.
- 59. Квантор всеобщности и квантор существования.
- 61. Истинные формулы и эквивалентные соотношения логики предикатов.
- 62. Префиксная нормальная форма. Процедура получения пнф.
- 63. Формальные теории. Принципы построения формальной теории.
- 64. Исчисление высказываний.