підтримання збалансованого діапазону дерева зростаючого непрямого графа


19

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

У мене є непрямий графік, який починається як один вузол, "корінь".

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

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

Хтось знає про евристику в Інтернеті, яка дозволить утримувати дерево, що розлягає, «відносно збалансованим», мінімізуючи при цьому обсяг робіт, проведених у переозелененні? Я маю повний контроль над структурою дерева. Те, що я не контролюю, - це підключення графіків або порядок додавання нових вузлів.

Зауважте, що стандартні відповіді Google на такі терміни, як "збалансований", "розтягується" та "дерево", схоже, є двійковими деревами та B-деревами, жодне з яких не застосовується. У моїх графічних вузлах може бути будь-яка кількість сусідів, тож у вузлах дерев може бути будь-яка кількість дітей, а не 2, як двійкові дерева. B-дерева підтримують рівновагу, змінюючи свої списки суміжності, і я не можу змінити підключення графіків.


3
Можливо, це допоможе, якби ви були більш конкретними щодо того, яким буде ваше ідеальне збалансоване простягнуте дерево статичного графіка. Чи автоматично BFS-дерево є хорошим вибором як збалансоване дерево (воно є максимально дрібним, якщо ви виберете правильний корінь, або з коефіцієнтом два, незалежно від кореня)? Чи потрібно, щоб кількість вузлів у кожному піддереві була меншою на постійний коефіцієнт, ніж кількість вузлів у батьків, скрізь у дереві, і якщо так, що ви робите для графіків, у яких таких дерев немає?
Девід Еппштейн

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

Ви оглядали верхні дерева? en.wikipedia.org/wiki/Top_tree
Peer Sommerlund

Відповіді:


4

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


2

Я в кінцевому рахунку робив наступне:

Відповідь Вінісія Сантоса - це перша частина його. Як він каже, у будь-який кадр я або додаю новий вузол та край батьків-дочір, що підключаються до нього, або просто додаю поперечний край між двома існуючими вузлами. Краї батьків-дочірок не надають можливостей для зміни структури дерева, це роблять лише поперечні краї. Розглянемо додавання поперечного E між вузлами A і B, де B має більшу глибину дерева. Якщо (A.depth + 1) <B.depth, то ми можемо зменшити B.depth, зробивши його дитиною А.

Зменшивши глибину B, тепер ми повинні перевірити сусідів В., щоб побачити, чи можуть вони зменшити глибину, ставши дітьми В. Тому ми виконуємо першу широту обходу від B, яка проходить через край від X до Y, якщо X. глибина + 1 <Y.depth і встановлює Y дитиною X.

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