Un algoritmo esatto è il presente,
Inizio dalle foglie e creare grafici disgiunti (in realtà tutti sono K1), in ogni passaggio trovare il padre di questo foglie, e fonderli in nuovo albero, in ogni passaggio se il nodo x
ha r
bambino conosciuto e il grado di nodo è j
tale che j = r+1
, semplicemente un nodo che non è in nodo figlio x
è madre di nodo corrente in questo caso si dice nodo x
è nice
, altrimenti, ci sono alcuni di questi bambini quella relativa sottostruttura radice di loro non costruita, in questo caso diciamo che il nodo x
è bad
.
Quindi, in ogni fase connettersi nice
nodi al loro genitore correlate, ed è evidente ogni passaggio richiede sum of {degree of parent nice nodes}
anche in ogni passo di avere almeno un bel nodo (causa si inizia da foglia), Quindi l'algoritmo è O (n) , e sarà fatto completamente, ma per trovare il nodo che dovrebbe essere rimosso, infatti in ogni passaggio è richiesto di controllare la dimensione di una lista dijoint (liste di sottostrutture), questo può essere fatto in O (1) nella costruzione, anche se la dimensione della lista è uguale o superiore a n/2, quindi seleziona il nodo bello correlato. (in effetti trova il nodo simpatico nella lista minima che soddisfa questa condizione).
La cosa ovvia è che se è possibile dividere l'albero in modo corretto (ogni parte ha al massimo n/2 nodi) è possibile farlo con questo algoritmo, ma se non lo è (in effetti non puoi dividerlo in due o più parti di dimensioni inferiori a n/2) questo ti dà una buona approssimazione per questo. Inoltre, come puoi vedere, non c'è ipotesi nella struttura di input.
nota: non so è possibile avere un albero tale che è impossibile dividerlo in alcune parti di dimensioni inferiori a n/2 rimuovendo un nodo.
fonte
2011-11-19 12:41:13
Non capisco, se rimuovi 'H' ottieni 9 sottoalberi! – Shahbaz
Sì, mi dispiace per non essere chiaro qui, posso ottenere molti sottoalberi ma non voglio che uno sia più grande della metà del grafico per assicurare che eseguo solo un conteggio logaritmico dei passaggi di divisione. – Listing
Un'altra cosa, come si mette "l'albero dovrebbe essere diviso il più uguale possibile" in un valore computabile? – Shahbaz