Vorrei che mi desse un suggerimento per provare questo esercizio dal libro di Cormen: "Dimostra che non importa quale nodo iniziamo in un albero di ricerca binaria altezza-h, k chiamate successive a TREE-SUCCESSOR prendi il tempo O (k + h). "Come posso provare questa operazione su alberi di ricerca binari?
5
A
risposta
6
- Sia
x
essere il nodo di partenza ez
essere il nodo termina dopok
chiamate successive ALBERO-successore. - Lasciate
p
essere il percorso semplice trax
ez
incluso. - Lascia che sia l'antenato comune di
x
ez
chep
visite. - La lunghezza di
p
è al massimo2h
, ovveroO(h)
. - Lasciate
output
essere gli elementi che i loro valori sono compresi trax.key
ez.key
inclusi. - La dimensione di
output
èO(k)
. - Nell'esecuzione di
k
chiamate successive nell'albero-successore, i nodi che sonop
sono visitati, e oltre ai nodix
,y
ez
, se un albero secondario di un nodo inp
è visitato poi tutti i suoi elementi sono inoutput
. - Quindi il tempo di esecuzione è
O(h+k)
.
3
Suggerimento: eseguire un piccolo esempio, osservare il risultato, provare a estrapolare il motivo.
Per iniziare, ecco alcune cose da considerare.
Iniziare in corrispondenza di un determinato nodo, k chiamate successive a Tree-Succcesor costituiscono una passeggiata albero parziale. Quanti (almeno e al massimo) nodi visitano questa passeggiata? (Suggerimento: pensa alla chiave (x)). Tieni presente che un margine viene visitato al massimo due volte (perché?).
Suggerimento finale: il risultato è O(2h+k)
.
+1
Un nodo è visitato al massimo trice. –
'Nell'esecuzione di k chiamate successive a TREE-SUCCESSOR, i nodi che sono in p vengono visitati, e oltre ai nodi x, y e z 'Puoi spiegare cosa è' y' qui? –
Ho aggiunto 'y' alla risposta. –