- •Оглавление
- •Алгоритмы на перестановках
- •Введение
- •Перестановки. Произведение перестановок
- •Обратные перестановки. Алгоритмы
- •Рекурсия
- •Информационные структуры
- •Последовательное и связанное распределение данных
- •Стеки и очереди
- •Организация связанного распределения на основе стеков и очередей
- •Деревья
- •Представление деревьев
- •Прохождение деревьев, леса
- •Алгоритмы на графах
- •Графы. Представления графов. Связность и расстояние
- •Остовные деревья
- •Поиск по графу в глубину. Топологическая сортировка
- •Топологическая сортировка
- •Транзитивное замыкание. Поиск кратчайшего пути на графе
- •Поиск кратчайшего пути
- •4. Генерирование случайных последовательностей
- •4.1. Генерирование равномерно распределенных случайных чисел
- •Джон фон Нейман
- •4.2. Основные критерии проверки случайных наблюдений
- •4.3. Эмпирические критерии
- •Критерий равномерности (критерий частот)
- •Критерий серий
- •Критерий интервалов
- •Покер-критерий (критерий разбиений)
- •4.4. Численные распределения
- •Случайный выбор из ограниченного множества
- •Общие методы для непрерывных распределений
- •Нормальное распределение
- •Показательное распределение
- •4.5. Что такое случайная последовательность
- •Процедура получения простейшего генератора случайных чисел
- •Литература
Топологическая сортировка
П
а) б)
Рис. 3.4. Ациклические ориентированные графы
Топологическая сортировка может рассматриваться как процесс отыскания линейного порядка, в который может быть вложен данный частичный порядок. Граф при этом должен быть ациклическим. Топологическая сортировка полезна при анализе схем действия, где большой и сложный план представляется как ориентированный граф, вершины которого соответствуют целям плана, а ребра действиям. Топологическая сортировка дает порядок, в котором могут быть достигнуты цели.
Топологическая сортировка начинается с отыскания вершины графа G = (V, E), из которой не выходят ребра, и присвоения этой вершине наибольшего номера, а именно |V|. Эта вершина удаляется из графа вместе с входящими в нее ребрами. Поскольку оставшийся ориентированный граф также ациклический, мы повторяем процесс и присваиваем следующий наибольший номер |V| – 1 вершине, из которой не выходят ребра и т. д.
Транзитивное замыкание. Поиск кратчайшего пути на графе
Пусть задан граф G = (V, E), и нас интересует, какие вершины связаны между собой, не только напрямую, но и через посредство других вершин. Чтобы ответить на этот вопрос, воспользуемся матрицей смежности.
Рис. 3.5. G* — транзитивное замыкание графа G
Поиск кратчайшего пути
Предполагаем, что имеем простой взвешенный ориентированный граф. Несуществующие ребра будем считать ребрами с бесконечным весом. Сумму весов ребер пути будем называть весом или длиной этого пути.
Алгоритм поиска кратчайшего пути следующий.
Пусть путь ищется между вершинами s (начало) и f (конец). Мы начинаем проход из вершины s и просматриваем граф в ширину, помечая вершины значениями их расстояний от s. Процесс заканчивается, когда вершина f помечена значением ее расстояния от s и эта метка далее не меняется. Таким образом, в каждый момент времени работы алгоритма некоторые вершины будут иметь окончательные метки, а некоторые — временные.
Если учесть, что в начале алгоритма вершинеs присваивается окончательная метка 0 (нулевое расстояние до самой себя), а каждой из остальных вершин присваивается метка , то на каждом шаге алгоритма одной из вершин присваивается окончательная метка и поиск продолжается дальше.
Рис. 3.6. Простой взвешенный граф
Как видно из нижнего рисунка граф G из b в g имеет три кратчайших пути, длины которых равны 12. Это путь b, c, e, d, g ; b, c, a, d, g и b, c, d,g.
На каждом шаге метки меняются следующим образом:
Каждой вершине j, не имеющей окончательной метки, присваивается новая временная метка с учетом расстояния от s до j.
Находится наименьшая из временных меток, она и становится окончательной меткой своей вершины. В случае равенства выбирается любая из них. Процесс продолжается до тех пор, пока вершине f не присваивается окончательная метка.