คำถามติดแท็ก tree

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

6
โครงสร้างข้อมูลสำหรับชุดของต้นไม้
พยายามอนุญาตการจัดเก็บรายการองค์ประกอบอย่างมีประสิทธิภาพ คำนำหน้าจะใช้ร่วมกันดังนั้นจึงเป็นพื้นที่ที่มีประสิทธิภาพ ฉันกำลังมองหาวิธีที่คล้ายกันในการจัดเก็บต้นไม้อย่างมีประสิทธิภาพ ฉันต้องการที่จะตรวจสอบการเป็นสมาชิกและเพิ่มองค์ประกอบโดยรู้ว่าต้นไม้ที่กำหนดเป็นต้นไม้ย่อยของต้นไม้ที่เก็บไว้หรือถ้ามีต้นไม้ที่เก็บไว้เป็นต้นไม้ย่อยของต้นไม้ที่กำหนดก็เป็นที่ต้องการเช่นกัน ฉันมักจะเก็บต้นไม้ไบนารีที่มีความสูงไม่สมดุลประมาณ 500 ต้นน้อยกว่า 50 แก้ไข แอปพลิเคชันของฉันเป็นตัวตรวจสอบรุ่นบางประเภทโดยใช้การบันทึกความจำบางประเภท ลองนึกภาพผมมีรัฐและสูตรต่อไปนี้: F = φและกรัม= ( φ ∨ ψ )กับφเป็น subformula ซับซ้อนและจินตนาการแรกที่ผมต้องการทราบว่าฉถืออยู่ในs ฉันจะตรวจสอบว่าϕถือครองและหลังจากกระบวนการที่มีความยาวฉันได้รับมันเป็นกรณี ทีนี้ฉันอยากรู้ว่าgมีsหรือไม่ ฉันต้องการจดจำความจริงที่ว่าfเก็บไว้และสังเกตว่าg ⇒ fsssf=ϕf=ϕf = \phig=(ϕ∨ψ)g=(ϕ∨ψ)g = (\phi \vee \psi)ϕϕ\phifffsssϕϕ\phigggsssfffg⇒fg⇒fg \Rightarrow fเพื่อที่ฉันจะได้ค่าในsเกือบจะในทันที ในทางกลับกันถ้าฉันได้พิสูจน์แล้วว่าgไม่ถือในtฉันก็อยากจะบอกว่าfไม่ถือในtเกือบจะทันทีgggsssgggtttfffttt เราสามารถสร้างคำสั่งซื้อบางส่วนเกี่ยวกับสูตรและมี IFF กรัม⇒ฉ แต่ละรัฐsเราเก็บสองชุดของสูตร; L ( s ) จัดเก็บสูตรสูงสุดที่เก็บไว้และl ( s ) จะจัดเก็บสูตรขั้นต่ำที่ไม่ได้เก็บไว้ ตอนนี้ได้รับการรัฐsและสูตรกรัมผมสามารถดูได้ว่า∃ ฉ∈ …

2
ฉันจะเลือกโครงสร้างข้อมูลพจนานุกรมที่ทำงานได้อย่างไร
ฉันได้อ่านเกี่ยวกับโครงสร้างข้อมูลต่อไปนี้: Ideal Hash พยายามของแบกเวล ตารางแฮชแบบไดนามิกของ Larson ต้นไม้สีแดง - ดำ ต้นไม้แพทริเซีย ... และฉันแน่ใจว่ามีเป็นจำนวนมากของคนอื่น ๆ ออกมี ฉันได้เห็นน้อยมากในแบบของสิ่งที่แต่ละคนเหมาะสมกว่าหรือทำไมฉันถึงเลือกอีกแบบหนึ่ง ดังนั้นนี่คือคำถามสองสามข้อตามบรรทัดเหล่านี้: โครงสร้างข้อมูลพจนานุกรมที่ใช้งานได้มีความสำคัญอะไรที่ต้องรู้ อะไรคือข้อดีข้อเสียของวิธีการเหล่านี้? เมื่อใดที่จะใช้โครงสร้างข้อมูลที่จำเป็นมากขึ้น หมายเลข 2 และ 3 เป็นสิ่งที่สำคัญกว่า :-)

