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

R* Tree (อาร์-สตาร์ ทรี) ในโครงสร้างข้อมูล

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

R*-tree เป็น Variant ของ R-tree สำหรับ Indexing Spatial Data (ข้อมูลเชิงพื้นที่) เสนอโดย Beckmann, Kriegel, Schneider, Seeger (1990)

Construction Cost สูงกว่า R-tree เล็กน้อย (ต้อง Reinsert) แต่ Query Performance ดีกว่า รองรับทั้ง Point และ Spatial Data

ความแตกต่าง R*-tree vs R-tree

ลักษณะ R-tree R*-tree
Construction Bulk-load หรือ Insert Repeated Insertion + Forced Reinsertion
Overlap มี Overwalk ค่อนข้างมาก Overlap น้อยมาก (Minimize)
Coverage ไม่ได้ Optimize โดยตรง Minimize Coverage และ Overlap พร้อมกัน
Split Strategy Linear/Quadratic Split Topological Split (เลือก Axis จาก Perimeter) + Minimize Overlap
Reinsertion ไม่มี มี Forced Reinsertion เมื่อ Overflow (คล้าย B-tree Balancing)
Query Performance ปานกลาง ดีกว่ามาก (Pruning ดี, Negative Range Queries เร็ว)

Algorithm และ Complexity

  • Query/Delete: เหมือน R-tree
  • Insert: Combined Strategy - Leaf Minimize Overlap, Inner Minimize Enlargement/Area
  • Split: Topological Split (Axis จาก Perimeter) + Minimize Overlap
  • Skip Splits: Reinsert Objects/Subtrees (คล้าย B-tree Balancing)

Complexity Analysis

  • Worst-case Query/Delete: เหมือน R-tree
  • Insert Strategy: O(M log M) - ระหว่าง Linear O(M) และ Quadratic O(M²)
  • Reinsertions: สูงสุด 1 Branch → O(log n) Reinsertions
  • Total Insert Complexity: เทียบเท่า R-tree

ข้อดีหลัก

  1. ลด Overlap → ลด Branch ที่ต้อง Visit ระหว่าง Query
  2. ลด Coverage → Pruning ดีขึ้น
  3. Forced Reinsertion → โครงสร้างไม่ขึ้นกับ Insertion Order