Olasılıksal arama veri yapıları yararlı mı?


9

SkipList, dengeli bir ağaç olarak arama için aynı sınırlarını sağlar ve yeniden dengelemenin gerekli olmaması avantajını sunar. SkipList rasgele bozuk para çevirmeleri kullanılarak oluşturulduğundan, bu sınırlar yalnızca SkipList'in yapısı yeterince "dengeli" olduğu sürece geçerlidir. Özellikle, bazı sabiti için olasılığı ile , dengeli eleman bir eleman eklendikten sonra kaybolabilir.O(logn)1/ncc>0

Diyelim ki bir atlama listesini potansiyel olarak sonsuza dek çalışan bir web uygulamasında depolama arka ucu olarak kullanmak istiyorum. Bu nedenle, bazı polinom sayıda işlemden sonra, SkipList'in dengeli yapısının kaybolması muhtemeldir.

Akıl yürütmem doğru mu? Bu olasılıklı arama / depolama veri yapılarının pratik uygulamaları var mı ve eğer öyleyse yukarıdaki sorun nasıl önlenir?

Düzenleme: (Klasik) rastgele SkipList ile karşılaştırıldığında uygulamak çok daha karmaşık SkipList deterministic varyantları olduğunu biliyorum.


1
Aklınızda hangi belirli uygulama var?
Pratik Deoghare

Yanıtlar:


6

'Dengeyi' kaybetmek için polinom olasılığı olduğunu düşünmüyorum. Bir öğeyi atlama listesine ekledikten sonra, üzerine çıkana kadar bozuk para çevirerek üzerine bir kopya kulesi inşa edersiniz.

Böylece zirveye ulaştıkça daha az ve daha az elemanı olan katmanlarınız olur. Bir kule olasılığı olan yüksekliğine sahip olduğundan, yüksekliğinde olasılığı az olan (birleşim yeri bağlı) bir eleman vardır . Bu nedenle düzeyinde bir eleman olan probalitiy az olan . Yükseklik kulelerinin subpolinom olasılığı vardır. Let o zaman var, maksimum seviye olmakk2kkn/2kclogn1/ncω(logn)M

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

Bundan başka, seviye üzerinde vardır , bu toplamı olarak çok yüksek olasılıkla elemanları, , bağımsız rastgele değişken ve Chernov'un bağlı kullanabilir.kn/2kn

Ayrıca seviye başına yalnızca sabit sayıda adım (çok yüksek olasılıkla!) Yaptığınızı gösterebileceğiniz için, arama maliyetleri logaritmiktir.

Bu yüzden dengesiz bir listeyle sonuçlanacak kadar şanssız olmanız gerekir. Burada "şans" ifadesinin, örneğin dengesiz arama ağaçlarındaki gibi verilerinizden bağımsız olduğunu unutmayın. Atla Listelerindeki bozuk paralar her zaman rastgele.

Bildiğim kadarıyla, atlama listelerinin pratikte büyük önemi vardır, çünkü bunları bariz arama yapıları olarak uygulamak, bariz avantajlarla nispeten kolaydır. Öte yandan B-ağaçlarının eşzamanlı erişim altında performans göstermesi oldukça zordur.


İkili arama ağaçlarının beklenen derinliği de logaritmiktir; durum neden burada daha iyi? (Ayrıca, rastgele permütasyonlar varsayıyorsunuz, değil mi?)
Raphael

2
Arama ağaçlarında derinlik verilere bağlıdır. Rastgele sayılarla beslerseniz, çok yüksek olasılıkla logaritmik derinliğe sahiptir. Bununla birlikte, uygulamada, veriler rastgele değildir. Listeleri atla, verileri rastgele bir kaynak olarak kullanmaz, bu nedenle bu sorun yoktur.
adrianN

1

Atlama listeleri, yalnızca ekleme / arama / silme dışındaki işlemlerin kullanıldığı durumlarda onları cazip hale getirebilecek başka özelliklere sahiptir.

Örneğin, atlama listelerinde , değişiklik konumu bilindiğinde beklenen yerel zaman güncellemesi bulunur. Bu, belirli dengeli ikili arama ağaçları ile en kötü durumda kesinlikle mümkündür , ancak bu yapıların uygulanması oldukça karmaşık olma eğilimindedir.O(1)O(1)

Ayrıca, atlama listeleri eşzamanlı karşılaştırma tabanlı arama yapılarını uygulamanın popüler bir yoludur. Tarihsel olarak, dengeli arama ağaçları yüksek eşzamanlı çekişme altında iyi performans göstermemiştir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.