คำตอบนี้สรุปบางส่วนของTAoCPเล่มที่ 3, Ch 6.4
สมมติเรามีชุดของค่า ,ซึ่งเราต้องการที่จะเก็บไว้ในอาร์เรย์ขนาดเมตรเราใช้ฟังก์ชันแฮช ; โดยทั่วไปแล้ว. เราเรียกปัจจัยกดดันของ ที่นี่เราจะถือว่าเป็นธรรมชาติ ; ในสถานการณ์จริงเรามีแม้ว่าและต้อง map ลงไปที่ตัวเองn เมตรต่อชั่วโมง: V → [ 0 .. M ) M « | V | α = nVnAmh:V→[0..M)M≪|V|เมตร=Mเมตร«Mเมตรα=nmAm=Mm≪Mm
การสังเกตครั้งแรกคือแม้ว่ามีลักษณะเหมือนกัน¹ความน่าจะเป็นของค่าสองค่าที่มีค่าแฮชเดียวกันสูง นี้เป็นหลักเช่นที่น่าอับอายขัดแย้งวันเกิด ดังนั้นโดยทั่วไปเราจะต้องจัดการกับความขัดแย้งและสามารถละทิ้งความหวังของเวลาเข้าถึงกรณีที่เลวร้ายที่สุดO ( 1 )hO(1)
แล้วค่าเฉลี่ยเป็นอย่างไร ให้เราสมมติว่าทุกคีย์จากเกิดขึ้นด้วยความน่าจะเป็นเดียวกัน จำนวนรายการที่ตรวจสอบโดยเฉลี่ย (การค้นหาที่ประสบความสำเร็จ) (การค้นหาไม่สำเร็จ) ขึ้นอยู่กับวิธีการแก้ไขข้อขัดแย้งที่ใช้C S n C U n[0..M)CSnCUn
ผูกมัด
ทุกรายการอาร์เรย์มี (ตัวชี้ไปที่หัว) รายการเชื่อมโยง นี่เป็นความคิดที่ดีเพราะความยาวของรายการที่คาดหวังมีขนาดเล็ก ( ) แม้ว่าความน่าจะเป็นที่จะเกิดการชนนั้นสูง ในท้ายที่สุดเราจะได้
สิ่งนี้สามารถปรับปรุงได้เล็กน้อยโดยการจัดเก็บรายการ (บางส่วนหรือทั้งหมด) ภายในตารางnm
CSn≈1+α2 and CUn≈1+α22.
การวัดเชิงเส้น
เมื่อแทรก (resp. ค้นหาค่า)ให้ตรวจสอบตำแหน่ง
ตามลำดับนี้จนกระทั่งตำแหน่งว่าง (resp. ) พบ ข้อดีคือเราทำงานในพื้นที่และไม่มีโครงสร้างข้อมูลรอง อย่างไรก็ตามจำนวนเฉลี่ยของการเข้าถึง diverges สำหรับ :
อย่างไรก็ตามสำหรับประสิทธิภาพเทียบได้กับการผูกมัด²v
h(v),h(v)−1,…,0,m−1,…,h(v)+1
vα→1CSn≈12(1+11−α) and CUn≈12(1+(11−α)2).
α<0.75
การแฮ็ชสองครั้ง
คล้ายกับเส้นตรงแหย่ แต่ขนาดขั้นตอนการค้นหาจะถูกควบคุมโดยฟังก์ชันแฮชที่สองที่เป็น coprime เพื่อMไม่ได้รับการสืบทอดอย่างเป็นทางการ แต่การสังเกตเชิงประจักษ์แนะนำให้
วิธีนี้ได้รับการดัดแปลงโดย Brent; ตัวแปรของเขาทำให้ค่าใช้จ่ายการแทรกเพิ่มขึ้นด้วยการค้นหาที่ถูกกว่าM
CSn≈1αln(11−α) and CUn≈11−α.
โปรดทราบว่าการลบองค์ประกอบออกจากและขยายตารางมีระดับความยากต่างกันสำหรับวิธีการที่เกี่ยวข้อง
บรรทัดล่างคุณต้องเลือกการใช้งานที่ปรับให้เหมาะกับกรณีการใช้งานทั่วไปของคุณ เวลาในการเข้าถึงที่คาดหวังในเป็นไปได้ถ้าไม่รับประกันเสมอ ขึ้นอยู่กับวิธีที่ใช้การรักษา low เป็นสิ่งจำเป็น คุณต้องแลกเปลี่ยนเวลาการเข้าถึง (คาดว่า) กับค่าใช้จ่ายในพื้นที่ ตัวเลือกที่ดีสำหรับก็เป็นศูนย์กลางเช่นกันO(1)αh
1] เนื่องจากโปรแกรมเมอร์ที่ไม่ได้รับการฝึกหัดอย่างโง่เง่าอาจให้ดังนั้นข้อสันนิษฐานใด ๆ เกี่ยวกับคุณภาพของมันจึงเป็นสิ่งที่นำไปปฏิบัติได้จริง
2] สังเกตว่าสิ่งนี้สอดคล้องกับคำแนะนำสำหรับการใช้งานของ Javaอย่างไรh
Hashtable