แฮชตัวกรองของ Bloom: มากกว่าหรือใหญ่กว่า?


15

ในการใช้ตัวกรอง Bloom วิธีการดั้งเดิมเรียกใช้ฟังก์ชันแฮชอิสระหลายตัว Kirsch และ Mitzenmacherแสดงให้เห็นว่าคุณต้องการเพียงสองจริง ๆ เท่านั้นและสามารถสร้างส่วนที่เหลือเป็นชุดเชิงเส้นของมัน

คำถามของฉันคืออะไรจริง ๆ แล้วอะไรคือความแตกต่างระหว่างฟังก์ชันแฮชสองอันกับอันที่สองมีเอนโทรปี

สิ่งนี้มาจากการดูสิ่งที่คุณทำกับผลลัพธ์ของฟังก์ชันแฮช: คุณจะใช้ค่าแฮชแบบ 64 บิตและปรับให้เท่าขนาดของเวกเตอร์บิตซึ่งอาจเล็กกว่า 2 อย่างมาก64 . นี่เป็นการเปลี่ยนแปลงที่ทำให้สูญเสียเอนโทรปีอย่างชัดเจน (ยกเว้นในกรณีที่ขนาดแฮชและความจุของตัวกรองของคุณไม่ตรงกัน) สมมติว่าตัวกรองของฉันมีรายการน้อยกว่า 2 32สิ่งที่จะหยุดฉันจากการแยกค่าแฮช 64- บิตของฉันเป็นสองแฮช 32- บิตสองและการรวมกันเชิงเส้นของเหล่านั้น หรือใช้เพื่อหว่าน PRNG

กล่าวอีกนัยหนึ่งฉันต้องทราบข้อมูลจริงเพียงใดเกี่ยวกับองค์ประกอบที่ฉันแทรกลงในตัวกรองแต่ละชุดของ Bloom เพื่อให้แน่ใจว่ามีอัตราบวกเป็นเท็จมาตรฐาน หรือโดยทั่วไปความสัมพันธ์ระหว่างว่าฉันสามารถแยกแยะองค์ประกอบต่าง ๆ ได้ดีเพียงใด (ฉันใช้เพื่ออธิบายองค์ประกอบเหล่านี้กี่บิต) กับตัวกรอง Bloom ของฉันทำงานอย่างไร

ดูเหมือนว่าฉันจะไปได้ด้วยบิตสำหรับขนาดฟิลเตอร์ของmหรือเท่ากับ2 ( lg ( - n ln p ) - 2 lg ( ln 2 ) )บิตเพื่อเก็บองค์ประกอบnด้วยความน่าจะเป็นบวกปลอมหน้า ....2LG(ม.)ม.2(LG(-nLNพี)-2LG(LN2))nพี

คำตอบ:


16

คุณคิดถูกเกี่ยวกับฟังก์ชันแฮชในแง่ของ "บิตสุ่มที่สร้างขึ้น" ดังนั้นถ้าคุณมีฟังก์ชั่นแฮชที่สร้างแฮช 64 บิตคุณสามารถจัดการได้เช่นเดียวกับแฮช 4 16 บิต (โดยแยก) และอื่น ๆ

2LG(ม.)


5
ยินดีต้อนรับสู่ cstheory ไมเคิล :)
Suresh Venkat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.