Направлена ​​профспілка


11

Розглянемо спрямований графік на якому можна динамічно додавати ребра та робити певні запити.Г

Приклад: ліс-роз'єднаний ліс

Розглянемо наступний набір запитів:

arrow(u, v)
equiv(u, v)
find(u)

перший додає стрілку до графа, другий вирішує, чи , останній знаходить канонічний представник класу еквівалентності , тобто такий, що означає .u v r ( u ) u v r ( v ) = r ( u )уvуvr(у)уvr(v)=r(у)

Існує відомий алгоритм, що використовує структуру даних лісового набору, що реагує на роз'єднання, реалізуючи ці запити в квазіконстантній амортизованій складності, а саме О(α(н)) . Зауважте, що в цьому випадку equivреалізується за допомогою find.

Більш складний варіант

Тепер мене цікавить більш складна проблема, де важливі напрямки:

arrow(u, v)
confl(u, v)
find(u)

Перша додає стрілку , секунди визначає, чи є вузол доступний як і , тобто . Останній повинен повернути об’єкт таким, що означає де повинен бути легко обчислюваний. (Для того, щоб, скажімо, обчислити ). Мета - знайти хорошу структуру даних, щоб ці операції були швидкими.w u v u v r ( u ) u v r ( u ) r ( v ) уvшуvуvr(у)уvr(у)r(v)confl

Цикли

Графік може містити цикли.

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

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

Наївний підхід

Тут не корисна структура лісових даних, що встановлюються на розріз, оскільки вона не враховує напрямок країв. Зауважте, що не може бути одним вузлом, якщо граф не є злитим.r(у)

Можна визначити і визначити як коли . Але як обчислити це поступово?S 1S 2 S 1S 2r(у)={vуv}S1S2S1S2

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

Відповіді:


3

( Редагувати : повністю переписав свою відповідь зараз, коли моє розуміння проблеми стає (сподіваюсь) зрозумілішим.)

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

u v v u u , v u v u w v wr(у) , абстрактно, сукупність усіх вузлів, до яких можна дістатись як і для кожного графіку. (Звичайно, не у всіх парах обов'язково буде вузол, до якого можна дістатися з обох.) На відміну від випадку у об’єднанні-пошуку, цей набір не може бути представлений як графічний вузол представника у графіку, оскільки можуть бути вузли, які доступні з обох і , а також від обох і , які, тим не менш , не досяжна з обох і .уvvуу,vуvушvш

Скажімо, ви підтримуєте для кожного набір вузлів, доступних від (я буду називати це ). Ці набори були б необхідними для створення додаткової структури даних для кожного вузла або, принаймні, набору додаткових "ярликових" ребер на графіку. Якщо ви не дбаєте про збереження зазначеної структури графіка, не потрібно буде розрізняти ці краї та вказані ребра.u R ( u )ууR(у)

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

Кожного разу, коли ви додаєте ребро від до якогось іншого вузла , ви встановлюєте .vуvR(у)=R(у)R(v)

Реалізуйте confl, спробувавши ; якщо це не порожньо, поверніть істину. Але якщо він є порожнім, зробіть два паралельних ширину першого пошуку з і , поки ви не вичерпують обидва безлічі досяжності або знайти вузол загального. Поки ви робите це, також оновіть і (і усіх усіх проміжних вузлів, які ви знайдете), щоб включити доступні вузли, які ви знайшли. і якщо ви знайдете загальний вузол, встановіть R (u) = R (v) = R (u) \ cup R (v) .R ( u ) R ( v ) R ( u ) R ( v ) RR(у)R(v)R(у)R(v)R(у)R(v)R

find(u)просто повертає . Проблема в тому, що не реалізується виключно з точки зору . Я не бачу, як це могло бути, якщо алгоритм не був інкрементним (тобто попередньо обчислив усі набори всіх вузлів з транзитивним закриттям графіка.) Однак, інкрементальний підхід все одно повинен дати вам досить хорошу амортизацію вартістю, хоча я поняття не маю, якщо вона наближається до . (Мабуть, це не так. Неправдива відповідь вимагає, щоб ви запустили два BFS, навіть коли ваші набори насичені; це також здається неминучим, якщо алгоритм не буде нарощений.)R O ( α ( n ) ) RR(у)conflfindRО(α(н))conflR

Це дуже схоже на те, що це може бути особливий випадок методів Ла Путера та Ван Левену для підтримки транзитивного закриття графіка .

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


Дякую за вашу відповідь, я сподіваюся, що я зробив своє питання більш чітким: мені не байдуже підключені компоненти (але сильний CC може бути корисним для остаточного рішення); У мене ще немає і цей не може бути одним вузлом у DAG. r ( u )r(u)r(u)
jmad

Гаразд, це трохи зрозуміліше. Здавалося б, - це, абстрактно, сукупність усіх вузлів, доступних як для і для для кожного графіка. Я думаю, що цей набір може бути набором "ярликових" ребер від , і тоді це починає виглядати як обчислення перехідного закриття доступності в графіку. Я досі не розумію, чому цього не можна робити поступово (стискати контури у міру їх знаходження), хоча це, ймовірно, вимагатиме більше місця зберігання / роботи (мітка / оновлення всіх країв "ярлика"), ніж об'єднання-пошук. Це має сенс? r(у)уv vуу
Кріс Пресі

Якщо припустити, що транзитивне закриття - це справедливий спосіб охарактеризувати , це звучить так, як це було б тісно пов’язано: en.wikipedia.org/wiki/…r(у)
Кріс Прессі

Я не думаю, що confl(u,v)слід зливати і . Це може змінити їх, але це буде зроблено вже за допомогою заклику до , як, наприклад, у лісовому методі, що розмежовується. R(у)R(v)find
jmad

Ви маєте рацію, що це не повинно їх зливати; Я відредагую відповідь. Але дзвінки findдійсно не можуть обчислити нічого корисного, оскільки не існує унікального об'єкта, який слід «знайти», крім , який наближає. (Як би знати, на що звернути увагу, робити оновлення? Дано лише але інформація в потенційно стосується всіх інших вузлів у графіку.)R ( u ) u R ( u )r(у)R(у)findуR(у)
Кріс Прессі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.