การคำนวณประชากรโดยประมาณของฟิลเตอร์บลูม


12

ให้ฟิลเตอร์บลูมของขนาด N-bits และฟังก์ชันแฮช K ซึ่ง M-bits (โดยที่ M <= N) ของฟิลเตอร์ถูกตั้งค่า

เป็นไปได้หรือไม่ที่จะประมาณจำนวนองค์ประกอบที่แทรกลงในตัวกรองบลูม

ตัวอย่างง่ายๆ

ฉันคร่ำครวญตัวอย่างต่อไปนี้สมมติว่า BF ของ 100 บิตและ 5 ฟังก์ชันแฮชที่ตั้งค่า 10 บิต ...

สถานการณ์กรณีที่ดีที่สุด: สมมติว่าฟังก์ชั่นแฮชสมบูรณ์แบบและแมปบิตที่ไม่ซ้ำกันสำหรับค่า X จำนวนหนึ่งจากนั้นกำหนด 10 บิตเราสามารถพูดได้ว่ามีเพียง 2 องค์ประกอบที่ใส่เข้าไปใน BF

สถานการณ์กรณีที่เลวร้ายที่สุด: สมมติว่าฟังก์ชันแฮชไม่ดีและแมปไปยังบิตเดียวกันอย่างสม่ำเสมอ (แต่ไม่ซ้ำกันในแต่ละอื่น ๆ ) จากนั้นเราสามารถพูดได้ว่า 10 องค์ประกอบถูกแทรกลงใน BF

ช่วงน่าจะเป็น [2,10] ซึ่งอาจอยู่ในช่วงนี้ประมาณโดยความน่าจะเป็นที่เป็นบวกปลอมของตัวกรอง - ฉันติดอยู่ที่จุดนี้


4
ทำไมไม่เก็บจำนวนองค์ประกอบที่ใส่เข้าไป? ใช้เวลาเพียงบิตเพิ่มเติมหากคุณใส่องค์ประกอบn O(logn)n
โจ

@ โจในขณะที่เป็นความคิดที่ดีมันจะทำลายคำถามที่น่าสนใจจริงๆ
dan_waterworth

เพียงสังเกตว่าด้วยการซ้ำซ้อนวิธีการของ Joe จะมีข้อผิดพลาดเล็ก ๆ น้อย ๆ เนื่องจากเราไม่สามารถบอกได้อย่างแน่นอนเสมอเมื่อเพิ่มองค์ประกอบไม่ว่าจะมีอยู่แล้ว (และด้วยเหตุนี้เราควรเพิ่มจำนวนหรือไม่)
usul

คำตอบ:


5

ใช่. จากวิกิพีเดีย :

หากคุณใส่องค์ประกอบลงในตัวกรองขนาดnโดยใช้ฟังก์ชันแฮชkความน่าจะเป็นที่บิตหนึ่งยังคงเป็น 0ink

z=(11n)ki

คุณสามารถวัดความน่าจะเป็นนี้เป็นสัดส่วน 0 บิตในตัวกรองของคุณ การแก้เพื่อให้i

i=ln(z)kln(11n)

ฉันได้ใช้สิ่งนี้ในทางปฏิบัติและตราบใดที่ตัวกรองของคุณไม่เกินความจุของมันข้อผิดพลาดโดยทั่วไปจะน้อยกว่า 0.1% สำหรับตัวกรองถึงบิตนับล้าน เมื่อตัวกรองเกินความจุข้อผิดพลาดของหลักสูตรจะเพิ่มขึ้น


3

kknknbt

P(t balls|b bins)=P(b bins|t balls)P(t)/P(b)
P(t)P(b)t

2

คำถามที่น่าสนใจให้ดูที่กรณีเฉพาะบางอย่าง

knonntotalmP(k,non,ntotal,m)

km<nonP(k,non,ntotal,m)0

non=1kmkm1

P(k,1,ntotal,m)=(1/ntotal)(km1)

non=2km21ntotal(ntotal1)2(2/ntotal)km2

ntotal(ntotal1)(2/ntotal)km

12

P(k,2,ntotal,m)=ntotal(ntotal1)(2/ntotal)km(1/ntotal)(km1)

ฉันคิดว่าเราสามารถพูดคุยเรื่องนี้ได้ทันที

P(k,non,ntotal,m)=(ntotalnon)(non/ntotal)kmi=1i<nonP(k,i,ntotal,m)

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


