Poszukuję sposobów na utrzymanie względnie zrównoważonego drzewa opinającego wykresu, gdy dodam do niego nowe węzły / krawędzie.
Mam nieukierunkowany wykres, który zaczyna się jako pojedynczy węzeł, „root”.
Na każdym kroku dodaję do wykresu albo nowy węzeł i krawędź łączącą go z wykresem, albo tylko nową krawędź łączącą dwa stare węzły. Gdy rozwijam wykres, utrzymuję drzewo rozpinające. W większości przypadków oznacza to, że kiedy dodam nowy węzeł i krawędź, ustawiam nowy węzeł jako potomek starego węzła, z którym się łączy.
Nie mam kontroli nad kolejnością dodawania nowych węzłów, więc powyższy algorytm budowania drzew może oczywiście prowadzić do niezrównoważonego łączenia drzew.
Czy ktoś wie o heurystyce online, która utrzyma drzewo opinające „względnie zrównoważone”, jednocześnie minimalizując ilość pracy wykonanej przy ponownym drzewkowaniu? Mam pełną kontrolę nad strukturą drzewa. Nie kontroluję połączeń grafowych ani kolejności dodawania nowych węzłów.
Zauważ, że standardowe odpowiedzi Google na terminy takie jak „zrównoważony”, „rozpinanie” i „drzewo” wydają się być drzewami binarnymi i drzewami B, z których żadne nie ma zastosowania. Moje węzły grafowe mogą mieć dowolną liczbę sąsiadów, więc węzły drzewne mogą mieć dowolną liczbę potomków, a nie 2 jak drzewa binarne. B-drzewa utrzymują równowagę, zmieniając swoje listy przylegania i nie mogę zmienić łączności wykresu.