Чи існує онлайн-алгоритм для відстеження компонентів у мінливому ненапрямленому графіку?


12

Проблема

У мене є непрямий графік (з декількома краями), який буде змінюватися з часом, вузли та краї можуть бути вставлені та видалені. Про кожну модифікацію графіка я повинен оновлювати підключені компоненти цього графіка.

Властивості

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

Підходи

Наразі у мене є два можливі підходи, але, як ви побачите, вони жахливі:

Повільний стан - менше

Я можу шукати (dfs / bfs) графік, починаючи з модифікованих елементів (елементів) кожного разу. Це економить простір, але повільно, оскільки для кожної модифікації ми маємо O (n + m).

Державний швидкий (-er) (?) Підхід

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

Питання

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

Примітка

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


Якщо я прочитав ваші останні два речення у "Властивості" право, то, здається, вас цікавить лише декрементальна проблема. Якщо так, то обов'язково ознайомтеся з роботою Thorup над декрементальною динамічною підключеністю. (Ви можете знайти цитування за допомогою покажчиків JeffE, які призначені для повністю динамічної версії проблеми.)
Maverick Woo

@Maverick Woo: Завжди можуть бути нові краї / вузли. Я думаю, що остання властивість не дуже сильна саме з цієї причини. Чи все ж це кваліфікується як декрементний?
бітмаска

На жаль, я не знаю, як я пропустив перше речення ... Дивіться "відповідь" нижче.
Maverick Woo

Відповіді:


17

Існує кілька структур даних, які підтримують вставки краю, видалення ребер та запити про з'єднання (чи є ці дві вершини в одному і тому ж підключеному компоненті?) В полілогіармічний час.


Це звучить приголомшливо, як тільки я перегляну папери, я, швидше за все, прийму це.
бітмаска

6

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

[HLT01] Джейкоб Холм, Крістіан де Ліхтенберг та Міккель Торуп. Полі-логарифмічні детерміновані повністю динамічні алгоритми для підключення, мінімального діапазону дерева, 2-краю та двоякості. Журнал ОСББ, 48 (4): 723–760, липень 2001. http://doi.acm.org/10.1145/502090.502095


Jinx. Ти завдячуєш мені коксу.
Jeffε

@JeffE: Я не знав про цю гру . Але, згідно з правилами, я не програв гру (я просто перебуваю в "зірваному" стані), тому я не зобов'язаний вам коксу, якщо я не розмовляю далі ... о, зачекайте мить.
Tsuyoshi Ito

якби ви могли торгувати очками репутації :)
Суреш Венкат

5

(Поки дозвольте мені просто дотримуватися запитів про підключення, яких, на жаль, може бути недостатньо для вашої програми.)

Багато попередніх робіт над проблемою динамічного підключення є в моделі оновлення краю: ви вважаєте, що кількість вершин є фіксованим, і ви можете вставляти та / або видаляти краї під час запитів. Якщо ви можете лише вставити (видалити), це додатково (декремент). Якщо ви можете зробити і те, і інше, це повністю динамічно. Робота Thorup, як вказував JeffE (і я в коментарі), - все для оновлення краю.

AFAIK, теоретичне співтовариство CS лише починає дивитись оновлення вершин для загальних графіків. Чан, Патрашку та Родітті в цьому році провели крайню роботу над FOCS 2008 року. Дивіться це посилання для останньої (вересня 2010 р.) Редакції та посилань.


Чому ви вважаєте, що Holm et. ін. підхід не працює для моєї проблеми? Я збирався його прийняти.
бітмаска

1
Якщо ваш графік має обмежений ступінь, то теоретично ви можете імітувати оновлення вершин, використовуючи купу оновлень краю. В іншому випадку одне оновлення вершин (скажімо, видалення центру зіркового графіка) може кардинально змінити з’єднаність графа, і в цьому випадку вам потрібен результат Чана та ін.
Maverick Woo

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