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

Hilbert Tree (ฮิลเบิร์ต ทรี) ในโครงสร้างข้อมูล

แนวคิดพื้นฐาน

Hilbert R-tree เป็น Variant ของ R-tree ใช้เป็น Index สำหรับ Multidimensional Objects: เส้น, พื้นที่, วัตถุ 3D, High-dimensional Feature-based Objects สามารถมองได้ว่าเป็น Extension ของ B+-tree สำหรับข้อมูลหลายมิติ

ประสิทธิภาพ R-tree ขึ้นอยู่กับ Quality ของ Clustering Algorithm Hilbert R-tree ใช้ Space-filling Curves (เส้นเติมพื้นที่) โดยเฉพาะ Hilbert Curve เพื่อเรียงลำดับ Data Rectangles ให้เป็น Linear Order

2 ประเภท Hilbert R-trees

  • Static Databases: Packed Hilbert R-trees - ใช้สำหรับ DB ที่ Update น้อย/ไม่มี
  • Dynamic Databases: รองรับ Insert/Delete

ทั้งคู่ใช้ Hilbert Curve เพื่อ Ordering ที่ "Good" = จัดกลุ่ม Data Rectangles ที่ "คล้าย" กัน ให้ MBR (Minimum Bounding Rectangles) มี Area และ Perimeter น้อยที่สุด

แนวคิดหลัก: Packed R-tree Construction

Roussopoulos & Leifker: Sort ข้อมูลด้วย X หรือ Y ของมุมสี่เหลี่ยม → Scan เรียง → เติม Node จนเต็ม → สร้าง Node ใหม่ → ได้ Space Utilization ≈ 100%

Algorithm: Hilbert-Pack

  1. คำนวณ Hilbert Value สำหรับแต่ละ Data Rectangle
  2. Sort Rectangles ตาม Hilbert Value 昇序 (Ascending)
  3. สร้าง Leaf Nodes (Level l=0): While มี Rectangle เหลือ → สร้าง Node ใหม่ → Assign C Rectangles ถัดไป
  4. สร้าง Higher Levels (l+1): While มี >1 Node ที่ Level l → Sort Nodes ตาม Creation Time → Repeat Step 3

สมมติฐาน

ข้อมูลเป็น Static หรือ Modify น้อย → Heuristic เรียบง่าย สร้าง R-tree ~100% Space Utilization + Good Response Time

ทำไม Hilbert Curve?

  • Preserve Locality: จุดที่ใกล้กันในพื้นที่ 2D → ใกล้กันใน 1D Order
  • Clustering ดีกว่า Z-order (Morton Curve)
  • MBR ที่ได้มี Area/Perimeter น้อย → Query เร็วขึ้น