graphshortestpath

(Чтобы быть удаленным), Решают задачу кратчайшего пути в графике

graphshortestpath будет удален в будущем релизе. Использование shortestpath или shortestpathtree вместо этого.

Описание

[dist,path,pred] = graphshortestpath(G,S) определяет кратчайшие пути из исходного узла S ко всем другим узлам в графике Gdist содержит расстояния от исходного узла до всех других узлов. path содержит кратчайшие пути к каждому узлу. pred содержит узлы-предшественников кратчайших путей.

[___] = graphshortestpath(G,S,D) определяет кратчайший путь из исходного узла S к целевому узлу D и возвращает любой из выходных аргументов от предыдущего синтаксиса.

[___] = graphshortestpath(___,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение". Задайте аргументы пары "имя-значение" после любой из комбинаций входных аргументов в предыдущих синтаксисах.

Входные параметры

свернуть все

Матрица смежности в виде N-by-N матрица, которая представляет график. Ненулевые записи в матрице представляют веса ребер.

Типы данных: double | single | logical

Исходный узел в виде числового индекса узла.

Пример 2

Типы данных: double

Целевой узел в виде числового индекса узла.

Пример 5

Типы данных: double

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: [dist,path,pred] = graphshortestpath(G,1,5,'Method',Acyclic') принимает G быть направленным графом без петель при нахождении кратчайшего пути от узла 1 к узлу 5.

Алгоритм поиска кратчайшего пути в виде разделенной запятой пары, состоящей из 'Method' и одна из этих опций.

ОпцияОписание

'Dijkstra' (значение по умолчанию)

Этот алгоритм принимает, что весь вес ребра является положительными значениями в G. Временной сложностью является O(log(N)*E), где N и E являются количеством узлов и количеством ребер соответственно.

'BFS'

Этот алгоритм поиска в ширину принимает, что все веса равны и что ребра являются ненулевыми записями в матрице смежности G. Временной сложностью является O(N+E).

'Bellman-Ford'

Этот алгоритм принимает, что весь вес ребра является ненулевыми записями в G. Временной сложностью является O(N*E).

'Acyclic'

Этот алгоритм принимает тот G направленный граф без петель, и весь вес ребра является ненулевыми записями в G. Временной сложностью является O(N+E).

Пример: 'Method','Acyclic'

Типы данных: char | string

Направленный или неориентированный граф отмечает в виде разделенной запятой пары, состоящей из 'Directed' и true или false. Если false, функция игнорирует верхний треугольник матрицы смежности G.

Пример: 'Directed',false

Типы данных: логический

Пользовательские веса для ребер в матрице G в виде разделенной запятой пары, состоящей из 'Weights' и вектор-столбец. Вектор должен ответить следующим условиям.

  • Это должно иметь одну запись для каждого ненулевого значения (ребро) в матричном G.

  • Порядок пользовательских весов в векторе должен совпадать с порядком ненулевых значений в G когда это пересечено по столбцам.

Можно задать веса с нулевым знаком. По умолчанию функция получает информацию о весе из ненулевых записей в G.

Пример: 'Weights',[1 2.3 1.3 0 4]

Типы данных: double

Выходные аргументы

свернуть все

Расстояния от исходного узла до всех других узлов в графике, возвращенном в виде числа или вектора. dist возвращен как скаляр, если вы задаете целевой узел как третий входной параметр.

Функция возвращает Inf для недостижимых узлов и 0 для исходного узла.

Кратчайшие пути от исходного узла до всех других узлов, возвращенных как векторный массив или массив ячеек. Это возвращено как вектор, если вы задаете целевой узел. Каждый номер представляет индекс узла в графике.

Узлы-предшественники кратчайших путей, возвращенных как вектор.

Можно использовать pred определить кратчайшие пути от исходного узла до всех других узлов. Предположим, что у вас есть ориентированный граф с 6 узлами.

Функция находит, что кратчайшим путем от узла 1 к узлу 6 является path = [1 5 4 6] и pred = [0 6 5 5 1 4]. Теперь можно определить кратчайшие пути из узла 1 к любому другому узлу в рамках графика путем индексации в pred. Например, чтобы выяснить кратчайший путь от узла 1 к узлу 2, можно запросить pred с целевым узлом как первый запрос затем используйте данный ответ, чтобы получить следующий узел. Повторите эту процедуру, пока ответ запроса не 0, который указывает на исходный узел.

pred(2) = 6; pred(6) = 4; pred(4) = 5; pred(5) = 1; pred(1) = 0;
Результаты показывают, что кратчайшим путем от узла 1 к узлу 2 является 1->5->4->6->2.

Вопросы совместимости

развернуть все

Не рекомендуемый запуск в R2021b

Поведение изменяется в R2021b

Поведение изменяется в R2021b

Ссылки

[1] Дейкстра, E. W. "Примечание по Двум проблемам в Связи с Графиками". Numerische Mathematik. Издание 1, Номер 1, 1959, стр 269–271.

[2] Белман, R. "На проблеме Маршрутизации". Ежеквартально Прикладной математики. Издание 16, Номер 1, стр 87–90.

[3] Siek, J. G. Л. К. Ли и А. Ламсдэйн. Библиотека графика повышения: руководство пользователя и справочник. Верхний Сэддл-Ривер, NJ: образование Пирсона, 2002.

Смотрите также

|

Представленный в R2006b