Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Метод динамического программирования





 

Предполагается, что граф G = (X, U) не содержит контуров. Такие графы часто используются при решении задач автоматизированного проектирования, а также управления выполнением проектов с использованием методов PERT и CPM. В основе этих методов лежит построение ориентированного бесконтурного графа (сети PERT или CPM), дуги которого соответствуют некоторым элементарным задачам (этапам или операциям), составляющим проект, а их веса указывают на время, необходимое для решения отдельных задач. Кроме того, предполагается, что для любых
(xi, xj) Î U и (xi, xk) Î U задача, соответствующая дуге (xi, xj), должна быть закончена до начала решения задачи, изображаемой дугой (xi, xk). Очевидно, что ориентированный граф, который строится по указанным правилам, всегда является бесконтурным.

Алгоритмы поиска кратчайших путей в бесконтурных орграфах, основанные на методе динамического программирования, используют следующий принцип оптимальности Беллмана: "любой подпуть минимального пути является минимальным путем между соответствующими вершинами" [3].

Пусть вершины графа G = (X, U) перенумерованы таким образом, что для любой дуги (xi, xj) Î U всегда i < j, т. е. дуга направлена от вершины с меньшим номером к вершине с большим. Такая нумерация называется правильной и для бесконтурных орграфов всегда возможна [6].

Для построения правильной нумерации вершин используются алгоритмы топологической сортировки. Их суть заключается в следующем. Определяется некоторая вершина y Î X, из которой не исходит ни одной дуги, т. е. Г(y) = Æ. Этой вершине присваивается наибольший номер n и она удаляется из графа вместе с заходящими в нее дугами (x, y) Î U, где x Î Г-1(y). В полученном орграфе вновь отыскивается вершина, не имеющая исходящих дуг, и ей присваивается номер n – 1. Процесс продолжается до тех пор, пока не будет образован граф, состоящий из единственной вершины xi, которая получает номер i = 1. Варианты реализации алгоритма топологической сортировки детально описаны в работах [1, 6, 7].

Алгоритм поиска кратчайших путей m[ s, xi ] от источника s = x 1 до всех других вершин xi (), представленный ниже, подобно алгоритмам 1.1 и 1.2 также использует пометки l(xi) вершин графа.

 

Алгоритм 1.3 (вычисление длин кратчайших путей m[ s, xi ]

методом динамического программирования)

 

Данные: бесконтурный орграф G =(X, U) с n вершинами, имеющими правильную нумерацию; выделенный источник s = x 1; произвольные веса дуг l (xi, xj).

Результаты: длины l*(xi) кратчайших путей m[ s, xi ] от источника s до вершин xi ().

Шаг 1 (присвоение начальных значений)

Задать пометки l(xi) = ¥ вершинам l(xi) Î X \ s и l*(x 1) = 0 для x 1 = s. Присвоить j = 1.

Шаг 2 (изменение пометок)

Присвоить j = j + 1 и для вершины xj вычислить окончательное значение пометки:

, (1.4)

где T = Г-1(xj). При T = Æ пометка вершины xj не изменяется.

Шаг 3 (проверка условия окончания)

Если j = n, то конец алгоритма. Иначе переход к шагу 2.

 

При решении задачи поиска кратчайшего пути m[ s, t ] от источника
s = x 1 до стока t Î X \ s процесс изменения пометок завершается при достижении вершины t. В этом случае последний шаг имеет вид.

Шаг 3′ (условие окончания алгоритма 1.3 при поиске пути m[ s, t ])

Если xj = t, то конец алгоритма. Иначе переход к шагу 2.

 

Таким образом, для определения пометок l*(xi) достаточно один раз просмотреть список вершин графа в порядке возрастания их номеров. При этом выражение (1.4) обеспечивает получение корректного результата только при правильной нумерации вершин. В целом вычислительная сложность алгоритма оценивается как O (m) операций (m - число дуг), так как каждая дуга (xi, xj) Î U анализируется на шаге 2 в точности один раз. Построение кратчайших путей может быть выполнено любым из способов, указанных в разделе 1.2.

Использование метода динамического программирования позволяет легко построить еще одну модификацию алгоритма поиска кратчайших путей для бесконтурных орграфов, в которой решается задача вычисления минимальных расстояний g(xi) от каждой вершины xi Î X \ t до стока t = xn.

 

Алгоритм 1.4 (вычисление длин кратчайших путей m[ s, t ]

методом динамического программирования)

 

Данные: бесконтурный орграф G = (X, U) с n вершинами, имеющими правильную нумерацию; выделенный сток t = xn; произвольные веса дуг l (xi, xj).

Результаты: длины g*(x 1) кратчайших путей m[ s, xi ] от вершин xi () до стока t.

Шаг 1 (присвоение начальных значений)

Задать пометки g(xj) = ¥ вершинам xj Î X \ t и g*(xn) = 0 для xn = t. Присвоить i = n.

Шаг 2 (изменение пометок)

Присвоить i = i - 1 и для вершины xi вычислить окончательное значение пометки:

, (1.5)

где S = Г(xi). При S = Ø пометка вершины xi не изменяется.

