Je cherche des moyens de maintenir un arbre couvrant relativement équilibré d'un graphique, alors que j'ajoute de nouveaux nœuds / arêtes au graphique.
J'ai un graphique non orienté qui commence comme un seul nœud, la "racine".
À chaque étape, j'ajoute au graphique soit un nouveau nœud et un bord le connectant au graphique, soit juste un nouveau bord, connectant deux anciens nœuds. Au fur et à mesure que je développe le graphique, je maintiens un arbre couvrant. La plupart du temps, cela signifie que lorsque j'ajoute un nouveau nœud et un nouveau bord, je définis le nouveau nœud comme l'enfant de l'ancien nœud auquel il se connecte.
Je n'ai aucun contrôle sur l'ordre dans lequel les nouveaux nœuds sont ajoutés, donc l'algorithme de construction d'arbre ci-dessus peut évidemment conduire à des arbres s'étendant sur un déséquilibre.
Quelqu'un connaît-il l'heuristique en ligne qui gardera l'arbre couvrant "relativement équilibré", tout en minimisant la quantité de travail effectuée dans la ré-arborescence? J'ai un contrôle total sur la structure arborescente. Ce que je ne contrôle pas, c'est la connectivité du graphique ou l'ordre dans lequel de nouveaux nœuds sont ajoutés.
Notez que les réponses standard de Google à des termes tels que "équilibré" "couvrant" et "arbre" semblent être des arbres binaires et des arbres B, ni l'un ni l'autre. Mes nœuds de graphe peuvent avoir n'importe quel nombre de voisins, donc les nœuds d'arbre peuvent avoir n'importe quel nombre d'enfants, pas 2 comme les arbres binaires. Les arbres B maintiennent l'équilibre en modifiant leurs listes d'adjacence, et je ne peux pas changer la connectivité du graphique.