Яка часова складність пошуку діаметра графа ?
Діаметр графа - максимальний набір найкоротших відстаней шляху між усіма парами вершин у графі.
Я поняття не маю, що з цим робити, мені потрібен повний аналіз, як вирішити подібну проблему.
Яка часова складність пошуку діаметра графа ?
Діаметр графа - максимальний набір найкоротших відстаней шляху між усіма парами вершин у графі.
Я поняття не маю, що з цим робити, мені потрібен повний аналіз, як вирішити подібну проблему.
Відповіді:
Це рішення невірне.
На жаль, рішення є правдивим лише для дерев! Знайти діаметр дерева навіть цього не потрібно. Ось контрприклад для графіків (діаметр - 4; алгоритм повертає 3, якщо ви вибираєте це ):
Якщо графік спрямований, це досить складно, ось деякий документ, який вимагає швидших результатів у більш щільному випадку, ніж використання алгоритмів для всіх пар найкоротших шляхів.
Однак моя основна думка стосується випадку, коли графік не спрямований, і з негативними вагами я кілька разів чув про хороший трюк:
Його складність така ж, як два послідовних перших пошукових ширини¹, тобто якщо графік з'єднаний².
Здавалося, фольклор, але зараз я все ще намагаюся отримати довідку або довести її виправлення. Я оновлю, коли досягну однієї з цих цілей. Здається, так просто, я розміщую свою відповідь прямо зараз, можливо, хтось отримає її швидше.
¹ якщо графік зважений, вікіпедія, схоже, говорить але я впевнений лише про O ( | E | log | V | ) .
² Якщо графік не пов'язаний, ви отримуєте але вам, можливо, доведеться додати O ( α ( | V | ) ), щоб вибрати один елемент з кожного підключеного компонента. Я не впевнений, чи потрібно це, і все одно, ви можете вирішити, що діаметр в цьому випадку нескінченний.
Я припускаю , що ви маєте в виду діаметра від , яка є самим довгим найкоротшою знайденим в G .
Знайти діаметр можна за допомогою спочатку знаходження всіх найкоротших парних шляхів і визначення максимальної знайденої довжини. Алгоритм Флойда-Варшалла робить це за час. Алгоритм Джонсона може бути реалізований для досягнення часу O ( | V | 2 log | V | + | V | ⋅ | E | ) .
Зменшити найгірший час виконання часу, здається, важко досягти, оскільки існують відстані для розгляду та обчислення цих відстаней у підлінійний (амортизований) час, кожен з яких буде важким; дивіться тут пов’язану межу. Зверніть увагу на цей документ, який використовує інший підхід і отримує (трохи) швидший алгоритм.
Припущення:
1. Графік не зважений
2. Графік спрямований
O (| V || E |) часова складність.
Алгоритм:
ComputeDiameter(G(V,E)):
if ( isCycle( G(v,E) ) ) then
return INFINITY
if ( not isConnected( G(V,E) )) then
return INFINITY
diameter = 0
for each vertex u in G(V,E):
temp = BFS(G,u)
diameter = max( temp , diameter )
return diameter
Пояснення:
Перевіряємо цикл. якщо графік містить цикл, ми продовжуємо рухатися в циклі, тому ми будемо мати нескінченну відстань. Ми перевіряємо наявність підключення. Якщо графік не пов'язаний, це означає вершину u від G1 до вершини v в G2. Де G1 і G2 - будь-який два під графіки, які не пов'язані між собою. Таким чином, ми знову будемо мати нескінченну відстань. Ми будемо використовувати BFS для обчислення максимальної відстані між заданим вузлом (u) до всіх інших вузлів (v), які доступні від u. Тоді ми візьмемо максимум раніше обчисленого діаметра і результат повернення BFS. Тож у нас буде максимальний діаметр струму.
Аналіз часу роботи:
Загальний час = O (| v || E |) + O (| E |) + O (| E |),
оскільки | V || E | > | Е |
тому у нас є час роботи як O (| v || E |).
Примітка. Це не елегантне рішення цієї проблеми.