Шаг 3 (проверка условия окончания)

Если i = n, то конец алгоритма. Иначе переход к шагу 2.

Чтобы использовать алгоритм 1.4 для поиска пути m[ s, t ], где t = xn и s Î X \ t, необходимо изменить условие окончания следующим образом.

Шаг 3' (условие окончания алгоритма 1.4 при поиске m[ s, t ])

Если xi = s, то конец алгоритма. Иначе переход к шагу 2.

 

Трудоемкость алгоритма 1.4 определяется аналогично и также составляет O (m) операций. Эта же оценка является предельной при поиске пути m[ s, t ] и достигается в случае s = x 1.

Существенное отличие алгоритма 1.4 состоит в обратном порядке просмотра вершин графа при расстановке пометок от стока к источнику. Для некоторой вершины xi Î X величина g*(xi) определяет длину кратчайшего пути m[ xi, t ], в отличие от пометки l*(xi), соответствующей длине пути m[ s, xi ]. Поэтому при построении пути не удается использовать соотношение (1.2), так как значения g*(xi) предполагают получение последовательности вершин

m[ s, t ] = (s, x (1), x (2),..., x (k), t)

в направлении от источника s к стоку t в соответствии с выражением вида

g*(xj) = g*(xi) - l (xi, xj), (1.6)

которое должно выполняться для любой дуги (xi, xj) Î m[ s, t ].

Сначала определяется вершина x (1) Î Г(s), удовлетворяющая условию (1.6), затем x (2) Î Г(x (1)) и т.д.

При построении кратчайшего пути также возможно применение двойных пометок вида [g*(xi), mi ], где mi - вершина графа, из которой помечена xi Î X. Вторая часть пометки обновляется при изменении g*(xi) по формуле (1.5) и получает значение mi = xj. В итоге источник s = x 1 с пометкой [g*(x 1), m 1] указывает вторую вершину x (1) = m 1 пути m[ s, t ], пометка [g(x (1)), m 2] определяет вершину x (2) = m 2 и т.д.

Пример 1.3. Пусть ориентированный граф, в котором отсутствуют контуры, имеет вид, показанный на рис. 1.7. Необходимо определить кратчайший путь m[ x 1, x 9].

 

 

Рис. 1.7. Представление графа для примера 1.3

 

Результаты работы алгоритма 1.3 показаны в виде вектора пометок l*(xi), который имеет вид:

(0, 2, 3, 1, 5, 6, 6, 9, 10).

Значения g*(xi), полученные по алгоритму 1.4, представлены вектором

(10, 12, 10, 9, 5, 4, 8, 5, 0).

Кратчайший путь m[ x 1, x 9] может быть построен по любому из этих векторов с помощью соотношения (1.2) или (1.6) соответственно и имеет вид:

m[ x 1, x 9] = (x 1, x 4, x 5, x 6, x 9).

В заключение следует отметить важное свойство пометок l*(xi) и g*(xi). Для любой вершины xi, принадлежащей кратчайшему пути m[ s, t ] в бесконтурном орграфе, всегда справедливо соотношение

l*(xi) + g*(xi) = L (m[ s, t ]), xi Î m[ s, t ], (1.7)

где L (m[ s, t ]) = l*(t) = g*(s) - длина кратчайшего пути от истока к стоку.

Условие (1.7) и требование правильной нумерации вершин позволяют построить кратчайший путь, так как в последовательности m[ s, t ] вершины xi Î m[ s, t ] всегда располагаются в порядке возрастания индексов i Î {1, 2,..., n }.

 

У П Р А Ж Н Е Н И Я

 

1.30. Обосновать необходимость правильной нумерации вершин графа при поиске кратчайшего пути методом динамического программирования.

1.31. Что показывают пометки g(xi), приписываемые вершинам графа в алгоритме 1.4?

1.32. Составить подпрограмму построения кратчайшего пути на графе по известным значениям пометок g*(xi).

1.33. Разработать формальную схему алгоритма топологической сортировки вершин бесконтурного ориентированного графа.

1.34. Написать программу построения правильной нумерации вершин графа на основе алгоритма топологической сортировки.

1.35. Модифицировать алгоритм 1.3 для поиска кратчайших путей с использованием пометок вида [l(xi), mi ].

1.36. Модифицировать алгоритм 1.4 для поиска кратчайших путей с использованием пометок вида [g(xi), mi ].

1.37. Решить задачу поиска кратчайших путей m[ xi, x 9], , для графа из примера 1.3 по алгоритму, в котором применяются двойные пометки.

1.38. Разработать процедуру построения кратчайшего пути из источника в сток на основе соотношения (1.7).

 

1.39. Определить кратчайший путь из вершины x 1 в вершину x 9 для графа, показанного на рис. 1.8.

Ответ: значения l*(xi) представлены вектором

(0, 6, 4, 7, 9, 13, 15, 14, 20).

 

Рис. 1.8. Представление графа для упражнения 1.39

1.40. Для графа на рис. 1.8 вычислить значения g*(xi) при условии, что стоком является вершина x 9.

 

Date: 2015-10-21; view: 625; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию