Memukul set bilangan bulat untuk pengujian inklusi


10

Saya mencari fungsi hash atas set H (.) Dan relasi R (.,.) Sehingga jika A dimasukkan dalam B maka R (H (A), H (B)). Tentu saja, R (.,.) Harus mudah diverifikasi (waktu konstan), dan H (A) harus dihitung dalam waktu linier.

Salah satu contoh H dan R adalah:

  • H(A)=xA1<<(h(x)modk) , di mana k adalah integer tetap dan h (x) fungsi hash atas integer.
  • R (H (A), H (B)) = ((H (A) & H (B)) == H (A))

Apakah ada contoh bagus lainnya? (Baik sulit untuk didefinisikan tetapi secara intuitif jika R (H (A), H (B)) maka whp A termasuk dalam B).

Sunting nanti :

  1. Saya mencari keluarga fungsi hash. Saya punya banyak set; 3 - 8 elemen di setiap set; 90% dari mereka memiliki 3 atau 4 elemen. Contoh fungsi hash yang saya berikan tidak terdistribusi dengan baik untuk kasus ini.
  2. Jumlah bit H (.) (Dalam contoh saya, k) yang harus kecil (mis. H (.) Harus sesuai dengan bilangan bulat atau panjang).
  3. Satu sifat bagus dari R adalah bahwa jika H (.) Memiliki k bit maka R (.,.) Berlaku untuk (3 ^ k - 2 ^ k) / 4 ^ k pasangan, yaitu. untuk pasangan yang sangat sedikit.
  4. Filter Bloom sangat baik untuk set besar. Saya mencoba menggunakan BF untuk masalah ini, tetapi hasil optimal hanya dengan satu fungsi.

(crosspost dari stackoverflow , saya tidak menerima jawaban yang cukup bagus)


"whp" atas apa? Apakah Anda berasumsi bahwa input Anda berasal dari distribusi tertentu?
Jukka Suomela

Dan apakah Anda benar-benar mencari fungsi hash tunggal, tetap dan bukan keluarga fungsi hash?
Jukka Suomela

@ Jukka: Saya pikir maksudnya jika R (H (A), H (B)), maka dengan probabilitas tinggi kami menyimpulkan bahwa A adalah himpunan bagian dari B. Probabilitas diambil atas pilihan acak A dan B, serta lemparan koin internal H dan R (jika ada).
MS Dousti

Saya mencari keluarga fungsi hash. Set saya cenderung kecil (masing-masing 3 - 8 elemen; 90% di antaranya memiliki 3 atau 4 elemen) sehingga contoh fungsi hash yang saya berikan tidak terdistribusi dengan baik.
Alexandru

Satu sifat bagus dari R adalah bahwa jika H (.) Memiliki n bit maka R (.,.) Berlaku untuk (3 ^ n - 2 ^ n) / 4 ^ n pasangan, yaitu. untuk pasangan yang sangat sedikit.
Alexandru

Jawaban:


10

(Jawaban ini awalnya dalam komentar tapi saya memindahkannya ke jawaban terpisah atas saran Suresh.)

Untuk aplikasi Anda dengan set yang sangat kecil Anda mungkin ingin jumlah fungsi hash Bloom menjadi cukup besar untuk meminimalkan jumlah positif palsu. Untuk menghemat waktu perhitungan saya sarankan variasi berikut dari filter Bloom. Asumsikan Anda memiliki tiga fungsi hash tradisional , , untuk elemen yang masing-masing menghasilkan string -bit. Hash setiap elemen ke bitwise dan dari ketiga fungsi hash ini. Hash elemen yang dihasilkan akan menjadi sekitarkh1h2h3m23=1/8thyang Hash setiap set ke bitwise atau hash dari elemen penyusunnya. Karena set Anda memiliki 3-8 elemen, hash yang dihasilkan akan berada di lingkungan yang setengahnya, yang mungkin merupakan apa yang Anda inginkan agar tingkat false positive tetap rendah.

Perbedaan antara skema di atas adalah filter Bloom tradisional analog dengan perbedaan antara model grafik acak Erdos acak dan grafik reguler acak . Skema di atas memiliki angka efektif dari hash Bloom sedikit berbeda di sekitar rata-rata tetapi cukup besar sehingga perbedaan ini seharusnya tidak menjadi masalah.Gn,pdkm/8m/8


Ini sangat baik untuk m besar (32 atau 64) seperti yang Anda sarankan.
Alexandru

4

Saya akan mencoba menggunakan filter Bloom sebagai hash Anda dengan hubungan yang sama dengan proposal Anda. Menghitung ukuran filter terbaik dan jumlah fungsi hash untuk aplikasi Anda seharusnya tidak terlalu sulit; lihat artikel Bloom Filter Wikipedia untuk inspirasi. Bergantung pada seberapa buruk Anda ingin menghindari kesalahan positif, sesuatu seperti dan mungkin sudah cukup.mkm=64k=4


Untuk aplikasi Anda dengan set sangat kecil Anda mungkin ingin cukup besar. Ini mungkin sangat lambat dengan pendekatan tradisional. Saya malah menyarankan yang berikut ini. k
Warren Schudy

(Kelanjutan dari komentar sebelumnya) Ini pada dasarnya adalah variasi dari filter Bloom. Asumsikan Anda memiliki tiga fungsi hash , , untuk elemen yang menghasilkan string -bit. Hash elemen ke bitwise dan ketiganya. Hash yang dihasilkan akan memiliki sekitar 1/8 1s. Hash satu set ke bitwise atau hash elemen penyusunnya. Karena set Anda memiliki 3-8 elemen, hash yang dihasilkan akan memiliki kemegahan satu-setengah, yang kemungkinan akan membantu menjaga tingkat positif palsu turun. h1h2h3m
Warren Schudy

Keuntungan dari variasi ini hanya karena ia membuat penggunaan paralelisme yang lebih baik dalam operasi kata yang dimiliki kebanyakan komputer.
Warren Schudy

Warren, Anda harus memposting ini sebagai jawaban. Itu pantas beberapa suara
Suresh Venkat

2
@ Warren, @ Suresh: Saya pikir akan lebih masuk akal untuk menggabungkan dua jawaban yang terkait erat ini, dan kemudian menghapus komentar. Akan lebih mudah untuk mengikuti, khususnya karena salah satu jawaban mengacu pada parameter yang ditentukan di yang lain.
Jukka Suomela
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.