การแฮชชุดจำนวนเต็มสำหรับการทดสอบแบบรวม


10

ฉันกำลังมองหาฟังก์ชันแฮชมากกว่าชุด H (.) และความสัมพันธ์ R (.,.) เช่นนั้นหากรวมอยู่ใน B ดังนั้น R (H (A), H) (H) แน่นอน R (.,.) ต้องง่ายต่อการตรวจสอบ (เวลาคงที่) และควรคำนวณ H (A) ในเวลาเชิงเส้น

ตัวอย่างหนึ่งของ H และ R คือ:

  • H(A)=xA1<<(h(x)modk)โดยที่ k เป็นจำนวนเต็มคงที่และ h (x) เป็นฟังก์ชันแฮชมากกว่าจำนวนเต็ม
  • R (H (A), H (B)) = ((H (A) & H (B)) == H (A))

มีตัวอย่างที่ดีอื่น ๆ อีกไหม? (ดียากที่จะนิยาม แต่โดยสังหรณ์ใจหาก R (H (A), H (B)) ดังนั้น whp A รวมอยู่ใน B)

แก้ไขภายหลัง :

  1. ฉันกำลังมองหาฟังก์ชั่นแฮช ฉันมีหลายชุด 3 - 8 องค์ประกอบในแต่ละชุด 90% ของพวกเขามีองค์ประกอบ 3 หรือ 4 ฟังก์ชั่นแฮชตัวอย่างที่ฉันให้มาไม่ได้กระจายอย่างดีสำหรับกรณีนี้
  2. จำนวนบิตของ H (.) (ในตัวอย่างของฉัน, k) ซึ่งควรมีขนาดเล็ก (เช่น. H (.) ต้องพอดีในจำนวนเต็มหรือยาว)
  3. หนึ่งคุณสมบัติที่ดีของ R คือถ้า H (.) มี k บิตดังนั้น R (.,.) เป็นจริงสำหรับ (3 ^ k - 2 ^ k) / 4 ^ k คู่คือ สำหรับคู่น้อยมาก
  4. ตัวกรอง Bloom เหมาะอย่างยิ่งสำหรับชุดใหญ่ ฉันลองใช้ BF สำหรับปัญหานี้ แต่ผลลัพธ์ที่ดีที่สุดมาจากฟังก์ชั่นเดียวเท่านั้น

(ทางแยกจากstackoverflowฉันไม่ได้รับคำตอบที่ดีพอ)


"whp" เหนืออะไร คุณคิดว่าปัจจัยการผลิตของคุณมาจากการกระจายบางอย่าง?
Jukka Suomela

และคุณกำลังมองหาฟังก์ชั่นแฮชที่กำหนดตายตัวและไม่ใช่ตระกูลแฮชฟังก์ชันใช่ไหม
Jukka Suomela

@ Jukka: ฉันคิดว่าเขาหมายถึงถ้า R (H (A), H (B)) จากนั้นมีความเป็นไปได้สูงที่เราสรุปได้ว่า A เป็นเซตย่อยของ B ความน่าจะเป็นนั้นมาจากตัวเลือกสุ่มของ A และ B เช่นกัน การโยนเหรียญภายในของ H และ R (ถ้ามี)
MS Dousti

ฉันกำลังมองหาฟังก์ชั่นแฮช ชุดของฉันมีแนวโน้มที่จะเล็ก (3 - 8 องค์ประกอบต่อกัน 90% ของพวกเขามีองค์ประกอบ 3 หรือ 4 ชิ้น) ดังนั้นฟังก์ชันแฮชตัวอย่างที่ฉันให้นั้นไม่ได้รับการกระจายอย่างดี
Alexandru

หนึ่งคุณสมบัติที่ดีของ R คือถ้า H (.) มี n บิตดังนั้น R (.,.) เป็นจริงสำหรับ (3 ^ n - 2 ^ n) / 4 ^ n คู่คือ สำหรับคู่น้อยมาก
Alexandru

คำตอบ:


10

(คำตอบนี้เดิมอยู่ในความคิดเห็น แต่ฉันย้ายไปยังคำตอบแยกต่างหากตามคำแนะนำของ Suresh)

