อะไรคือข้อดีของการมีนกกาเหว่าคร่ำเครียดมากกว่าการแฮชที่สมบูรณ์แบบแบบไดนามิก?


12

ตารางแฮชที่สมบูรณ์แบบไดนามิกและตารางแฮชของนกกาเหว่าเป็นโครงสร้างข้อมูลที่แตกต่างกันสองแบบที่รองรับการค้นหา O (1) กรณีที่เลวร้ายที่สุดและ O (1) การแทรกและการลบตามเวลาที่คาดการณ์ไว้ ทั้งสองต้องการพื้นที่เสริม O (n) และการเข้าถึงตระกูลแฮชฟังก์ชันสำหรับการดำเนินการ

ฉันคิดว่าโครงสร้างข้อมูลทั้งสองนี้มีความสวยงามและยอดเยี่ยมในตัวของมันเอง แต่ฉันไม่แน่ใจว่าฉันจะเห็นได้อย่างไรว่าเมื่อใดหนึ่งในโครงสร้างเหล่านี้จะดีกว่ากัน

มีบริบทเฉพาะใดในโครงสร้างข้อมูลใดข้อมูลหนึ่งที่มีข้อได้เปรียบที่ชัดเจนกว่าอีก? หรือพวกเขาส่วนใหญ่ใช้แทนกันได้?


ฉันไม่แน่ใจว่าจะใช้เทคนิคเหล่านี้จริง ๆ หรือไม่ โดยทั่วไปแล้วโครงสร้างข้อมูลประเภทนี้ที่ให้ขอบเขตเชิงซีมโทติคที่ดีที่สุดนั้นเป็นที่สนใจของงานวิจัยเป็นส่วนใหญ่เนื่องจากพวกมันมักจะมีค่าคงที่ขนาดใหญ่ซ่อนอยู่ในหมายเหตุ ในทางปฏิบัติคุณอาจต้องการเทคนิคง่ายกว่าและง่ายกว่าโดยมีค่าคงที่เล็กน้อยจริง ๆ กับหนึ่งที่ซับซ้อนซึ่งมีค่าคงที่ที่ใหญ่มาก O ( บันทึกn ) O ( 1 )OO(logn)O(1)
Tom van der Zanden

@TomvanderZanden มันเป็นเรื่องจริงแน่นอน ฉันยังสนใจในข้อได้เปรียบทางทฤษฎีของวิธีการหนึ่งเหนืออีกวิธี - มีคุณสมบัติทางทฤษฎีที่ดีที่แต่ละวิธีมีให้มากกว่าหรือไม่?
templatetypedef

@templatetypedef ฉันขอแนะนำให้คุณเพิ่มเข้าไปในคำถามนั้น ผู้คนไม่จำเป็นต้องอ่านความคิดเห็นเพื่อทำความเข้าใจคำถามของคุณ - ความคิดเห็นนั้นชั่วคราวและสามารถหายไปได้ตลอดเวลา
DW

ใช่เทคนิคเหล่านี้ใช้จริงในการปฏิบัติมักจะอยู่ในพื้นที่เฉพาะ
นามแฝง

1
ข้อดีอย่างหนึ่งของนกกาเหว่า hashing คือมันง่ายต่อการเข้าใจและนำไปใช้ นอกจากนี้อิมโฮมันง่ายกว่าในการวิเคราะห์มากกว่าการแฮ็กที่สมบูรณ์แบบแบบไดนามิก
A.Schulz

คำตอบ:


3

การแปลงร่างที่สมบูรณ์แบบไดนามิกในแง่ของ Dietzfelbinger และคณะ ต้องการแฮ็ชแบบ 2 อิสระเท่านั้น ในขณะที่มีผลลัพธ์บางอย่างเกี่ยวกับการแฮ็กตารางง่ายๆสำหรับตารางแฮ็คของนกกาเหว่าเช่นการจัดตารางการบิดและ "แฮชครอบครัวที่ชัดเจนและมีประสิทธิภาพเพียงพอสำหรับ Cuckoo Hashing with Stash" ความสมบูรณ์แบบไดนามิกแบบดั้งเดิมนั้นแข็งแกร่งกว่าในบางแง่


ดูความคิดเห็นที่กระจ่างชัดจาก OP: "ฉันยังสนใจในข้อได้เปรียบทางทฤษฎีของวิธีการหนึ่งเหนืออีกวิธีหนึ่ง - มีคุณสมบัติทางทฤษฎีที่ดีที่แต่ละวิธีมีให้มากกว่านี้หรือไม่"
jbapple

3

ใน hashing cuckoo การค้นหาสามารถดำเนินการควบคู่กันในขณะที่โครงการ Dietzfelbinger และคณะของ Dietzfelbinger เป็นต้นแบบดั้งเดิมการค้นหาต้องใช้การเข้าถึงหน่วยความจำสองครั้งซึ่งการเข้าถึงครั้งที่สองจะใช้ข้อมูลที่ดึงจากครั้งแรก


1

มันค่อนข้างง่ายที่จะเพิ่มประสิทธิภาพพื้นที่ของ hashing cuckoo โดยอนุญาตให้แต่ละช่องเก็บมากกว่าหนึ่งรายการ สำหรับช่องขนาด 4 ประสิทธิภาพของพื้นที่นั้นเท่ากับ 95% กล่าวคือสามารถใส่ไอเท็มได้จนถึง 95% ของพื้นที่ในตารางเพื่อใช้เก็บไอเท็มไม่ใช่เฉพาะที่ที่ไอเท็มอาจไป

ในทางกลับกันขอบเขตใน Dietzfelbinger และคณะ กระดาษบน hashing ที่สมบูรณ์แบบแบบไดนามิกเพียงพิสูจน์การแทรกสามารถดำเนินการต่อไปตราบเท่าที่ตารางไม่เกิน 3% เต็ม


คุณอาจต้องการรวมสองคำตอบเข้าด้วยกัน :-)
templatetypedef

0

Cuckoo hashing ใช้บล็อกหน่วยความจำครั้งเดียวและต้องการเพิ่มหรือจัดสรรหน่วยความจำใหม่บ่อยครั้ง การแปลงแป้นพิมพ์สมบูรณ์แบบแบบไดนามิกในแง่ของ Dietzfelbinger ใช้บล็อกหน่วยความจำและจะใช้พื้นที่เพิ่มขึ้นทั้งในและภายใน มีวิธีที่จะหลีกเลี่ยงปัญหานี้ได้ แต่เพิ่มความซับซ้อนให้กับอัลกอริทึมO ( n )O(1)O(n)

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