Tabel hash dinamis sempurna dan tabel hash cuckoo adalah dua struktur data yang berbeda yang mendukung pencarian O (1) terburuk dan diharapkan O (1) waktu penyisipan dan penghapusan. Keduanya membutuhkan O (n) ruang tambahan dan akses ke keluarga fungsi hash untuk operasi mereka.
Saya pikir kedua struktur data ini indah dan brilian, tetapi saya tidak yakin saya melihat bagaimana dan kapan salah satu dari ini lebih disukai daripada yang lain.
Apakah ada konteks khusus di mana salah satu struktur data ini memiliki keunggulan yang jelas di atas yang lain? Atau mereka sebagian besar dipertukarkan?
data-structures
hash-tables
templatetypedef
sumber
sumber
Jawaban:
Hashing sempurna dinamis dalam arti Dietzfelbinger et al. hanya membutuhkan hashing 2-independen . Sementara ada beberapa hasil pada hashing sederhana untuk tabel hash cuckoo, seperti hashing tabulasi bengkok dan "Keluarga Hash Eksplisit dan Efisien Cukup untuk Cuckoo Hashing dengan Stash", hashing dinamis asli lebih kuat dalam beberapa hal.
sumber
Dalam hashing cuckoo, pencarian dapat dilakukan secara paralel, sedangkan dalam skema hashing dinamis sempurna asli Dietzfelbinger et al., Pencarian membutuhkan dua akses memori berantai, di mana akses kedua menggunakan informasi yang diambil dari yang pertama.
sumber
Relatif mudah untuk meningkatkan efisiensi ruang hashing cuckoo dengan memungkinkan setiap slot menampung lebih dari satu item. Untuk slot ukuran 4, efisiensi ruang adalah sekitar 95%. Dengan kata lain, item dapat dimasukkan hingga 95% dari ruang dalam tabel digunakan untuk menyimpan item, bukan hanya tempat di mana item mungkin pergi.
Di sisi lain, batasan dalam Dietzfelbinger et al. kertas pada hashing dinamis sempurna hanya membuktikan bahwa operasi memasukkan dapat dilanjutkan selama tabel tidak lebih dari 3% penuh.
sumber
Cuckoo hashing menggunakan blok memori pada satu waktu dan perlu membebaskan atau merealokasi memori jarang. Hashing dinamis sempurna dalam arti Dietzfelbinger menggunakan blok memori dan akan menggunakan lebih banyak ruang dalam fragmentasi internal dan eksternal. Ada cara untuk menghindari ini, tetapi mereka menambah kompleksitas pada algoritma.O ( n )O(1) O(n)
sumber