SkipList menyediakan batas untuk pencarian sebagai pohon seimbang dengan keuntungan yang tidak perlu diseimbangkan ulang. Karena SkipList dibuat menggunakan membalik koin acak, batas-batas ini hanya berlaku selama struktur SkipList cukup "seimbang". Secara khusus, dengan probabilitas untuk beberapa konstanta , struktur seimbang mungkin hilang setelah memasukkan elemen.
Katakanlah saya ingin menggunakan daftar lewati sebagai backend penyimpanan dalam aplikasi web yang berpotensi berjalan selamanya. Jadi setelah sejumlah operasi polinomial, struktur yang seimbang dari SkipList sangat mungkin hilang.
Apakah alasan saya benar? Apakah struktur data pencarian / penyimpanan probabilistik memiliki aplikasi praktis dan jika demikian, bagaimana masalah di atas dihindari?
Sunting: Saya menyadari bahwa ada varian deterministik dari SkipList, yang jauh lebih rumit untuk diterapkan dibandingkan dengan SkipList acak (klasik).
Jawaban:
Saya tidak berpikir ada kemungkinan jumlahnya banyak untuk kehilangan 'keseimbangan'. Setelah Anda memasukkan elemen dalam daftar lewati, Anda membangun menara salinan di atasnya dengan membalik koin sampai muncul kepala.
Jadi Anda memiliki lapisan dengan lebih sedikit dan lebih sedikit elemen saat Anda mencapai puncak. Karena sebuah menara memiliki ketinggian dengan probabilitas 2 - k , ada elemen pada ketinggian k dengan probabilitas (ikatan terikat) kurang dari n / 2 k . Karenanya memiliki elemen pada level c log n memiliki kemungkinan kurang dari 1 / n c . Menara tinggi ω ( log n ) memiliki probabilitas subpolinomial. Biarkan M menjadi level maksimum, maka kita milikik 2- k k n / 2k c logn 1 / nc ω ( logn ) M.
Selanjutnya, pada level ada n / 2 elemen k dengan probabilitas sangat tinggi, karena ini adalah jumlah dari n variabel acak independen dan Anda dapat menggunakan ikatan Chernov.k n / 2k n
Karena Anda juga dapat menunjukkan bahwa Anda hanya melakukan sejumlah langkah per level (dengan probabilitas sangat tinggi!), Biaya pencarian bersifat logaritmik.
Jadi, Anda harus benar-benar tidak beruntung untuk berakhir dengan daftar yang tidak seimbang. Perhatikan bahwa 'keberuntungan' di sini tidak tergantung pada data Anda, tidak seperti misalnya di pohon pencarian yang tidak seimbang. Membalik koin dalam Daftar Lewati selalu acak.
Sejauh yang saya tahu, daftar lompatan adalah kepentingan praktis yang besar, karena relatif mudah untuk menerapkannya sebagai struktur pencarian bebas kunci, dengan manfaat yang jelas. Pohon-B di sisi lain agak sulit untuk membuat pemain di bawah akses bersamaan.
sumber
Abaikan daftar memiliki properti lain yang mungkin membuatnya menarik dalam situasi di mana operasi selain hanya menyisipkan / mencari / menghapus digunakan.
Selain itu, daftar lompatan telah menjadi cara populer untuk menerapkan struktur pencarian berbasis perbandingan secara bersamaan. Secara historis, pohon pencarian seimbang tidak berkinerja baik di bawah pertikaian serentak yang tinggi.
sumber