ฉันคิดว่าสูตรของคุณยกเลิกไปที่ (ไม่สนใจปัจจัยคงที่) คุณสามารถคำนวณสูงสุดของการวิเคราะห์นี้: ขยายปัจจัยแรกของคำที่สองและลบปัจจัยคงที่เพื่อกำจัดทั้งหมดแล้วสูตรของคุณกลายเป็นเรื่องง่ายมาก (ntotalnon)nonkm(ntotalnon1)(non1)kmn choose k
จูลส์

@Jules ยอดเยี่ยมฉันแน่ใจว่าสิ่งที่จะเกิดขึ้น แต่ไม่มีเวลาที่จะคิดออก
dan_waterworth

คุณยังสามารถมาถึงสูตรนั้นได้โดยตรงด้วยวิธีต่อไปนี้:x-1) จากนั้นเสียบสำหรับx) P(non=x)=P(nonx)P(non<x)=P(nonx)P(nonx1)(ntotalx)(x/ntotal)kmP(nonx)
จูลส์

2

สมมติว่ามีการกระจายแฮชอย่างสม่ำเสมอ

ให้เป็นจำนวนของการแทรกแฮช เนื่องจากเรามี hashes เข้าถังขยะถ้าเรามี hashes เข้าถังขยะและกัญชาต่อไปจะเข้าสู่การเป็นหนึ่งในบรรดาจากถังขยะหรือถ้าเรามี hashes เข้าถังและกัญชาถัดไป เป็นหนึ่งในถังขยะอื่น ๆเรามี:iimi1mmni1m1n(m1)

P(m,i)=P(m,i1)(m/n)+P(m1,i1)(n(m1))/n

เขียนใหม่:

P(m,i)=1n(mP(m,i1)+(nm+1)P(m1,i1))

เรายังมีและเมื่อ และเมื่อ0 สิ่งนี้ให้อัลกอริธึมการเขียนโปรแกรมแบบไดนามิกสำหรับการคำนวณ P การคำนวณที่เพิ่มให้คุณได้มากที่สุดโดยประมาณความน่าจะเป็นP(0,0)=1P(m,0)=0m0P(0,i)=0i0O(mi)iP(m,i)

ถ้าเรารู้ว่าเราได้ถกกันเข้าไปในตัวกรองบานนี้ครั้งและเรามี hashes ต่อรายการแล้วจำนวนรายการที่เป็น kiki/k

เพื่อเพิ่มความเร็วคุณสามารถทำบางสิ่งได้ ปัจจัยของสามารถถูกปล่อยออกมาได้เนื่องจากมันไม่ได้เปลี่ยนตำแหน่งสูงสุด คุณสามารถแบ่งปันแบบไดนามิกโปรแกรมตารางที่มีหลายสายการเพื่อลด (asymptotic) เวลาวิ่งไป(นาโนเมตร) หากคุณเต็มใจที่จะเชื่อว่ามีค่าสูงสุดเพียงครั้งเดียวคุณสามารถหยุดการทำซ้ำมากกว่าก่อนและใช้เวลาโดยที่คือจุดที่ใช้เวลาสูงสุดหรือแม้แต่ทำการค้นหาแบบไบนารีและรับn) P(m,i)O(nm)iO(jm)jPO(mบันทึกn)1nP(m,i)O(nm)iO(jm)jPO(mlogn)


2

แนวคิดหลักคือประมาณความคาดหวังของจำนวนศูนย์บิต

สำหรับแต่ละบิตความเป็นไปได้ของการเป็นศูนย์หลังจากแทรกเสื้อกับ K ฟังก์ชันแฮชคือ{N}}(11N)KteKtN

ดังนั้นความคาดหวังของหมายเลขศูนย์บิตควรเป็น:

NeKtNประมาณโดยการสังเกตNM

ในที่สุดเราก็ได้t=NKln(1MN)


1

ความน่าจะเป็นที่บิตหนึ่งคือ 1 หลังจากการแทรก n คือ: P = 1 - (1 - 1 / m) ^ (kn)

ให้ X_i เป็นตัวแปรสุ่มแบบแยกซึ่งเป็น 1 หากบิตที่ตำแหน่ง i'th คือ 1 และ 0 ให้ X = X_1 + X_2 + .... + X_m จากนั้น E [X] = m * P

ถ้าจำนวนบิตที่ตั้งไว้ทั้งหมดคือ S ดังนั้น: E [X] = S ซึ่งแสดงถึง m * P = S ซึ่งสามารถแก้ไขได้สำหรับ n

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