Підграф, що містить усі вузли та ребра, що є частиною простих обмежених по довжині стежків у непрямому графіку


12

Досить подібний до мого раніше розміщеного питання . Цього разу графік непрямий.

Дано

  • Неорієнтовний граф G без яких - або множинних ребер або петель,
  • Джерело вершини s ,
  • Цільова вершина t ,
  • Максимальна довжина шляху l ,

Я шукаю G - підграф G який містить будь-яку вершину та будь-який край у G (і лише ті), які є частиною принаймні одного простого шляху від s до t довжиною l .

Примітки:

  • Мені не потрібно перераховувати шляхи.
  • Я шукаю ефективний алгоритм (і час, і пам'ять), оскільки мені потрібно виконати його над дуже великими графіками (10 ^ 8 вершин, 10 ^ 9 ребер).

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

Відповіді:


6

Що ж, проблема в зрештою. Я збережу попередню відповідь, оскільки вона також працює для спрямованого випадку (який є NPC, як відповіли на інше питання), і покажу, що це F P T щодо l .PFPTl

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

Наступна процедура визначає, чи має бути деяке ребро частиною вихідного графіка. Для того, щоб відповісти на початкову проблему, просто переведіть петлю на всі краї.e=(u,v)E

Щоб створити потокову мережу, виконайте наступне:

Крок 1: Розгорніть щоб мати вершину x e, і замініть e ребрами ( u , x e ) , ( x e , u ) , ( v , x e ) , ( x e , v ) (вони спрямовані як a частина потокової мережі), встановіть їх вартість 0.exee(u,xe),(xe,u),(v,xe),(xe,v)

txett+(t,t+)

{a,b}E(a+,b),(b+,a)

ye(s,ye),(t,ye)

Крок 5: встановіть усі ємності на 1.

xeye


Аналіз:

  • xeyexesyexetye
  • Шляхи роз'єднані, оскільки для кожної вершини в дузі є лише 1 ємність .t(t,t+)
  • Повернуті шляхи - це два шляхи, сума відстаней яких мінімальна, і це також вартість знайденого потоку. Це дозволяє нам додати до вихідного графіка або видалити інакше.e

1
Простіше зрозуміти аргумент у наведеній вище відповіді, відкинувши скорочення до спрямованого потоку. Існує простий шлях від до що містить вузол iff, є шлях від до та шлях від до таким, що і є вузловими роз'єднаними, за винятком . Це вирішально використовує непряму. Це можна перевірити за допомогою потоку, а версію витрат також можна виконати за допомогою потоку мінімальних витрат. Можна перевірити, чи існує простий шлях від до що міститьstvPvsQvtPQvsteшляхом введення вузла в середині . e
Чандра Чекурі

@ChandraChekuri - це правильно, але майте на увазі, що якщо проблема не обмежує довжину, існує набагато простіший алгоритм її вирішення - дивіться тут
RB

Звичайно, я знаю і про це рішення - концептуально добре розуміти з'єднані компоненти за допомогою роз'єднаних контурів, хоча можна знайти зрізані вершини та з'єднані компоненти безпосередньо через DFS.
Чандра Чекурі

@RB: Дякую Пропонована алгоріхма може бути ефективною, коли l порівняно велика, але, ймовірно, неоптимальна для відносно малих значень l. Я думаю, я можу спершу обрізати G, видаливши будь-яку вершину, що знаходиться нижче підлоги (l / 2), від s та ceil (l / 2) від t.
Ліор Коган

1
Спробуйте адаптувати послідовний алгоритм найкоротшого шляху (також його називають алгоритмом Surballe для випадку 2 шляхів, який тут цікавий). Ви хочете знайти найкоротші 2-х шляхи від (краще називати його а не оскільки це однаково для всіх ребер) до кожного . Я думаю, що це можна зробити ефективно, спочатку обчисливши найкоротше дерево шляху від а потім трохи уважно здійснивши обчислення другого шляху. yyyexey
Чандра Чекурі

1

Ось хибна відповідь: вона виводить деякі вершини, які є частиною непростих шляхів від до і не є частиною простого шляху від до довжиною . Відповідь все ж може бути актуальною для заявки запитувача, тому я залишаю її тут.stst

Ось алгоритм, який працює в часі (і насправді швидше, ніж це, коли невеликий).O(|V|+|E|)

Алгоритм виконує пошук BFS з який закінчується на глибині . Цей BFS дає набір всіх вершин, доступних від довжиною шляху не більше , а також обчислює відстані для кожного . Тоді я би зробив те ж саме з і отримав задані та відстані від . Нарешті, вершини, які ви шукаєте, є саме . Ребра - це саме ті ребра в (sVssdist(s,v)vVstVttVsolution={v:vVsVt,dist(s,v)+dist(t,v)}E[Vsolution]=(v,u)E:u,vVsolution).

Час роботи цього алгоритму, безумовно, оскільки він просто робить два BFS. Але час роботи насправді який буде набагато меншим за розмір графіка, коли -radius сусідства і - малі.O(|V|+|E|)O(|Vs|+|Vt|+|E[Vs]|+|E[Vt]|)st

Редагувати: напевно, на практиці існує дещо швидший алгоритм, який робить BFS лише з та глибини а не . Це виявляє всі шляхи, і тоді за допомогою трохи бухгалтерії ви зможете знайти всі вершини. Це скорочує час роботи квадратним коренем для випадку великого випадкового вигляду графіка, коли невеликий.st/2


3
Це не змушує шлях бути простим. Розглянемо простий графік шляху і . Ви повернетесь як частина результату, хоча немає простого шляху, який проходить через ...tusvxl=4vv
RB

Дякуємо за виправлення @RB. Я відредагував свою відповідь, щоб зазначити, що це неправильно.
mobius dumpling

1

Це задумано як коментар, але надто довго, щоб розмістити коментар.

Можливо, вас також зацікавлять графічні ключі або емулятори для ваших цілей. Гайковий ключ з графа є підграф з невеликим кількістю ребер, але приблизно зберігся відстань. Емулятор - це графік , ребра яких дозволено зважувати.G=(V,E)H=(V,E)H=(V,E,w)

Найкращим результатом для гаечних ключів є ребер та додаткова помилка +6 за оцінкою відстані в графіку. Найкращим результатом для емуляторів є ребер та добавна помилка +4. Невідомо і для того, чи можемо ми перемогти , навіть якщо помилка дозволена бути полілогіармічною.O(n4/3)O(n4/3)O(n4/3)

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

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