ต้นไม้ B เทียบกับต้นไม้ R - มันไม่ใช่แค่รายการลิงก์ที่เชื่อมโยงเข้าด้วยกันใช่ไหม


10

ฉันค่อนข้างคุ้นเคยกับต้นไม้ B โดยส่วนใหญ่จะต้องรักษาฐานข้อมูลที่ดีด้วยไฟฟ้าเครื่องปรับอากาศและพื้นที่ฮาร์ดไดรฟ์ ฉันเชื่อมโยงกับรายการที่เชื่อมโยงเป็นสองเท่า (เช่น [ey,]])

วันนี้หนึ่งในนักพัฒนาในมื้อกลางวันพูดถึงต้นไม้ R

ฉันกระโดดวิกิพีเดียและเริ่มอ่าน มันฟังดูน่ากลัวเหมือนต้นไม้ B ที่สูงขึ้น น่าเสียดายที่การไม่มีพื้นฐานทางคณิตศาสตร์ที่ลึกทำให้ยากที่จะเข้าใจในสิ่งที่เพื่อนร่วมงานของฉันพูดถึง

ฉันหวังว่าถ้ามีคนสามารถอธิบายความแตกต่างเล็กน้อยระหว่างต้นไม้ B และต้นไม้ R ฉันอาจจะจบลงด้วยการถามพวกคนต่อไป แต่ไม่มีการรับประกันว่าพวกเขาจะตอบคำถามของฉัน พวกเขาจะเริ่มท่องจำเกี่ยวกับพระเจ้ามากกว่าจะรู้ . .


BTree ไม่เหมือนรายการเชื่อมโยงสองเท่าแน่นอน ทรีอนุญาตให้เข้าถึงการดำเนินการในบันทึก (n) แทนสัดส่วนกับ n เช่นเดียวกับในรายการ
Javier

@ จาเวียร์: โหนดใบของดัชนี b-tree มักจะเป็นรายการที่เชื่อมโยงเป็นสองเท่าเพื่อให้สามารถเรียกคืนดัชนีโหนดได้อย่างรวดเร็ว
Jordan

1
เป็นคำถามทางเทคนิคอย่างแท้จริงนี่เป็นของ StackOverflow (โปรดอย่าโพสต์ไว้ที่นั่นอีกครั้งโดยอัตโนมัติหากมีผู้ลงคะแนนเพียงพอที่จะปิดที่นี่)
PéterTörök

1
นี่คือหัวข้อที่นี่: Programmers.SE สำหรับคำถามเกี่ยวกับแนวคิดเกี่ยวกับการเขียนโปรแกรม Stack Overflow ใช้สำหรับเมื่อคุณมีรหัสที่คุณต้องการความช่วยเหลือ

2
@ Peter Torok: ภายใต้ระบบเก่า WOULD นี้เป็นคำถาม SO แต่ตอนนี้เว็บไซต์นี้มีอยู่
surfasb

คำตอบ:


7

ต้นไม้ R สามารถคิดได้ว่าเป็นลักษณะทั่วไปของต้นไม้ข ในกรณีที่ b-tree ให้การเข้าถึง O (log n) ผ่าน "ขอบเขตที่ จำกัด " ของคีย์ที่มีอยู่ต้นไม้ R ให้การเข้าถึง O (log n) ผ่าน "K dimension region" ของคีย์ที่มี

หากคุณต้องการแมปรหัสไปรษณีย์กับชื่อเขตคุณสามารถใช้ B-Tree เนื่องจากคุณสามารถถามได้ว่า "เขตปกครองทั้งหมดที่มีรหัสไปรษณีย์อยู่ระหว่าง 60000 ถึง 61000 คืออะไร" อย่างไรก็ตาม B-Tree จะไม่เหมาะสมในการทำแผนที่พิกัด GPS กับชื่อเคาน์ตีสำหรับคำค้นหาเช่น "เขตใดบ้างที่อยู่ในระยะ 100 ไมล์จากชิคาโก?" เนื่องจากมันสั่งคีย์ในมิติเดียวเท่านั้น R-Tree แบ่งคีย์ของมันตามกล่องที่มีการเหลื่อมซ้อนกันดังนั้นจึงเป็นวิธีที่เป็นธรรมชาติในการจัดเก็บคีย์เมื่อคุณต้องการสอบถามในหลายมิติ


