Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
15. Оптимизационные алгоритмыВ этой главе мы рассмотрим несколько алгоритмов решения оптимизационных задач на графах. Эти задачи возникают в различных приложениях, связанных с исследованием операций и вычислительной техникой. Мы обсудим алгоритмы, касающиеся следующих основных тем: 1. Кратчайшие пути. 2. Оптимальные деревья. 3. Паросочетания в графе. 4. Потоки в сетях. 5. Оптимальные ветвления. 15.1. Кратчайшие путиПусть G — связный ориентированный граф, в котором каждому ориентированному ребру сопоставлено положительное вещественное число, называемое длиной ребра. Длина ребра, направленного из вершины i в вершину j, обозначается через 1. Найти кратчайшие пути из данной вершины s ко всем другим вершинам графа 2. Найти кратчайшие пути между всеми упорядоченными парами вершин графа Эти две задачи возникают в нескольких проблемах оптимизации. Например, определение потока минимальной стоимости в транспортной сети включает определение кратчайшего пути из источника до стока сети [15.1]. 15.1.1. Кратчайшие пути из данной вершины S ко всем другим вершинам графаРассмотрим алгоритм Дейкстры [15.2], который определяет кратчайшие пути из данной вершины ко всем другим вершинам связного ориентированного графа на Пусть V — множество вершин графа Пусть Р — путь минимальной длины среди всех ориентированных путей из s к вершинам в S. Длина пути Р называется расстоянием
Тогда еслиу? S такое, что
Алгоритм Дейкстры порождает последовательность 1. Если 2. Когда множество
Таким образом, построение
Следовательно, согласно формуле (15.3),
Если Предположим, что подмножества
Из выражения (15.1) следует, что существует такая вершина Если нам необходимо получить кратчайший путь только до другой данной вершины t, то мы можем завершить вычисления после получения первого множества Ясно, что в этой процедуре необходимо вычислять минимум в выражении (15.1) на каждом этапе. Если этот минимум действительно вычислялся бы на каждом этапе, то определение Однако многие из этих сложений и сравнений не обязательно должны каждый раз повторяться. Дейкстра в своем алгоритме устранил такие повторения, сохранив полученную на одном из этапов информацию для последующих этапов. Это достигается процедурой расстановки меток, которая, как мы увидим, уменьшает сложность алгоритма до
для всех
Тогда
Отметим, что метка и, не меняется после определения Таким образом, алгоритм Дейкстры начинает работу с меток метки модифицируются в соответствии с выражением (15.5). Метки Ясно, что определение 1 первое вычисление по формуле (15.5) требует Представим описание алгоритма Дейкстры. В этом описании LABEL — это массив, в котором хранятся текущие метки вершин. Вершины становятся постоянно помеченными, когда они оказываются равными PRED — массив указателей на вершины, из которых осуществлен переход в вершины с неизменной меткой. Если вершина v помечена неизменной меткой, то Алгоритм 15.1. Кратчайшие пути (Дейкстра). S0. G — данный ориентированный граф с взвешенными ребрами. Требуется найти кратчайшие пути из вершины s во все остальные вершины графа S1. (Начало.) Положить LABEL S2. Пусть S3. (Вычисление LABEL и изменение элементов массива PRED). Положить S4. (Выделение вершины S5. Если Отметим, что в программе для вычислительной машины Чтобы проиллюстрировать работу алгоритма Дейкстры, рассмотрим граф на рис. 15.1, на котором длины ребер указаны рядом. На рис. 15.2 изображены элементы массивов LABEL и PRED.
Рис. 15.1.
Рис. 15.2. Иллюстрация к алгоритму Дейкстры (массив LABEL изображен на рис. а). Для любого i элементы массива LABEL, обведенные кружком, соответствуют вершинам, помеченным неизменной меткой, а именно вершинам из множества расстояния получаются из конечных значений элементов массивов PRED и LABEL. При обсуждении алгоритма мы предполагали, что все длины неотрицательны. Алгоритм Дейкстры неприменим, если какие-либо из длин отрицательны (почему?). Однако некоторая модификация этого алгоритма делает его применимым для более общего случая, когда в графе нет ориентированных циклов с отрицательной длиной. Джонсон [15.3] показал, что в худшем случае этот модифицированный алгоритм имеет сложность Иногда может возникнуть необходимость получить не самые короткие пути. Такая и связанные с ней задачи обсуждаются в работах [15.5-15.10]. Алгоритмы, предназначенные для разреженных графов, приведены в работах [15.11, 15.12]. 15.1.2. Кратчайшие пути между всеми парами вершинПредположим, что необходимо найти кратчайшие пути между всеми Пусть дан ориентированный граф G на Начиная с матрицы алгоритм Флойда строит последовательность
Пусть Теорема 15.1.. Для Доказательство. Аналогично доказательству теоремы 14.1. Обычно кроме кратчайших длин нам необходимо также получить сами пути с такими длинами. Напомним, что в алгоритме Дейкстры мы использовали массив PRED, чтобы хранить указание на вершины, встречающиеся в кратчайших путях. Это достигается в алгоритме Флойда следующим образом: по мере построения последовательности
получается
Это правило аналогично правилу, применяемому на шаге С другой стороны, если то
Отметим, что в формуле (15.7) если или Алгоритм 15.2. Кратчайшие пути между всеми парами вершин (Флойд). S1.
S2. Пусть S3. Пусть 1) положить 2) если S4. 1. Если какой-либо элемент матрицы 2. Если все 3. Если все Алгоритм Флойда является наиболее эффективным из известных алгоритмов выделения всех кратчайших путей. Он применим к графам с отрицательными длинами. Для ознакомления с другим эффективным алгоритмом выделения всех кратчайших путей см. работу [15.14]. В работе [15.15] предлагается алгоритм выделения всех кратчайших путей. Позже в работе [15.16] было указано на наличие в этой работе ошибки и представлен исправленный вариант. В работе [15.17] приводится исчерпывающая библиография по алгоритмам выделения кратчайших путей.
|
1 |
Оглавление
|