Чи існує алгоритм, щоб ефективно підтримувати інформацію про зв’язок для DAG за наявності вставок / видалень?


17

Враховуючи спрямований ациклічний графік , чи можна ефективно підтримувати наступні операції?G(V,E)

  • : Визначає, чи є шлях у G від вузла a до вузла bisConnected(G,a,b)Gab
  • : додає ребро від a до b у графі Glink(G,a,b)abG
  • : Видаляє край від a до b в Gunlink(G,a,b)abG
  • : додає вершину до Gadd(G,a)
  • : видаляє вершину з Gremove(G,a)

Кілька приміток:

  • Якщо ми заборонили , здається, було б легко підтримувати інформацію про з'єднання, використовуючи структуру даних типу нерозділеного набору.unlink
  • Очевидно, що можна було б реалізувати, використовуючи пошук по глибині або вперше в широту, використовуючи наївне покажчикове представлення графіка. Але це неефективно.isConnected

Я сподіваюся на амортизований постійний або логарифмічний час для всіх трьох операцій. Чи можливо це?



1
Чи можете ви пояснити, як вирішити більш простий випадок (без відключення) за допомогою структури даних типу нерозривного набору?
jbapple

@Tsuyoshi - посилання на це питання виглядають цікавими, я зараз їх розглядаю.
Джастін Кілпатрік

(1) Ви шукаєте алгоритм динамічного графіку для спрямованої доступності з обмеженням, що графік є DAG. Якщо я не помиляюся, динамічно спрямована досяжність набагато важче, ніж непрямий аналог, але тут властивість DAG може допомогти. (2) Чи removeвидаляє також падаючі краї? Якщо так, то вимагати, щоб ця операція була O (log n) часу, може бути занадто багато, щоб сподіватися….
Цуйосі Іто,

Відповіді:


19

Описана вами проблема - це повністю динамічна доступність DAG (також її називають повністю динамічним транзитивним закриттям DAG). Це називається повністю динамічним, оскільки люди також вивчають версії, де можливі лише видалення (тоді це називається декрементованою доступністю), і де можливі лише вставки (називаються додатковою досяжністю).

Між часом оновлення та часом запиту є кілька компромісів. Нехай - кількість ребер і n - кількість вершин. Для DAG, Demetrescu та Italiano (FOCS'00) дали рандомізовану структуру даних, яка підтримує оновлення (крайові вставки або делети) за час O ( n 1.58 ) та запити про доступність за час O ( n 0,58 ) (також підтримуються вставки / делети вузла) , в O (1) час); цей результат був розширений Санковським (FOCS'04) для роботи для загальнонаправлених графіків. Також для DAG, Roditty (SODA'03) показав, що ви можете підтримувати матрицю перехідного замикання за загальний час O ( m n + I · n 2 + D ), деmnn1.58n0.58mn+I·n2+D - кількість вставок, D - кількість видалень і, звичайно, час запиту - O ( 1 ).ID1

Для загальнонаправлених графіків відомі такі (оновлення, запит) часи: (O ( ), O (1)) (Demetrescu та Italiano FOCS'00 (амортизовано), Sankowski FOCS'04 (найгірший випадок)), ( O ( m n2 ),O(mn )) (Roditty, Zwick FOCS'02), (O (m+nlogn), O (n)) (Roditty, Zwick STOC'04), (O (n 1.58 ), O (n 0.58 )) і (O (n 1.495 ), O (n 1.495 )) від Sankowski (FOCS'04).O(nm+nlognnn1.58n0.58n1.495n1.495

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


1
Спасибі за вашу відповідь. Хоча мушу сказати, що я розчарований, наскільки ці межі погані. :(
Джастін Кілпатрік

1
Питання, пов’язане з цим: чи не могли б ви вказати мені на будь-які посилання на простіші проблеми, інкрементальну доступність та декрементальну доступність для DAG?
Джастін Кілпатрік

Це не набагато краще, ніж наївний підхід dfs (O(1),O(n^2))або (O(m),O(n+m)).
Томас Ейл

4

Я думаю, що найкращі результати до цих пір обговорюються у "Витримці динамічних матриць для повністю динамічного перехідного закриття" . У цій статті розглядається рандомізований алгоритм з часом запиту та часом оновлення O ( n 1,58 ) .O(n0.58)O(n1.58)

(Це стосується лише першої версії вашого запитання, з linkі unlinkбез addі remove.)


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