Come trovare il potenziale della somma dei registri
Consideriamo l'algoritmo BST che per ogni accesso per l'elemento x , riordina solo gli elementi nel percorso di ricerca P di x chiamato percorso precedente, in un albero chiamato albero dopo. Per ogni elemento di una , lasciate s ( un ) e s ' ( un ) siano le dimensioni del sottoalbero con radice in una prima e dopo il riarrangiamento rispettivamente. Così s ( un ) e s ' ( un ) possono variare se e solo se un ∈ P .AxPxas(a)s′(a)as(a)s′(a)a∈P
Inoltre, riorganizza costantemente molti elementi nel percorso di ricerca in qualsiasi momento. Chiamiamo questo tipo di algoritmo "locale". Ad esempio, l'albero di visualizzazione è locale. Riorganizza solo al massimo 3 elementi alla volta di zig, zigzig e zigzag.A
Ora, qualsiasi algoritmo locale che crea "molte" foglie nell'albero secondario, come lo splay tree, ha la seguente bella proprietà.
Possiamo creare una mappatura tale chef:P→P
- Esistono linearmente molti , dove s ′ ( f ( a ) ) ≤ s ( a ) / 2 .a∈Ps′(f(a))≤s(a)/2
- Ci sono costantemente molti , dove s ′ ( f ( a ) )a∈Ps′(f(a)) può essere grande ma banalmente al massimo .n
- Altri elementi , s ′ ( f ( a ) ) ≤ s ( a )a∈Ps′(f(a))≤s(a) .
Possiamo vederlo spiegando il cambiamento del percorso di ricerca. La mappatura è in realtà abbastanza naturale. Questo documento, A Global Geometric View of Splaying , mostra esattamente i dettagli su come vedere l'osservazione sopra.
Dopo aver saputo questo fatto, è molto naturale scegliere il potenziale della somma dei registri. Perché possiamo usare il potenziale cambiamento degli elementi di tipo 1 per pagare l'intero riarrangiamento. Inoltre, per elementi di altro tipo, dobbiamo pagare per il potenziale cambiamento al massimo logaritmico. Quindi, possiamo derivare il costo ammortizzato del logaritmo.
Penso che il motivo per cui la gente pensa che questa sia "magia nera" è che l'analisi precedente non "spiega" il cambiamento complessivo del percorso di ricerca e vede cosa succede realmente in un solo passaggio. Invece, mostrano il cambiamento di potenziale per ogni "trasformazione locale", e quindi mostrano che questi potenziali cambiamenti possono essere magicamente telescopizzati.
PS Il documento mostra anche alcune limitazioni del potenziale di somma dei registri. Cioè, si può dimostrare la soddisfazione del lemma di accesso attraverso il potenziale di somma dei registri solo per l'algoritmo locale.
Interpretazione del potenziale di somma dei registri
C'è un altro modo per definire il potenziale di BST nel documento di Georgakopoulos e McClurkin che è essenzialmente lo stesso del potenziale di somma dei tronchi nel documento di Sleator Tarjan. Ma questo mi dà una buona intuizione.
w(u)uW(u)uu
Ora, invece di definire il rango sui nodi, definiamo il rango ai bordi, che hanno chiamato fattore di progresso .
pf(e)=log(W(u)/W(v)).
E il potenziale dell'albero èS
Φ(S)=∑e∈Spf(e).
(u,v)uvW(u)/W(v)
Osserva che questo è quasi uguale al potenziale di Sleator Tarjan ed è additivo sui percorsi.
modifica: Si scopre che questa definizione alternativa e l'intuizione alla base è stata descritta molto tempo fa da Kurt Mehlhorn. Vedi il suo libro "Strutture di dati e algoritmi" Volume I, Sezione III. 6.1.2 Splay Trees, pagine 263 - 274.