Определине путей и кратчайших путей в графах.
Существует несколько алгоритмов о решении задач о лабиринте.
1) Алгоритм Тарри. Каждое ребро графа проходит дважды в каждом из двух напралений.
Правило 1: не проходить дважды по одному и тому же ребру в одном и том же направлении.
Правило 2: находясь в вершине xj не двигаться по ребру. Приведшему в эту вершину один раз, если имеются другие возможности.
Можно показать, что остановка из-за невыполнения этого алгоритма произойдёт в x0 , причём все рёбра графа к этому времени будут пройдены во всех направлениях по одному разу.
2) Алгоритм Бержа.
Алгоритм прост, но не экономичен.
Л
В ряде случаев, когда известен тип задачи, алгоритм Тарри можно рассматривать в упрощённом виде: идём столько раз вперёд, пока не попадём в висящую вершину, попадая в неё поворачиваем в сторону не пройденного пути, снова попадаем в висящую вершину, пока не попадём в нужную. Пусть соответствует однократному графу (то есть прохождение одного раза).
Отсечение (введение ещё одной вершины, не совпадающей с первой).
Граф G(x) представляет собой граф с нагруженными рёбрами, под длиной пути подразумевается сумма мер.
= (xi , xj), где (xi , xj) принадлежат .
В особый класс выделяются задачи для графа с ненагруженными рёбрами, причём такой граф считается графом с нагруженными рёбрами, длина пути которого составит
i, j (µ(xi , xj)).
Алгоритм 1: Начиная от х0 просматриваем сначала все вершины смежные с х0 путём. Состоящим из одного ребра. У каждой из этих вершин записываем по мере от каждой вершины до х0. На следующем шаге просматриваем все вершины достижимые из х0 двухрёберными путями, и опять в каждой вершине записываем её расстояние до вершины х0. Очевидно, возможны случаи, когда в какую-нибудь вершину мы попадаем дважды. В таком случае (если в вершину идёт несколько путей) в этой вершине записывается мера кратчайшего из путей и указывается по какому пути достигнута.
Допустим, на некотором шаге попали в вершину хк по пути длинной М, далее исключим из рассмотрения все вершины не совпадающие с хк, для которых длина пути М М1 (так как через эти вершины нет более короткого пути). После этого на оставшемся графе продолжаем осмотр путей описанным способом. Возможно, что на некотором шаге мы опять попадем в хк по пути М2 < М1. Тогда исключим все просмотренные вершины, не совпадающие с хк и длиной < М1. Этот алгоритм представляет собой один из вариантов исследования задачи операции методов динамического программирования.
Алгоритм Форда: Этот алгоритм предназначен для нахождения кратчайшего пути в ориентированном графе из х0 в х1.
На первом шаге каждая вершина хi помечается индексом i. Ищем дугу
(хi , xj) для которой выполняется неравенство:
j – i µ(xi , xj).
Выполним эту операцию несколько раз, причем j – уменьшается, а индексы установлены до некоторого уровня. Ищем хр – смежную с вершиной хn и такую для которой λn-λp= µ(xр , xn).
Пусть хр – последняя вершина, в которой удалось уменьшить индекс, далее переходим к вершине хs, смежной с вершиной хр такую что λp - λs = µ(xs , xp). Такая вершина найдётся из аналогичных рассуждений и так далее. В результате последовательность индексов λn , λp , λs … - убывающая, соответственно на каком-то из шагов мы попадём в вершину (xp)к+1 = х0 для которой . Справедливо следующее утверждение: установившееся значение n есть длина кратчайшего пути, ведущего из х0 в хn.
Доминирование.
Дата добавления: 2016-06-05; просмотров: 1891;