Estratto di heap binario potenziale funzione max O (1)


10

Ho bisogno di aiuto per capire la potenziale funzione di un heap massimo in modo che l'estrazione massima sia completata nel tempo ammortizzato . Dovrei aggiungere che non ho una buona conoscenza del metodo potenziale.O(1)

So che la funzione di inserimento dovrebbe "pagare" di più al fine di ridurre il costo dell'estrazione, e questo deve essere rispetto all'altezza dell'heap (se fornisce l'altezza dell'heap se il inserire essere 2 log ( n ) o n k = 1 2 log ( k ) )log(n)2log(n)ΣK=1n2log(K)

Risposte:


13

Prova quanto segue:

Il peso di un elemento i nell'heap H è la sua profondità corrispondente albero binario. Quindi l'elemento nella radice ha peso zero, i suoi due figli hanno peso 1 e così via. L'utente definisce come potenziale funzionewioioH

Φ(H)=ΣioH2wio.

Analizziamo ora le operazioni di heap. Per inserire aggiungi un nuovo elemento aggiungi profondità al massimo log ( n ) . Ciò aumenta il potenziale di 2 d e può essere eseguito in O ( 1 ) tempo. Quindi si "bolle" il nuovo elemento heap per assicurare la proprietà heap. Questo richiede tempo O ( log n ) e lascia invariato Φ ( H ) . Pertanto i costi per l'inserimento sono O ( log ( n ) + Δ ( Φ (dlog(n)2dO(1)O(logn)Φ(H) .O(log(n)+Δ(Φ(H)))=O(logn)

Ora considera extractMin . Si elimina la radice e la si sostituisce con l'ultimo elemento nell'heap. Questo riduce il potenziale di , quindi puoi permetterti di riparare la proprietà heap e quindi i costi ammortizzati sono ora O ( 1 ) .2log(n)O(1)

Se hai una domanda generale per la potenziale funzione, dovresti presentarla come una domanda diversa.


Sono sicuro che hai ragione ma non ho capito l'inserimento. Perché invariato? Scusa se la risposta è ovvia, ma potresti espandere Δ ? Non riesco a capire perché tu abbia un numero negativo lìΔ(Φ(H)))Δ
Andrej

Δ(Φ(H))2log(n)

Come funziona la riparazione O (1)? A che serve la potenziale funzione per riparare l'heap? Potresti chiarire, per favore
Sohaib,

@Sohaib: la riparazione richiede O(logn)O(1)

@ A.Schulz Quindi, questo in sostanza significa che dato che l'operazione di estrazione viene eseguita n numero di volte da quando ogni volta la potenziale funzione diminuisce di 2logn (può aumentare o meno allo stesso modo al momento della riparazione). La complessità complessiva per una cosa del genere sarebbe un tempo costante poiché alla fine non ci sarebbe alcun nodo nella struttura. Ho ragione?
Sohaib,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.