สำหรับการใช้งานของคุณด้วยชุดขนาดเล็กมากคุณอาจต้องการจำนวนบลูมฟังก์ชั่นแฮชจะมีขนาดใหญ่มากทีเดียวที่จะลดจำนวนบวกเท็จ เพื่อประหยัดเวลาในการคำนวณฉันแนะนำให้ใช้ตัวกรอง Bloom ต่อไปนี้ สมมติว่าคุณมีฟังก์ชั่นแฮชแบบดั้งเดิมสามฟังก์ชั่น , ,สำหรับองค์ประกอบที่แต่ละรายการสร้างสตริงบิต แฮชแต่ละองค์ประกอบไปยังระดับบิตและฟังก์ชันแฮชทั้งสามนี้ แฮชขององค์ประกอบที่ได้จะมีค่าประมาณเอช1 ชั่วโมง2 ชั่วโมง3ม. 2 - 3 = 1 / 8 ตันต่อชั่วโมงkh1h2h3m23=1/8thคน แฮชแต่ละชุดเป็นบิตหรือแฮชขององค์ประกอบที่เป็นองค์ประกอบ เนื่องจากชุดของคุณมีองค์ประกอบ 3-8 ชุดแฮชที่เกิดขึ้นจะอยู่ในละแวกที่มีครึ่งหนึ่งซึ่งน่าจะเป็นสิ่งที่คุณต้องการให้อัตราการบวกที่ผิดพลาดดีที่สุด

ความแตกต่างระหว่างโครงการข้างต้นเป็นตัวกรองบลูมแบบดั้งเดิมจะคล้ายคลึงกับความแตกต่างระหว่างคลาสสิกรุ่น Erdos สุ่มกราฟและสุ่มกราฟ -regular โครงการดังกล่าวข้างต้นมีจำนวนที่มีประสิทธิภาพของแฮชบลูมแตกต่างกันเล็กน้อยรอบของค่าเฉลี่ยของแต่ที่มีขนาดใหญ่เพื่อให้สวยแตกต่างนี้ไม่ควรเรื่อง d k m / 8 m / 8Gn,pdkm/8m/8


สิ่งนี้ดีเป็นพิเศษสำหรับ m ขนาดใหญ่ (32 หรือ 64) ตามที่คุณแนะนำ
Alexandru

4

ฉันจะลองใช้ตัวกรอง Bloom เป็นแฮชที่มีความสัมพันธ์เหมือนกับข้อเสนอของคุณ คอมพิวเตอร์ที่ดีที่สุดขนาดกรองและจำนวนของฟังก์ชันแฮชสำหรับงานของคุณไม่ควรจะยากเกินไป ดูบทความBloom Filterของ Wikipedia สำหรับแรงบันดาลใจ ขึ้นอยู่กับว่าคุณต้องการหลีกเลี่ยงการบวกเท็จอย่างรุนแรงเช่นและอาจเพียงพอk m = 64 k = 4mkm=64k=4


สำหรับแอปพลิเคชันของคุณที่มีชุดเล็กมากคุณอาจต้องการค่อนข้างใหญ่ สิ่งนี้อาจค่อนข้างช้าด้วยวิธีการดั้งเดิม ฉันขอแนะนำสิ่งต่อไปนี้แทน k
Warren Schudy

(ความต่อเนื่องของความคิดเห็นก่อนหน้า) นี่เป็นรูปแบบที่แตกต่างกันของตัวกรอง Bloom สมมติว่าคุณมีฟังก์ชันแฮชสามฟังก์ชัน , ,สำหรับองค์ประกอบที่สร้างสตริงบิต hash องค์ประกอบหนึ่งในค่าที่เหมาะสมและสามเหล่านี้ แฮชที่ได้จะมีประมาณ 1 / 8th 1s แฮชชุดเป็นบิตหรือแฮชขององค์ประกอบที่เป็นส่วนประกอบ เนื่องจากชุดของคุณมีองค์ประกอบ 3-8 การแฮชที่เกิดขึ้นจะมีอยู่ในช่วงครึ่งปีแรกซึ่งจะช่วยให้อัตราการบวกที่ผิดพลาดลดลง h 2 h 3 mh1h2h3m
Warren Schudy

ข้อได้เปรียบของการเปลี่ยนแปลงนี้เป็นเพียงการใช้ประโยชน์จากความขนานที่มีอยู่ในการทำงานของคำที่คอมพิวเตอร์ส่วนใหญ่มีให้ดีขึ้น
Warren Schudy

วอร์เรนคุณควรโพสต์สิ่งนี้เป็นคำตอบ มันสมควรได้รับคะแนนเสียงบางส่วน
Suresh Venkat

2
@Warren, @Suresh: ฉันคิดว่ามันสมเหตุสมผลดีกว่าที่จะรวมคำตอบสองคำที่เกี่ยวข้องกันอย่างใกล้ชิดแล้วลบความคิดเห็น มันจะง่ายต่อการติดตามโดยเฉพาะอย่างยิ่งเนื่องจากหนึ่งในคำตอบอ้างอิงถึงพารามิเตอร์ที่กำหนดไว้ในอื่น ๆ
Jukka Suomela
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.