Я шукаю способи підтримувати відносно збалансований діапазон дерева дерева графа, оскільки я додаю до нього нові вузли / краї.
У мене є непрямий графік, який починається як один вузол, "корінь".
На кожному кроці я додаю до графа або новий вузол і край, що з'єднує його з графіком, або просто новий край, з'єднуючи два старі вузли. Під час вирощування графіка я підтримую дерево, що охоплює. Здебільшого це означає, що коли я додаю новий вузол та край, я встановлюю новий вузол як дочірній старий вузол, до якого він підключається.
Я не контролюю порядок додавання нових вузлів, тому вищезазначений алгоритм побудови дерев очевидно може призвести до незбалансованих дерев, що охоплюють.
Хтось знає про евристику в Інтернеті, яка дозволить утримувати дерево, що розлягає, «відносно збалансованим», мінімізуючи при цьому обсяг робіт, проведених у переозелененні? Я маю повний контроль над структурою дерева. Те, що я не контролюю, - це підключення графіків або порядок додавання нових вузлів.
Зауважте, що стандартні відповіді Google на такі терміни, як "збалансований", "розтягується" та "дерево", схоже, є двійковими деревами та B-деревами, жодне з яких не застосовується. У моїх графічних вузлах може бути будь-яка кількість сусідів, тож у вузлах дерев може бути будь-яка кількість дітей, а не 2, як двійкові дерева. B-дерева підтримують рівновагу, змінюючи свої списки суміжності, і я не можу змінити підключення графіків.