Часова складність пошуку діаметра графіка


27

Яка часова складність пошуку діаметра графа G=(V,E) ?

  • O(|V|2)
  • O(|V|2+|V||Е|)
  • O(|V|2|E|)
  • O(|V||E|2)

Діаметр графа - максимальний набір найкоротших відстаней шляху між усіма парами вершин у графі.G

Я поняття не маю, що з цим робити, мені потрібен повний аналіз, як вирішити подібну проблему.


4
Будь ласка, докладіть тату. Чому ця проблема вас цікавить? Вам потрібна підказка, повний аналіз чи довідка? Вас цікавить найгірший чи середній час? Чи спрямований ? G
Рафаель

@Raphael: Очевидно, що мені не потрібна підказка, мені потрібен повний аналіз. Я все-таки редагував своє запитання.
Джигілі

1
@Gigili Ви маєте на увазі у всіх випадках, правда? В іншому випадку всі підпадають під останню можливість (яка на загальних графах дорівнює O ( | V | 5 ) ), що робить її правильною відповіддю, якщо вважати, що принаймні одна відповідь повинна бути правильною. Додаткове занепокоєння полягає в тому, що в графіку з циклами немає найдовшого шляху. Що означає "найдовша відстань"? ΘO(|V|5)
Рафаель

@Gigili Звідки беруться чотири варіанти?
uli

Відповіді:


5

Оновлення:

Це рішення невірне.

На жаль, рішення є правдивим лише для дерев! Знайти діаметр дерева навіть цього не потрібно. Ось контрприклад для графіків (діаметр - 4; алгоритм повертає 3, якщо ви вибираєте це ):v

введіть тут опис зображення


Якщо графік спрямований, це досить складно, ось деякий документ, який вимагає швидших результатів у більш щільному випадку, ніж використання алгоритмів для всіх пар найкоротших шляхів.

Однак моя основна думка стосується випадку, коли графік не спрямований, і з негативними вагами я кілька разів чув про хороший трюк:

  1. Виберіть вершину v
  2. Знайдіть таке, що d ( v , u )ud(v,u) максимальне
  3. Знайдіть таке, що d ( u , w ) максимальнеwd(u,w)
  4. Повернення d(u,w)

Його складність така ж, як два послідовних перших пошукових ширини¹, тобто якщо графік з'єднаний².O(|E|)

Здавалося, фольклор, але зараз я все ще намагаюся отримати довідку або довести її виправлення. Я оновлю, коли досягну однієї з цих цілей. Здається, так просто, я розміщую свою відповідь прямо зараз, можливо, хтось отримає її швидше.

¹ якщо графік зважений, вікіпедія, схоже, говорить але я впевнений лише про O ( | E | log | V | )O(|E|+|V|log|V|)O(|E|log|V|) .

² Якщо графік не пов'язаний, ви отримуєте але вам, можливо, доведеться додати O ( α ( | V | ) ), щоб вибрати один елемент з кожного підключеного компонента. Я не впевнений, чи потрібно це, і все одно, ви можете вирішити, що діаметр в цьому випадку нескінченний.O(|V|+|E|)O(α(|V|))


Щоб працювати Dijsktra у визначений час, потрібно використовувати купи Фібоначчі, а не звичайну реалізацію.
Суреш

8
Це категорично неправильна відповідь, цей алгоритм є фольклорним, але на деревах не загальними графами. PS: Я бачу ваш зустрічний приклад, але це не добре відповідь, щоб бути позначеним як відповідь.

У мене є два питання щодо неправильного рішення. 1. Чи хоч це дасть діапазон, у якому повинна бути правильна відповідь? Наприклад, якщо метод знайде діаметр d , чи буде правильним рішенням між d і 2d ? 2. Що станеться, якщо ми додамо іншу непряму і розглянемо всі вузли, знайдені непрямим (не лише один)? Приклад лічильника, наведений у публікації, працював би тоді, оскільки справжні периферійні вершини є серед вузлів, знайдених другим непрямим.
мафу

32

Я припускаю , що ви маєте в виду діаметра від , яка є самим довгим найкоротшою знайденим в GGG .

Знайти діаметр можна за допомогою спочатку знаходження всіх найкоротших парних шляхів і визначення максимальної знайденої довжини. Алгоритм Флойда-Варшалла робить це за час. Алгоритм Джонсона може бути реалізований для досягнення часу O ( | V | 2 log | V | + | V || E | ) .Θ(|V|3)O(|V|2log|V|+|V||E|)

Зменшити найгірший час виконання часу, здається, важко досягти, оскільки існують відстані для розгляду та обчислення цих відстаней у підлінійний (амортизований) час, кожен з яких буде важким; дивіться тут пов’язану межу. Зверніть увагу на цей документ, який використовує інший підхід і отримує (трохи) швидший алгоритм.O(|V|2)


2
Якщо ви отримаєте оплату за ці папери, перевірте Google Академія.
Рафаель

Також цей виняток варто відзначити для непрямих дерев , де можна дістати діа. із лише одним dfs обходом.
азам

15

diam(G)tM=I+AMttO(logn)O(M(n)logn)M(n)O(n2.3727logn)

O(n2)


2
Варто зазначити, що цей алгоритм працює лише у невагомому випадку.
GMB

-2

Припущення:
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. Тож у нас буде максимальний діаметр струму.

Аналіз часу роботи:

  1. O (| E |) за допомогою DFS
  2. O (| E |) за допомогою DFS
  3. BFS працює в O (| E |) час.
  4. Ми повинні викликати функцію BFS для кожної вершини, тому сумарно це займе час O (| V || E |).

Загальний час = O (| v || E |) + O (| E |) + O (| E |),
оскільки | V || E | > | Е |
тому у нас є час роботи як O (| v || E |).

BFS
DFS

Примітка. Це не елегантне рішення цієї проблеми.


Ациклічні пов'язані графіки - це дерева, для яких проблема легша (адже діаметр тоді задається найдовшим шляхом). Це було розроблено тут і тут , де наведені більш швидкі алгоритми. (Достатньо одного рекурсивного переходу або, алтернативного, двох BFS.)
Рафаель

1
@Raphael Ні, ациклічні ненаправлені графіки - це дерева. DAG - це DAG.
Девід Річербі

@DavidRicherby Праворуч (Хоча технічно відповідь не говорить, якщо вона виключає спрямовані чи непрямі цикли.;)) У будь-якому випадку, це не що інше, як вирішення APSPP (наївного підходу), що вже висвітлювалося в загальному випадку попередніми відповідями.
Рафаель

@Raphael Ви впевнені, що ациклічні графіки - це дерева? Графік є ациклічним, не означає, що графік завжди буде деревом. Дерево - це лише особливий випадок. Також алгоритм прямого руху вперед і складність у часі - O (| V || E |).
sonus21

Так, я впевнений. (Можливо, ви думаєте про вкорінені дерева, які мають інший аромат.)
Рафаель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.