ฉันชอบอุปมา
surfasb

1
ตัวอย่างที่เป็นรูปธรรมมากกว่าแบบเปรียบเทียบมันเป็นวิธีการใช้อัลกอริทึมดัชนีเหล่านี้อย่างแท้จริง
SingleNegationElimination

6

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

โดยทั่วไปแล้วโหนด R-Tree จะมีกล่องที่มีขอบเขตซึ่งช่วยให้คุณสามารถจัดทำดัชนีตำแหน่งได้อย่างมีประสิทธิภาพเนื่องจากคุณอาจต้องการถ้าคุณต้องการค้นหาเร็กคอร์ด "ใกล้" ในบางตำแหน่ง องค์ประกอบใน B-Tree มีลำดับที่ง่ายกว่า คุณสามารถเปรียบเทียบได้โดยตรงว่ามีบางสิ่งมากกว่าหรือเท่ากับองค์ประกอบอื่น ใน R-Tree จุดประสงค์ของแต่ละรายการคือการกำหนดองค์ประกอบที่มีอยู่ในกล่องที่มีขอบเขต

B-Tree ช่วยให้คุณสามารถค้นหารายการที่สามารถสั่งซื้อได้อย่างมีประสิทธิภาพในหน่วยความจำรอง (เช่นฮาร์ดดิสก์) และ R-Tree ช่วยให้คุณค้นหาองค์ประกอบที่ "ที่" หรือ "ใกล้" ได้อย่างมีประสิทธิภาพในบางจุดหรือขอบกล่อง ในหน่วยความจำรอง


ดูเหมือนว่าต้นไม้ R จะเริ่มแสดงความแตกต่างเมื่อจำนวนองค์ประกอบเพิ่มขึ้นถูกต้องหรือไม่ หรือว่าง่ายเกินไปเล็กน้อย?
surfasb

ฉันคิดว่ามีจำนวนโหนดที่คล้ายกันคุณจะไม่เห็นความแตกต่างในการใช้พื้นที่ยกเว้นค่าเชิงเส้นของข้อมูลกล่องขอบเขตที่โหนดที่ไม่ใช่ใบไม้ แต่คุณไม่สามารถแสดงขอบเขต จำกัด ได้อย่างมีประสิทธิภาพในคำจำกัดความดั้งเดิมของ B-Tree ดังนั้นคุณต้องใช้พื้นที่มากขึ้นอย่างแน่นอนถ้าคุณพยายามแสดงข้อมูลเชิงพื้นที่ใน B-Tree R-Tree ใช้สำหรับความสัมพันธ์เชิงพื้นที่ B-Tree รองรับการจัดเรียงแบบมิติเดียวเท่านั้น
JasonTrue

2
@JasonTrue: จริงๆแล้วมีวิธีการที่มีประสิทธิภาพในการ linearize bounding กล่องสำหรับการทำดัชนีรี B: en.wikipedia.org/wiki/Geohash แม้ว่าแฮชจะ "มีประสิทธิภาพ" แต่ก็ไม่สะดวกอย่างยิ่ง แบบสอบถามแบบ จำกัด ขอบเขตโดยพลการนั้นมีแนวโน้มที่จะใช้แบบสอบถาม 9 แบบแยกกันสำหรับพื้นที่ 2 มิติและหากกล่องซ้อนทับแกนหลัก (เช่น The International Dateline) จำนวนข้อความค้นหาอาจเพิ่มขึ้นเป็นสองเท่าหรือสี่เท่าและยุ่งยากมากในการใช้งาน ทั้งๆที่มันยังคงเป็นตัวเลือกเมื่อดัชนีเชิงเส้นเป็นชนิดที่มีอยู่เท่านั้น
SingleNegationElimination
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.