Le strutture di dati di ricerca probabilistica sono utili?


9

Una SkipList fornisce gli stessi limiti per la ricerca di un albero bilanciato con il vantaggio che il riequilibrio non è necessario. Poiché SkipList è costruito usando lanci casuali di monete, questi limiti valgono solo finché la struttura di SkipList è sufficientemente "bilanciata". In particolare, con probabilità per una costante , la struttura bilanciata potrebbe andare persa dopo aver inserito un elemento.1 / n c c > 0O(logn)1/ncc>0

Diciamo che voglio usare un elenco di salto come back-end di archiviazione in un'applicazione Web che potenzialmente funziona per sempre. Quindi, dopo un certo numero polinomiale di operazioni, è molto probabile che la struttura bilanciata di SkipList vada persa.

Il mio ragionamento è corretto? Tali strutture probabilistiche di dati di ricerca / archiviazione hanno applicazioni pratiche e, in caso affermativo, come si evita il problema di cui sopra?

Modifica: sono consapevole che ci sono varianti deterministiche dello SkipList, che sono molto più complicate da implementare rispetto allo SkipList (classico) randomizzato.


1
Quale specifica applicazione hai in mente?
Pratik Deoghare

Risposte:


6

Non penso che ci sia una probabilità polinomiale per perdere "equilibrio". Dopo aver inserito un elemento in un elenco di salto, costruisci una torre di copie sopra di esso lanciando una moneta fino a quando non esce testa.

Quindi hai livelli con sempre meno elementi man mano che raggiungi la cima. Poiché una torre ha altezza con probabilità , esiste un elemento ad altezza con probabilità (limite dell'unione) inferiore a . Quindi avere un elemento a livello ha probabilmente meno di . Le torri di altezza hanno probabilità subpolinomiali. Lascia che sia il livello massimo, quindi abbiamo2 - k k n / 2 k c log n 1 / n c ω ( log n ) Mk2kkn/2kclogn1/ncω(logn)M

E[M]=k1Pr(Mk)log(n)+klog(n)n/2k=log(n)+2.

Inoltre, al livello ci sono elementi con probabilità molto alta, poiché questa è la somma di variabili casuali indipendenti e puoi usare il limite di Chernov.n / 2 k nkn/2kn

Dato che puoi anche dimostrare che esegui solo un numero costante di passaggi per livello (con probabilità molto alta!), I costi di ricerca sono logaritmici.

Quindi dovresti essere davvero molto sfortunato per finire con un elenco sbilanciato. Tieni presente che "fortuna" qui è indipendente dai tuoi dati, a differenza, ad esempio, di alberi di ricerca sbilanciati. I lanci di monete negli elenchi di salto sono sempre casuali.

Per quanto ne so, saltare gli elenchi è di grande interesse pratico, perché è relativamente facile implementarli come strutture di ricerca senza blocco, con ovvi vantaggi. D'altra parte, gli alberi B sono piuttosto difficili da rendere performanti con accessi simultanei.


Anche la profondità attesa degli alberi di ricerca binaria è logaritmica; perché la situazione è migliore qui? (Inoltre, supponi permutazioni casuali, giusto?)
Raffaello

2
Negli alberi di ricerca, la profondità dipende dai dati. Se gli dai numeri casuali, ha una profondità logaritmica con probabilità molto alta. Tuttavia, in pratica, i dati non sono casuali. Le liste di salto non usano i dati come fonte di casualità, quindi questo problema non esiste.
adrianN,

1

Gli elenchi di salto hanno altre proprietà che potrebbero renderli attraenti in situazioni in cui vengono utilizzate operazioni diverse da inserire / cercare / eliminare.

Ad esempio, gli elenchi di salto hanno aggiornamenti locali per l'ora prevista quando è nota la posizione della modifica. Questo è certamente possibile nel tempo peggiore di con determinati alberi di ricerca binaria bilanciata, ma quelle strutture tendono ad essere piuttosto complicate da implementare.O ( 1 )O(1)O(1)

Inoltre, saltare gli elenchi è stato un modo popolare per implementare strutture di ricerca simultanee basate sul confronto. Storicamente, gli alberi di ricerca bilanciati non si sono comportati altrettanto bene in caso di contese elevate.

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.