Sto cercando dei modi per mantenere un albero di spanning relativamente bilanciato di un grafico, mentre aggiungo nuovi nodi / spigoli al grafico.
Ho un grafico non orientato che inizia come un singolo nodo, la "radice".
Ad ogni passaggio, aggiungo al grafico un nuovo nodo e un bordo che lo collega al grafico, o solo un nuovo bordo, che collega due vecchi nodi. Mentre coltivo il grafico, mantengo un albero di spanning. Il più delle volte, questo significa che quando aggiungo un nuovo nodo e bordo, imposto il nuovo nodo in modo che sia figlio del vecchio nodo a cui si connette.
Non ho alcun controllo sull'ordine in cui vengono aggiunti i nuovi nodi, quindi l'algoritmo di creazione degli alberi sopra riportato può ovviamente portare a squilibri tra gli alberi.
Qualcuno conosce l'euristica online che manterrà lo spanning tree "relativamente equilibrato", riducendo al minimo la quantità di lavoro svolto nel re-treeing? Ho il pieno controllo della struttura ad albero. Ciò che non controllo è la connettività del grafico o l'ordine in cui vengono aggiunti nuovi nodi.
Nota che le risposte standard di Google a termini come "bilanciato" "spanning" e "albero" sembrano essere alberi binari e alberi B, nessuno dei quali si applica. I miei nodi grafici possono avere un numero qualsiasi di vicini, quindi i nodi dell'albero possono avere un numero qualsiasi di figli, non 2 come alberi binari. Gli alberi B mantengono l'equilibrio cambiando i loro elenchi di adiacenza e non posso cambiare la connettività del grafico.