ความหมายของการแฮชแบบเปิดและการแฮชแบบปิด


98

เปิดการแฮช (การเชื่อมโยงแยก):

ในการแฮชแบบเปิดคีย์จะถูกเก็บไว้ในรายการที่เชื่อมโยงซึ่งแนบกับเซลล์ของตารางแฮช

การแฮชแบบปิด (เปิดที่อยู่):

ในการแฮชแบบปิดคีย์ทั้งหมดจะถูกเก็บไว้ในตารางแฮชโดยไม่ต้องใช้รายการที่เชื่อมโยง

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


จริงๆแล้วเราไม่เคยเก็บคีย์ไว้ในตารางแฮชเราใช้ทูเพิล (คีย์ค่า) และใช้คีย์เพื่อคำนวณว่าควรจัดเก็บค่าใด จริงๆแล้วเราเก็บค่าไว้ใน Hash Table
Mr. Suryaa Jha

คำตอบ:


120

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

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

"ปิด" ใน "แฮชแบบปิด" หมายถึงการที่เราไม่เคยออกจากตารางแฮช ทุกออบเจ็กต์จะถูกจัดเก็บโดยตรงที่ดัชนีในอาร์เรย์ภายในของตารางแฮช โปรดทราบว่าสิ่งนี้ทำได้โดยใช้กลยุทธ์การกำหนดแอดเดรสแบบเปิดบางประเภทเท่านั้น ซึ่งจะอธิบายว่าเหตุใด "การแฮชแบบปิด" และ "ที่อยู่แบบเปิด" จึงเป็นคำพ้องความหมาย

ตรงกันข้ามกับการแฮชแบบเปิด - ในกลยุทธ์นี้ไม่มีวัตถุใดถูกเก็บไว้ในอาร์เรย์ของตารางแฮช แทนที่จะแฮชอ็อบเจ็กต์แทนจะถูกเก็บไว้ในรายการซึ่งแยกจากอาร์เรย์ภายในของตารางแฮช "เปิด" หมายถึงอิสระที่เราได้รับจากการออกจากตารางแฮชและใช้รายการแยกต่างหาก อย่างไรก็ตาม "รายการแยก" จะบอกเป็นนัยว่าเหตุใดการแฮชแบบเปิดจึงเรียกอีกอย่างหนึ่งว่า "การเชื่อมโยงแยก"

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


17
เราควรเพิ่มว่า Open Hashing (Separate Chaining) ไม่ จำกัด เฉพาะรายการที่เชื่อมโยงซึ่งไม่เป็นมิตรกับแคชและลดการโจมตีจากการชนกันของพฤติกรรม O (n / 2) คุณยังสามารถใช้ต้นไม้หรืออาร์เรย์ที่เรียงลำดับสำหรับถังที่เรียงกันได้
rurban

ลดคะแนนเนื่องจากข้อมูลที่ขัดแย้งกัน: คุณพูดว่า "เปิด" และ "ปิดเป็นคำพ้องความหมายจากนั้นในตอนท้าย:" สิ่งที่ตรงกันข้ามกับ "ปิด" คือ "เปิด"
Marwen Trabelsi

1
@MarwenTrabelsi ฉันไม่เคยพูดว่า "ปิด" และ "เปิด" เป็นคำพ้องความหมาย
Ken Wayne VanderLinde

"สิ่งนี้อธิบายได้ว่าเหตุใด" การแฮชแบบปิด "และ" ที่อยู่แบบเปิด "จึงเป็นคำพ้องความหมาย"
Marwen Trabelsi

1
ใครสามารถให้แหล่งที่มาเพื่อพิสูจน์ว่านี่เป็นนิรุกติศาสตร์ทางประวัติศาสตร์ที่ถูกต้องได้หรือไม่?
Santropedro

3

คุณมีอาร์เรย์ที่เป็น "ตารางแฮช"

ในการแฮชแบบเปิดแต่ละเซลล์ในอาร์เรย์จะชี้ไปที่รายการที่มีการชนกัน การแฮชได้สร้างดัชนีเดียวกันสำหรับรายการทั้งหมดในรายการที่เชื่อมโยง

ในการแฮชแบบปิดคุณใช้อาร์เรย์เดียวสำหรับทุกสิ่ง คุณจัดเก็บการชนกันในอาร์เรย์เดียวกัน เคล็ดลับคือใช้วิธีที่ชาญฉลาดในการกระโดดจากการชนกันไปยังหน่วยการชนกันที่คุณพบสิ่งที่คุณต้องการ และทำสิ่งนี้ด้วยวิธีที่ทำซ้ำได้ / กำหนดได้


2

การกำหนดแอดเดรสเปิดชื่อหมายถึงความจริงที่ว่าตำแหน่ง ("ที่อยู่") ขององค์ประกอบไม่ได้ถูกกำหนดโดยค่าแฮช (วิธีนี้เรียกอีกอย่างว่าการแฮชแบบปิด)

ในการเชื่อมโยงที่แยกจากกันแต่ละที่เก็บข้อมูลเป็นอิสระและมี ADT (รายการต้นไม้ค้นหาแบบไบนารี ฯลฯ ) บางรายการที่มีดัชนีเดียวกัน ในตารางแฮชที่ดีแต่ละที่เก็บข้อมูลมีศูนย์หรือหนึ่งรายการเนื่องจากเราต้องการการดำเนินการของคำสั่ง O (1) สำหรับการแทรกการค้นหา ฯลฯ

นี่คือตัวอย่างของการผูกโซ่แยกต่างหากโดยใช้ C ++ พร้อมฟังก์ชันแฮชแบบง่ายโดยใช้ตัวดำเนินการ mod (ชัดเจนว่าฟังก์ชันแฮชไม่ถูกต้อง)

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