การใช้งาน Btree หรือ B+tree ที่มีอยู่ใน Java [ปิด]

ฉันกำลังทำโปรเจ็กต์ที่ฉันต้องการโครงสร้างข้อมูล btree หรือ b+tree ไม่มีใครรู้เกี่ยวกับการใช้งาน btree หรือ b+tree ที่มีอยู่ (ด้วยการแทรก, ลบ, อัลกอริธึมการค้นหา) ควรยอมรับสตริงเป็นอินพุตและสร้างรูปแบบ btree หรือ b+tree ของสตริงเหล่านี้


person rohit    schedule 04.04.2010    source แหล่งที่มา
comment
@rohit: ฉันได้แก้ไขคำถามของคุณแล้วเพื่อให้ผู้สมัครเห็นได้ชัดเจนน้อยลงเนื่องจากไม่ใช่คำถามจริง หากคุณไม่ชอบการเปลี่ยนแปลงของฉัน คุณสามารถเปลี่ยนกลับได้ตามใจชอบ   -  person Jørn Schou-Rode    schedule 04.04.2010
comment
คุณช่วยอธิบายรายละเอียดว่าคุณจะใช้โครงสร้างข้อมูลเพื่ออะไรได้ไหม   -  person Graphics Noob    schedule 04.04.2010


คำตอบ (4)


เนื่องจากขาดรายละเอียดเกี่ยวกับปัญหาที่คุณต้องแก้ไข ฉันจะให้ตัวเองแนะนำวิธีแก้ปัญหาอื่นที่อาจแก้ปัญหาของคุณได้: ใช้ต้นไม้สีแดง/ดำแทน

ต้นไม้สีแดง/ดำถือได้ว่าเป็นต้นไม้ b ตามที่อธิบายไว้ใน Wikipedia:

ต้นไม้สีแดงดำมีโครงสร้างคล้ายคลึงกับต้นไม้ B ในลำดับที่ 4 โดยแต่ละโหนดสามารถมีค่าได้ระหว่าง 1 ถึง 3 ค่า และ (ตามลำดับ) ระหว่างพอยน์เตอร์ลูก 2 ถึง 4 ตัว ใน B-tree ดังกล่าว แต่ละโหนดจะมีเพียงค่าเดียวที่ตรงกับค่าในโหนดสีดำของต้นไม้สีแดง-ดำ โดยมีค่าเผื่อเลือกก่อนและ/หรือหลังในโหนดเดียวกัน โดยทั้งสองค่าจะตรงกับโหนดสีแดงที่เทียบเท่ากันของ ต้นแดงดำ [...]

Java มีคลาสในตัวสองคลาส TreeMap และ TreeSet โดยให้ต้นไม้สีแดง/ดำ สิ่งเหล่านี้จะไม่รับสตริงเป็นอินพุตและขยายแผนผังจากนั้น แต่คุณอาจสามารถใช้บางสิ่งที่คล้ายกัน "รอบ" หนึ่งในคลาสเหล่านั้นได้

person Jørn Schou-Rode    schedule 04.04.2010

jdbm มีการใช้งาน b+tree ที่มั่นคงมาก h+tree ซึ่งเป็นโครงสร้างข้อมูลที่เกี่ยวข้องที่น่าสนใจ

person Kevin Day    schedule 05.04.2010
comment
ตั้งแต่นั้นมาก็มี JDBM3 และ JDBM4 ซึ่งเปลี่ยนชื่อเป็น MapDB - person Peter Lamberg; 29.12.2013
comment
@PeterLamberg ใช่ - MapDB กำลังสร้างให้เป็นโครงการที่ดีมาก เหลืออีกไม่กี่สัปดาห์นับจากการเปิดตัวครั้งแรกที่เสถียร แต่ก็ดูดีมาก โปรดทราบว่า MapDB ไม่ได้ใช้ b+tree b/c ของข้อกำหนดการทำงานพร้อมกัน - ฉันเชื่อว่าพวกเขากำลังใช้แผนผังที่เชื่อมโยงบางประเภท - person Kevin Day; 02.01.2014
comment
นี่คือการใช้งาน B+-tree บนดิสก์ของฉัน github.com/myui/btree4j - person myui; 27.03.2019

ฉันต้องใช้ โค้ด

person Justin    schedule 13.05.2012
comment
ยังไม่ได้ทดสอบ แต่วิธีการแยกคือสิ่งที่ฉันกำลังมองหาทุกครั้งที่ใส่และถอดออก ด้วยองค์ประกอบเพียง 2 อย่างนี้จะเกิดขึ้นเกือบตลอดเวลา คำถาม: คุณสับเปลี่ยนองค์ประกอบระดับบนสุดหรือไม่ สมมติว่าคุณมีข้อมูลจาก 1 -5,000 (5,000 เพื่อประโยชน์ของความคิดเห็นนี้) และคุณมีองค์ประกอบแรกเป็น 300 มันสมเหตุสมผลไหมที่จะให้สิ่งนั้นใกล้กับ 2,500 มากขึ้น - person Mukus; 18.02.2013
comment
อย่างไรก็ตาม .. +1 สำหรับคำตอบของคุณ - person Mukus; 18.02.2013
comment
@TejaswiRana ฉันได้ทดสอบกับ 5,000 องค์ประกอบ (1-5,000) และรูตจบลงด้วยค่า 2048 การใช้งานเริ่มต้นคือ 2-3 แบบ แต่นั่นเป็นเพียงเพื่อการทดสอบเท่านั้น คุณสามารถส่งผ่านลำดับ (minKeySize) ของทรีในตัวสร้างได้ - person Justin; 18.02.2013

คุณสามารถลองใช้ BTree ของ Electric (หน้าผู้เขียนที่นี่)

person Charles Goodwin    schedule 18.08.2011