1
ขอบเขตล่างของจำนวนเส้นทาง“ สั้น” ในต้นไม้ที่ถูกรูทด้วยขนาดพหุนาม
ให้เป็นต้นไม้ไบนารีที่รูท เส้นทางจากรากของทุกเพื่อใบมีความยาวnทุกโหนดของมีโหนดซ้ายและโหนดลูกที่ถูกต้องเสมอ แต่เป็นไปได้ที่โหนดเหล่านั้นจะเหมือนกัน (ดังนั้นจึงมีเส้นทางที่เป็นไปได้เสมอ) ขนาดของเป็นที่สิ้นสุดโดย(n)) โหนดที่มีโหนดลูกที่แตกต่างกันจะเรียกว่าแตกแขนงโหนดT n T 2 n T O ( p o l y ( n ) )TTTTTTnnnTTT2n2n2^nTTTO ( p o l y)( n ) )O(poly(n))O(poly(n)) เราบอกว่าสองพา ธ นั้นแตกต่างกันถ้ามีหนึ่งโหนดการแบรนช์ที่แบ่งใช้และหนึ่งพา ธ ไปที่โหนดย่อยซ้ายและอีกพา ธ ไปยังโหนดย่อยขวา เป็นที่ชัดเจนว่ามีเส้นทางอย่างน้อยหนึ่งในกับโหนดแตกแขนง มิฉะนั้นจะมีโหนดมากเกินไปในTO ( บันทึกn ) TTTTO ( บันทึกn )O(log⁡n)O(\log n)TTT มีขอบเขตล่างที่ดีกว่ากับจำนวนของเส้นทางที่มีการแยกโหนดถ้าฉันรู้ว่ามีแยกโหนดในต้นไม้ω ( บันทึกn )O …

2
อัลกอริทึมที่มีประสิทธิภาพสำหรับการค้นหาชุดของต้นไม้
ฉันมีชุดข้อมูลขนาดใหญ่ของต้นไม้และฉันต้องการค้นหาโดยระบุtreelet (กราฟย่อยที่เชื่อมต่อ) แบบสอบถามควรส่งคืนการเกิดทั้งหมดของ treelet ในชุดข้อมูล มีอัลกอริทึมที่มีประสิทธิภาพในการทำเช่นนั้นหรือไม่? ฉันกำลังคิดถึงบางสิ่งเช่นอาร์เรย์ต่อท้ายอย่างไรก็ตามการเข้ารหัสต้นไม้อย่างไร้เดียงสาเป็นสตริง (โดยการเรียงลำดับการส่งผ่านโหนดคงที่) จะไม่ทำงานเนื่องจากการค้นหา Treelet อาจมีรูปร่างที่ไม่เจาะจง UPDATE: รายละเอียดบางอย่างเกี่ยวกับอินสแตนซ์ทั่วไปที่ฉันคาดหวัง: ชุดข้อมูลจะประกอบด้วยต้นไม้อย่างน้อยหลายหมื่นต้นแต่ละชุดประกอบด้วยโหนดประมาณยี่สิบถึงสามสิบ ต้นไม้จะไม่ได้เป็นแบบไบนารี แต่จำนวนเด็กทั่วไปต่อโหนดจะมีขนาดเล็ก (โดยปกติจะไม่ใหญ่กว่าสี่หรือห้าแม้ว่าในบางกรณีที่เลวร้ายก็สามารถเข้าถึงประมาณสามสิบ) จำนวนฉลากจะอยู่ในหลักหมื่น ฉันต้องการสิ่งนั้นสำหรับแอปพลิเคชัน NLP: ต้นไม้แต่ละต้นจะแยกการพึ่งพาของประโยคแต่ละโหนดแสดงคำที่เกิดขึ้นซ้ำและแต่ละคำมีคำในพจนานุกรม (มีการตกแต่งบางอย่าง)

2
โครงสร้างข้อมูลที่ดีที่สุดสำหรับแผนผังต้นไม้คืออะไร
ฉันกำลังมองหาโครงสร้างข้อมูลซึ่งโดยพื้นฐานแล้วเป็นแผนผังของแผนที่ที่แผนที่ในแต่ละโหนดมีองค์ประกอบใหม่ ๆ รวมถึงองค์ประกอบในแผนที่ของโหนดแม่ โดยแผนที่ที่นี่ฉันหมายถึงแผนที่การเขียนโปรแกรมที่มีคีย์และค่าเช่น map ใน STL หรือ dict ใน python ตัวอย่างเช่นอาจมีโหนดรูท: root = {'car':1, 'boat':2} และเด็ก 2 คนแต่ละคนเพิ่มองค์ประกอบไปยังแผนที่หลัก child1 = {'car':1, 'boat':2, 'jet':35} child2 = {'car':1, 'boat':2, 'scooter':-5} ฉันต้องการให้พื้นที่มีประสิทธิภาพเท่าที่จะเป็นไปได้เช่นฉันไม่ต้องการเก็บสำเนาของแผนที่ที่เกิดขึ้นในแต่ละโหนด แต่การค้นหาจะยังคงเป็น O (log N), N เป็นจำนวนทั้งหมดของ องค์ประกอบที่โหนดไม่ใช่ต้นไม้ทั้งหมด ฉันคิดว่าอาจจะมีฟังก์ชั่นแฮชอัจฉริยะที่ฉันอาจใช้กับสิ่งนี้ แต่ไม่สามารถคิดอะไรได้เลย วิธีการไร้เดียงสาจะเก็บรายการที่เพิ่มเข้ามาใหม่ในแผนที่ที่แต่ละโหนดแล้วเลื่อนขึ้นต้นไม้หากไม่พบสิ่งใด ฉันไม่ชอบสิ่งนี้เพราะมันขึ้นอยู่กับความลึกของต้นไม้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.