Поиск диаметра графа с помощью BFS

#graph-theory #breadth-first-search

#теория графов #поиск по ширине

Вопрос:

Алгоритм поиска диаметра графа выглядит следующим образом:

  1. Запустите BFS в любой вершине arbirtray и запомните последний посещенный узел (скажем, t)
  2. Запустите BFS из t и запомните последний посещенный узел (скажем, t’)
  3. кратчайшее расстояние между t и t’ будет диаметром графика.

Это то, что я узнал, и это работало нормально, пока я не нашел следующий график:

 A------G-----C------D  
|  
E------F------B
 

Если я запускаю BFS из A , я получаю AGECF"DB"... , а BFS из B дает BFCEDGA.... , so d(B,A)=3 должен быть диаметр.

Но если я запускаю BFS из A as AGECF"BD" и затем запускаю BFS, из D которого выдает DCBGFAE , d(D,E) = 4 должен быть диаметр

Что пошло не так? Разве этот алгоритм не всегда работает?

Ответ №1:

Ваш алгоритм будет работать, только если вы хотите найти диаметр ациклического дерева. Если вы хотите найти диаметр графа, вы можете использовать алгоритм кратчайшего пути Флойда-Варшалла для всех пар. Затем, пройдя всю матрицу расстояний, вы можете найти диаметр графика.

Ответ №2:

К сожалению, ваш алгоритм неверен. Взгляните на обсуждение здесь:

https://cs.stackexchange.com/questions/194/the-time-complexity-of-finding-the-diameter-of-a-graph

В общем, если вы хотите гарантировать диаметр графа, вам нужно выполнить BFS (Дейкстра во взвешенном графике) из каждого состояния, а затем получить максимум по всем поискам. (Или вычислите информацию о кратчайшем пути для всех пар и найдите самый длинный кратчайший путь из этих данных.)

Вы можете добиться большего успеха, если вы находитесь в ориентированном дереве или в других особых случаях.