Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

การจัดการน้ำล้นในโครงสร้างข้อมูล


โอเวอร์โฟลว์เกิดขึ้นในเวลาที่บัคเก็ตหลักสำหรับคู่ใหม่ (คีย์, องค์ประกอบ) เต็ม

เราอาจจัดการกับน้ำล้นโดย

ค้นหาตารางแฮชอย่างเป็นระบบสำหรับถังที่ยังไม่เต็ม

  • การตรวจสอบเชิงเส้น (การกำหนดที่อยู่เปิดเชิงเส้น)
  • การตรวจวัดกำลังสอง
  • สุ่มตรวจ

ขจัดส่วนเกินโดยอนุญาตให้แต่ละที่เก็บข้อมูลเก็บรายการของคู่ทั้งหมดที่เป็นที่เก็บข้อมูลหลัก

  • รายการเชิงเส้นของอาร์เรย์
  • โซ่

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

การตรวจสอบเชิงเส้นจะดำเนินการเพื่อแก้ไขการชนกันโดยการวางข้อมูลลงในช่องที่เปิดถัดไปในตาราง

ประสิทธิภาพของการตรวจวัดเชิงเส้น

  • เวลาที่แย่ที่สุดในการค้นหา/แทรก/ลบคือ θ(m) โดยที่ m จะถือเป็นจำนวนคู่ในตาราง
  • สิ่งนี้เกิดขึ้นเมื่อทุกคู่อยู่ในคลัสเตอร์เดียวกัน

ปัญหาของการตรวจวัดเชิงเส้น

  • ตัวระบุมีแนวโน้มที่จะรวมกลุ่มกัน
  • กลุ่มที่อยู่ติดกันมีแนวโน้มที่จะรวมตัวกัน
  • เพิ่มหรือปรับปรุงเวลาในการค้นหา

การตรวจวัดกำลังสอง

การค้นหาแบบเส้นตรง (H(x)+i2)%b; H(x) หมายถึงฟังก์ชันแฮชของ x

การตรวจสอบกำลังสองใช้ฟังก์ชันกำลังสองของ i เป็นการเพิ่มขึ้น

ตรวจสอบถัง H(x), (H(x)+i2)%b, (H(x)-i2)%b สำหรับ 1<=i<=(b-1)/2

b ถูกระบุเป็นจำนวนเฉพาะของรูปแบบ 4j+3, j เป็นจำนวนเต็ม

การสุ่มตัวอย่าง

Random Probing ดำเนินการร่วมกับตัวเลขสุ่ม

H(x):= (H’(x) + S[i]) % b
S[i] is a table along with size b-1
S[i] is indicated as a random permutation of integers [1, b-1].