Знайдіть негативний цикл з вершинними обмеженнями


11

З огляду на графік із зваженими ребрами, як ми можемо знайти негативний цикл, який містить принаймні одну вершину у заданому наборі вершин ? Дякую.{V1,V2,,Vk}


Це питання досить незрозуміле. Ваги на що, краї чи вершини? Що - це V 1 вершина чи набір вершин? {V1,V2,,Vk}V1
Ісін Цао

@YixinCao Спасибі за зауваження, відредаговано: вага по краях, - вершина. V1
Тіані Куй

Відповіді:


8

Якщо вам не потрібно, щоб цикл був простим, тоді розбийте (спрямований) графік на його сильно з'єднані компоненти, і для кожного компонента, що містить одну з заданих вершин , перевірте, чи містить компонент негативний цикл. Якщо жоден компонент не робить, немає жодного негативного циклу, що містить V i . Але якщо якийсь компонент є, ви можете знайти (не простий) негативний цикл, що містить V i , зробивши безліч копій негативного циклу і додавши до цього шляхи до і з якоїсь вершини циклу до V i . (Загальний час на пошук неявного подання потрібного циклу буде таким самим, як час для знаходження негативного циклу у спрямованому графіку, наприклад O (ViViViVi , якщо я згадую.)O(nm)

Якщо потрібно, щоб цикл був простим, то проблема стає NP-повною, навіть якщо задана лише одна вершина . (Ви можете зменшити гамільтонів шлях до проблеми: знайти гамільтонів шлях від даного джерела S до заданої раковини T у заданому графі G , надати існуючим ребрам вагу -1, а потім додати штучну вершину V 1 з двома краями вартість N / 2 - 0,01 кожен, один від V 1 до S і один від T до V 1 ).V1STGV1N/20.01V1STV1

Якщо ви дозволяєте циклу повторювати вершини, але не ребра, я вважаю, що він все ще є NP-повним (аналогічним скороченням, але розбиває кожну вершину на спрямований край ( v , v ' ) стандартним способом).v(v,v)


2
Мені подобається ця відповідь набагато краще, ніж моя.
Девід Еппштейн

6

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

Зробіть копій вершинного набору вашого графіка, де n - кількість вершин у графі. Замініть кожне ребро від u до v у своєму початковому графіку ребрами, які йдуть від копії i від u до копії i + 1 з v , для всіх варіантів i . Крім того, якщо u належить вказаному набору вершин, але не інакше, також додайте ребро, яке переходить від копії i з u до копії 0 з v .nnuviui+1viuiu0v

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


Якщо початковий графік має вершин і m ребер, щойно побудований графік матиме n 2 вершини та n m ребер. На знаходження в ньому негативних циклів знадобиться час O ( n 3 м ) , який здається досить великим. Я все ще чекаю кращого рішення, і велике спасибі! nmn2nmO(n3m)
Тіані Куй

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