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

Skip Lists (ข้ามรายการ) ในโครงสร้างข้อมูล

Finger Search ใน Skip Lists

จาก Node ที่มี Element b → Finger Search หา Element a
a < b → Search ย้อนหลัง (Backward)
a > b → Search ไปข้างหน้า (Forward)

Backward Case = Symmetric กับ Normal Search
Forward Case = ซับซ้อนกว่า (Sentinel ที่ Start เป็น Tallest Node ปกติ → Fast)
แต่ Finger อาจอยู่ที่ Height 1 Node → อาจต้อง "Climb" ขึ้น (ไม่เกิดใน Normal Search)

Properties ของ Skip Lists

  • Expected Linear Space
  • Expected O(log n) Levels
  • Search: Expected O(log n) Time
  • Insert/Delete at Given Position: Expected O(1) Time

Finger Search Implementation (Expected O(log d))

d = Distance ระหว่าง Finger และ Target

Backward Finger Search

  1. เก็บ Finger Data Structure: O(log n) Space, แต่ละ Level i เก็บ Pointer ไป Node ซ้ายของ Finger ที่ Level i Pointer ชี้ไป Finger หรือ Node ขวาของ Finger
  2. Move Finger → Update Pointer List
  3. Search: หา Lowest Node ใน Finger Structure ที่อยู่ซ้ายของ Search Key y (พิจารณา Level เรียงเพิ่ม) → Downward Search แบบ Standard Skip List

Forward Finger Search

ซับซ้อนกว่า เนื่องจากอาจต้อง Climb แต่ยัง Achieve O(log d) Expected Time ได้

สรุป

Skip Lists = Probabilistic Alternative ของ Balanced BSTs
Finger Search ได้ O(log d) โดยไม่เปลี่ยนโครงสร้างหลัก
ใช้ Randomization ทำให้ Update Operations เรียบง่ายและมีประสิทธิภาพ