อ่าน 2 นาที
ต้นไม้สถิติลำดับ
ในวิทยาการคอมพิวเตอร์ต้นไม้สถิติลำดับเป็นรูปแบบหนึ่งของต้นไม้ค้นหาไบนารี (หรือโดยทั่วไปคือB-tree ) ที่รองรับการดำเนินการเพิ่มเติมอีกสองอย่างนอกเหนือจากการแทรก การค้นหา และการลบ:
ต้นไม้สถิติลำดับ
ในวิทยาการคอมพิวเตอร์ต้นไม้สถิติลำดับเป็นรูปแบบหนึ่งของต้นไม้ค้นหาไบนารี (หรือโดยทั่วไปคือB-tree [ 1 ] ) ที่รองรับการดำเนินการเพิ่มเติมอีกสองอย่างนอกเหนือจากการแทรก การค้นหา และการลบ:
- Select( i ) – ค้นหา องค์ประกอบที่เล็กที่สุดลำดับที่ iที่เก็บไว้ในต้นไม้
- Rank( x ) – ค้นหาลำดับขององค์ประกอบxในต้นไม้ นั่นคือ ดัชนีขององค์ประกอบ x ในรายการองค์ประกอบที่เรียงลำดับแล้วของต้นไม้
การดำเนินการทั้งสองอย่างสามารถทำได้ใน เวลา O (log n ) ในกรณีที่เลวร้ายที่สุดเมื่อใช้โครงสร้าง ข้อมูลแบบต้นไม้ปรับสมดุลตัวเอง เป็นโครงสร้างข้อมูลพื้นฐาน
การใช้งานโครงสร้างต้นไม้ค้นหาเสริม
ในการเปลี่ยนต้นไม้ค้นหาปกติให้เป็นต้นไม้สถิติเรียงลำดับ โหนดของต้นไม้จะต้องจัดเก็บค่าเพิ่มเติมอีกหนึ่งค่า ซึ่งก็คือขนาดของต้นไม้ย่อยที่รากอยู่ที่โหนดนั้น (กล่าวคือ จำนวนโหนดที่อยู่ด้านล่าง) การดำเนินการทั้งหมดที่แก้ไขต้นไม้จะต้องปรับข้อมูลนี้เพื่อรักษาสภาพคงที่นั้นไว้
ขนาด[x] = ขนาด[ซ้าย[x]] + ขนาด[ขวา[x]] + 1
โดยsize[nil] = 0ตามคำจำกัดความ การเลือกสามารถนำไปใช้ได้ดังนี้[ 2 ] : 342
ฟังก์ชัน Select(t, i) // ส่งคืนองค์ประกอบลำดับที่ i (นับจากดัชนีแรก) ขององค์ประกอบใน t p ← size[left[t]]+1 ถ้า i = p ส่งคืน t มิฉะนั้น ถ้า i < p ให้ส่งคืน Select(left[t], i) มิฉะนั้นให้ส่งคืน Select(right[t], i - p)
สามารถดำเนินการจัดอันดับได้โดยใช้ฟังก์ชันหลัก p[x] ดังนี้[ 3 ] : 342
ฟังก์ชัน Rank(T, x) // ส่งคืนตำแหน่งของ x (นับจากดัชนีแรก) ในรายการเรียงลำดับเชิงเส้นขององค์ประกอบในต้นไม้ T r ← ขนาด[ซ้าย[x]] + 1 y ← x ในขณะที่ y ≠ T.root ถ้า y = right[p[y]] r ← r + size[left[p[y]]] + 1 y ← p[y] ส่งคืน r
ต้นไม้สถิติลำดับสามารถแก้ไขเพิ่มเติมได้ด้วยข้อมูลการบัญชีเพื่อรักษาสมดุล (เช่น สามารถเพิ่มความสูงของต้นไม้เพื่อให้ได้ต้นไม้สถิติลำดับ AVLหรือเพิ่มบิตสีเพื่อให้ได้ ต้นไม้สถิติลำดับสี แดง-ดำ ) หรืออีกทางหนึ่ง สามารถใช้ฟิลด์ขนาดร่วมกับ แผนการ ถ่วงน้ำหนักโดยไม่มีค่าใช้จ่ายพื้นที่จัดเก็บเพิ่มเติม[ 4 ]
ดูเพิ่มเติม
- ทรีปโดยปริยาย
- โครงสร้างข้อมูลแบบ Segment treeสามารถใช้สำหรับการนับจำนวนข้อมูลได้ และ Rank ก็เป็นการค้นหาแบบนับจำนวนข้อมูลเช่นกัน โดยแต่ละโหนดจะเก็บค่า 1 และนำมาบวกกันตั้งแต่ต้นจนถึงองค์ประกอบสุดท้าย
ลิงก์ภายนอก
- แผนผังลำดับสถิติบน PineWiki มหาวิทยาลัยเยล
- แพ็กเกจblist ในภาษา Pythonใช้โครงสร้างข้อมูลแบบ B-tree ที่มีสถิติเรียงลำดับเพื่อสร้างลิสต์ที่มีการแทรกข้อมูลอย่างรวดเร็วในตำแหน่งใดๆ ก็ได้
- ส่วนขยาย G++ สำหรับ STL: โครงสร้างข้อมูลตามนโยบายส่วนขยาย tree_order_statistics_node_update สำหรับคอนเทนเนอร์แบบต้นไม้ที่มีลำดับ
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ต้นไม้สถิติลำดับ
ในวิทยาการคอมพิวเตอร์ต้นไม้สถิติลำดับเป็นรูปแบบหนึ่งของต้นไม้ค้นหาไบนารี (หรือโดยทั่วไปคือB-tree ) ที่รองรับการดำเนินการเพิ่มเติมอีกสองอย่างนอกเหนือจากการแทรก การค้นหา และการลบ:
การใช้งานโครงสร้างต้นไม้ค้นหาเสริม
ในการเปลี่ยนต้นไม้ค้นหาปกติให้เป็นต้นไม้สถิติเรียงลำดับ โหนดของต้นไม้จะต้องจัดเก็บค่าเพิ่มเติมอีกหนึ่งค่า ซึ่งก็คือขนาดของต้นไม้ย่อยที่รากอยู่ที่โหนดนั้น (กล่าวคือ จำนวนโหนดที่อยู่ด้านล่าง) การดำเนินการทั้งหมดที่แก้ไขต้นไม้จะต้องปรับข้อมูลนี้เพื่อรักษา สภาพคง...
ดูเพิ่มเติม
ทรีปโดยปริยาย โครงสร้างข้อมูลแบบ Segment tree สามารถใช้สำหรับการนับจำนวนข้อมูลได้ และ Rank ก็เป็นการค้นหาแบบนับจำนวนข้อมูลเช่นกัน โดยแต่ละโหนดจะเก็บค่า 1 และนำมาบวกกันตั้งแต่ต้นจนถึงองค์ประกอบสุดท้าย
ลิงก์ภายนอก
แผนผังลำดับสถิติบน PineWiki มหาวิทยาลัยเยล แพ็กเกจblist ในภาษา Python ใช้โครงสร้างข้อมูลแบบ B-tree ที่มีสถิติเรียงลำดับเพื่อสร้าง ลิสต์ ที่มีการแทรกข้อมูลอย่างรวดเร็วในตำแหน่งใดๆ ก็ได้ ส่วนขยาย G++ สำหรับ STL: โครงสร้างข้อมูลตามนโยบายส่วนขยาย...