คุณพลาดวิธีที่โครงสร้างข้อมูลสองข้อจัดการกับการชนกันของแฮช ฟิลเตอร์บลูมไม่ได้เก็บค่าจริงดังนั้นพื้นที่ที่ต้องการคือขนาดคงที่ของอาเรย์ที่กำหนด แต่ถ้าคุณใช้แฮชแบบดั้งเดิมมันจะพยายามเก็บค่าทั้งหมดที่คุณให้มาแทนดังนั้นมันจึงเติบโตตามกาลเวลา
พิจารณาฟังก์ชั่นแฮชที่เรียบง่าย (เพื่อเป็นตัวอย่างเท่านั้น!) f(x) = x % 2(เพื่อประโยชน์ของตัวอย่างเท่านั้น!) 2, 3, 4, 5, 6, 7ตอนนี้คุณป้อนข้อมูลจำนวนเต็มต่อไปนี้:
แฮมาตรฐาน:ค่าที่กำหนดจะได้รับการถกกันและเราจบลงด้วยจำนวนมากของการชนกันเนื่องจากการและf(2) = f(4) = f(6) = 0 f(3) = f(5) = f(7) = 1อย่างไรก็ตามแฮชจะเก็บค่าเหล่านี้ทั้งหมดและจะสามารถบอกคุณ8ได้ว่าไม่ได้เก็บไว้ในนั้น มันทำอย่างไร มันจะติดตามการชนกันและเก็บค่าทั้งหมดด้วยค่าแฮชที่เหมือนกันจากนั้นเมื่อคุณทำการค้นหามันจะเปรียบเทียบการสืบค้นของคุณเพิ่มเติม ลองค้นหาแผนที่สำหรับ8: f(8) = 0ดังนั้นมันจะดูเป็นที่เก็บข้อมูลที่เราแทรกไว้แล้ว2, 4, 6และต้องทำการเปรียบเทียบ 3 ครั้งเพื่อบอกคุณว่า8ไม่ใช่ส่วนหนึ่งของอินพุต
ตัวกรอง Bloom:โดยปกติค่าอินพุตแต่ละค่าจะถูกแฮชกับkฟังก์ชันแฮชที่แตกต่างกัน อีกครั้งเพื่อความง่ายเราจะสมมติว่าเราใช้ฟังก์ชันแฮชเพียงครั้งเดียวfเท่านั้น เราจำเป็นต้องมีอาร์เรย์ของ 2 ค่าแล้วและเมื่อเราพบการป้อนข้อมูล2ก็หมายความว่าเกิดจากการf(2) = 0ที่เราตั้งค่าอาร์เรย์ที่ตำแหน่งค่า0 1เช่นเดียวกับที่เกิดขึ้นและ4 6ในทำนองเดียวกันปัจจัยการผลิต3, 5, 7แต่ละชุดตำแหน่งอาร์เรย์จะคุ้มค่า1 1ตอนนี้เราค้นหาว่า8เป็นส่วนหนึ่งของอินพุตหรือไม่f(8) = 0และอาร์เรย์ที่ตำแหน่ง0นั้น1ดังนั้นตัวกรอง Bloom จะอ้างว่า8เป็นส่วนหนึ่งของอินพุตอย่างไม่ถูกต้อง
g(x) = x % 10ที่จะได้รับบิตสมจริงมากขึ้นให้พิจารณาว่าเราเพิ่มฟังก์ชันแฮชที่สอง กับที่มูลค่าการป้อนข้อมูล2นำไปสู่สองค่าแฮชf(2) = 0และทั้งสองที่สอดคล้องตำแหน่งอาร์เรย์จะถูกตั้งค่าg(2) = 2 แน่นอนอาร์เรย์ตอนนี้ควรมีอย่างน้อยขนาด1 10แต่เมื่อเราสอบถาม8เราจะตรวจสอบอาร์เรย์ที่ตำแหน่ง8เนื่องจากg(8) = 80และตำแหน่งที่จะยังคงอยู่ นั่นเป็นเหตุผลที่ฟังก์ชั่นแฮชเพิ่มเติมช่วยลดผลบวกปลอมที่คุณจะได้รับ
เปรียบเทียบ:ฟิลเตอร์บลูมใช้kฟังก์ชั่นแฮชซึ่งหมายถึงkการเข้าถึงตำแหน่งอาเรย์สูงสุดแบบสุ่ม แต่ตัวเลขนั้นแน่นอน แฮชจะรับประกันเฉพาะเวลาเข้าใช้งานที่คงที่ของคุณ แต่อาจยกเลิกการสร้างขึ้นอยู่กับลักษณะของฟังก์ชันแฮชและข้อมูลอินพุตของคุณ ดังนั้นโดยทั่วไปจะเร็วกว่ายกเว้นกรณีที่ถูกยกเลิก
อย่างไรก็ตามเมื่อคุณมีการชนกันของแฮชแฮชมาตรฐานจะต้องตรวจสอบความเท่าเทียมกันของค่าที่เก็บไว้กับค่าของแบบสอบถาม การตรวจสอบความเท่าเทียมกันนี้อาจมีราคาแพงโดยพลการและจะไม่เกิดขึ้นกับฟิลเตอร์บลูม
ในแง่ของพื้นที่ตัวกรองการเบ่งบานคงที่เนื่องจากไม่จำเป็นต้องใช้หน่วยความจำมากกว่าอาเรย์ที่กำหนด ในทางกลับกันแฮชจะเติบโตแบบไดนามิกและอาจมีขนาดใหญ่ขึ้นเนื่องจากต้องติดตามค่าการชนกัน
การแลกเปลี่ยน:ตอนนี้เมื่อคุณรู้ว่าอะไรถูกและอะไรไม่และภายใต้สถานการณ์ใดคุณควรเห็นการแลกเปลี่ยน บลูมตัวกรองนั้นยอดเยี่ยมหากคุณต้องการตรวจจับอย่างรวดเร็วว่ามีการเห็นค่าก่อนหน้านี้ แต่สามารถมีชีวิตอยู่กับผลบวกที่ผิดพลาด ในทางกลับกันคุณสามารถเลือกแผนที่แฮชได้หากคุณต้องการรับประกันความถูกต้องในราคาที่ไม่สามารถตัดสินรันไทม์ของคุณได้อย่างแน่นอน แต่สามารถยอมรับกรณีที่เสื่อมโทรมเป็นครั้งคราวซึ่งอาจช้ากว่าค่าเฉลี่ยมาก
ในทำนองเดียวกันหากคุณอยู่ในสภาพแวดล้อมหน่วยความจำที่ จำกัด คุณอาจต้องการใช้ฟิลเตอร์บลูมเพื่อรับประกันการใช้หน่วยความจำ