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

BSP Trees เป็นโครงสร้างการค้นหาแบบหลายมิติ


โครงสร้างการค้นหาเชิงพื้นที่ใช้แนวคิดเดียวกันกับที่คิดค้นขึ้นในวิทยาการคอมพิวเตอร์ในช่วงทศวรรษที่ 60 และ 70 เพื่อแก้ปัญหาการประมวลผลข้อมูลเชิงสัญลักษณ์จำนวนมากอย่างรวดเร็ว เมื่อเทียบกับข้อมูลทางเรขาคณิต เช่น รายชื่อบุคคล มันถูกประดิษฐ์ขึ้นว่าโดยครั้งแรกการเรียงลำดับรายชื่อตามตัวอักษรและการจัดเก็บรายการที่เรียงลำดับในอาร์เรย์ เราสามารถคำนวณว่าชื่อใหม่บางชื่ออยู่ในรายการแล้วในการดำเนินการ log2n โดยใช้อัลกอริทึมการค้นหาแบบไบนารีแทนที่จะเป็น n/2 การดำเนินการที่คาดหวังต้องใช้การค้นหาตามลำดับ นี่เป็นตัวอย่างที่ดีในการแยกโครงสร้าง (ลำดับตัวอักษร) ที่มีอยู่ในรายชื่อและใช้ประโยชน์จากโครงสร้างนั้นในการดำเนินการที่ตามมา (ค้นหาชื่อ) เพื่อลดการคำนวณ

อย่างไรก็ตาม หากต้องการอนุญาตให้เพิ่มและลบชื่อในขณะที่รักษารายการที่เรียงลำดับไว้ ก็จำเป็นต้องมีโครงสร้างข้อมูลแบบไดนามิก เช่น หนึ่งตัวชี้ที่ใช้ ตัวอย่างที่พบบ่อยที่สุดของโครงสร้างข้อมูลดังกล่าวไม่ใช่สิ่งใดเลยนอกจากแผนผังการค้นหาแบบไบนารี

ในกรณีของแผนผังการค้นหาแบบไบนารี ที่มีการใช้งานเพื่อแสดงชุดของจำนวนเต็ม เช่น A ={1, 2, 5, 6, 7, 9} ที่วางอยู่บนเส้นจริง ในการคำนวณว่าจำนวน/จุดอยู่ในทรีแล้วหรือไม่ เราสามารถแทรกจุดนั้นเข้าไปในแผนผังและติดตามเส้นทางที่สอดคล้องกับลำดับของช่วงเวลาที่ซ้อนกันซึ่งประกอบด้วยจุดนั้นได้ สำหรับทรีที่สมดุล กระบวนการนี้จะใช้ไม่เกิน O(log n) ขั้นตอน อันที่จริง เราได้ทำการค้นหาแบบไบนารี แต่มีโปรแกรมหนึ่งที่นำทรีไปใช้แทนที่จะเป็นอาร์เรย์ ตอนนี้ ทรีสามารถเข้ารหัสส่วนหนึ่งของอัลกอริธึมการค้นหาได้ เนื่องจากมันกำหนดลำดับที่การค้นหาจะก้าวหน้า

ตอนนี้ทำให้เรากลับมาที่ Partitioning Trees ซึ่งถือว่าเป็นการทำให้ต้นไม้การค้นหาแบบไบนารีมีมิติข้อมูลทั่วไป> 1 เช่น multi-dimensional (ใน 1D พวกมันจะเหมือนกันโดยพื้นฐานแล้ว) ในความเป็นจริง การสร้าง Partitioning Tree สามารถจินตนาการได้ว่าเป็น Quick Sort รุ่นเรขาคณิต

การเปลี่ยนแปลง (การลบและการแทรก) ทำได้โดยการรวมทรี ซึ่งคล้ายกับการรวมรายการที่จัดเรียงในการ Merge Sort

อย่างไรก็ตาม เนื่องจากจุดต่างๆ ไม่ได้แบ่งพื้นที่สำหรับมิติใดๆ> 1 เราจึงต้องใช้ไฮเปอร์เพลนแทนที่จะใช้จุดเพื่อแบ่งย่อย

ไฮเปอร์เพลนจะแบ่งหรือแบ่งพื้นที่ออกเป็นสองช่องครึ่งเสมอโดยไม่คำนึงถึงมิติ