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

4
แผนผังต้นไม้บทคัดย่อสร้างขึ้นได้อย่างไร?
ฉันคิดว่าฉันเข้าใจเป้าหมายของ AST และฉันได้สร้างโครงสร้างต้นไม้สองสามครั้งก่อนหน้านี้ แต่ไม่เคยเป็น AST ฉันสับสนเป็นส่วนใหญ่เพราะโหนดเป็นข้อความและไม่ใช่ตัวเลขดังนั้นฉันจึงไม่สามารถคิดวิธีที่ดีในการป้อนโทเค็น / สตริงได้เนื่องจากฉันกำลังวิเคราะห์รหัส ตัวอย่างเช่นเมื่อฉันดูไดอะแกรมของ AST ตัวแปรและค่าของมันคือโหนดปมถึงเครื่องหมายเท่ากับ มันสมเหตุสมผลดีสำหรับฉัน แต่ฉันจะใช้สิ่งนี้อย่างไร ฉันเดาว่าฉันสามารถทำได้เป็นกรณี ๆ ไปดังนั้นเมื่อฉันสะดุด "=" ฉันใช้มันเป็นโหนดและเพิ่มค่าการแจงก่อน "=" เป็นใบไม้ ดูเหมือนว่าผิดเพราะฉันอาจต้องทำเรื่องเป็นตัน ๆ ขึ้นอยู่กับวากยสัมพันธ์ จากนั้นฉันก็พบปัญหาอีกอย่างต้นไม้จะผ่านไปได้อย่างไร ฉันจะลงไปตามความสูงและกลับไปที่โหนดเมื่อฉันไปถึงจุดต่ำสุดแล้วทำแบบเดียวกันกับเพื่อนบ้านหรือไม่ ฉันเห็นไดอะแกรมมากมายบน AST แต่ฉันไม่สามารถหาตัวอย่างง่ายๆของรหัสได้ซึ่งอาจช่วยได้

3
การนำรูปแบบผู้เยี่ยมชมมาใช้สำหรับทรีไวยากรณ์ของบทคัดย่อ
ฉันอยู่ในขั้นตอนการสร้างภาษาโปรแกรมของฉันเองซึ่งฉันใช้เพื่อจุดประสงค์ในการเรียนรู้ ฉันเขียน lexer และ parser ที่สืบเชื้อสายแบบเรียกซ้ำสำหรับชุดย่อยของภาษาของฉัน (ปัจจุบันฉันสนับสนุนการแสดงออกทางคณิตศาสตร์เช่น+ - * /และวงเล็บ) โปรแกรมแยกวิเคราะห์ส่งกลับต้นไม้ทรีของฉันซึ่งฉันเรียกEvaluateวิธีการรับผลลัพธ์ของนิพจน์ ทุกอย่างทำงานได้ดี นี่คือสถานการณ์ปัจจุบันของฉันโดยประมาณ (ตัวอย่างโค้ดใน C # ถึงแม้ว่าจะเป็นผู้ไม่เชื่อเรื่องภาษามาก): public abstract class Node { public abstract Double Evaluate(); } public class OperationNode : Node { public Node Left { get; set; } private String Operator { get; set; } private Node Right …

3
ฉันจะสำรวจต้นไม้โดยไม่ใช้การเรียกซ้ำได้อย่างไร
ฉันมีขนาดใหญ่มากในทรีโหนดหน่วยความจำและจำเป็นต้องสำรวจทรี การส่งค่าที่ส่งคืนของโหนดชายด์แต่ละโหนดไปยังโหนดพาเรนต์ สิ่งนี้จะต้องทำจนกว่าโหนดทั้งหมดจะมีบับเบิลข้อมูลจนถึงรูตโหนด การสำรวจเส้นทางทำงานเช่นนี้ private Data Execute(Node pNode) { Data[] values = new Data[pNode.Children.Count]; for(int i=0; i < pNode.Children.Count; i++) { values[i] = Execute(pNode.Children[i]); // recursive } return pNode.Process(values); } public void Start(Node pRoot) { Data result = Execute(pRoot); } ใช้งานได้ดี แต่ฉันกังวลว่า call call จะ จำกัด ขนาดของทรีโหนด วิธีการสามารถรหัสถูกเขียนใหม่เพื่อให้ไม่มีการโทร recursive จะExecuteทำ?
19 c#  optimization  trees 

2
ตัวอย่างที่ง่ายที่สุดในการอธิบายความแตกต่างระหว่าง Parse Trees กับ Abstract Syntax Trees คืออะไร
เพื่อความเข้าใจของฉัน parser สร้างต้นไม้แยกวิเคราะห์แล้วทิ้งหลังจากนั้น อย่างไรก็ตามมันยังสามารถโผล่ออกมาจากต้นไม้ไวยากรณ์นามธรรมซึ่งคอมไพเลอร์ควรจะใช้ ฉันอยู่ภายใต้ความประทับใจที่ทั้งต้นไม้แยกและต้นไม้ไวยากรณ์ที่สร้างขึ้นภายใต้ขั้นตอนการแยก ถ้าอย่างนั้นใครจะอธิบายได้ว่าทำไมสิ่งเหล่านี้ถึงแตกต่างกัน
14 parsing  trees 

3
เส้นทางการสั่งซื้อล่วงหน้าเหมือนกับการค้นหาลึกครั้งแรกหรือไม่
ดูเหมือนว่าฉันชอบการสำรวจเส้นทางการสั่งซื้อล่วงหน้าและ DFS เหมือนกันทั้งสองกรณีที่เราสำรวจจากรูทจนถึงสาขาซ้ายและกลับไปที่รูทจากนั้นไปยังสาขาที่ถูกเรียกซ้ำ โปรดแก้ไขให้ฉันได้ไหมถ้าฉันผิด? ขอบคุณล่วงหน้า!

5
ฉันจะสร้าง jtree ที่ไม่แน่นอนและหลากหลายได้อย่างไรกับโหนดหมวดหมู่ตามอำเภอใจ / ทั่วไป?
โปรดทราบ: ฉันไม่ต้องการความช่วยเหลือในการเขียนโปรแกรมที่นี่ฉันเปิดProgrammersเพื่อเหตุผล ฉันต้องการพัฒนาทักษะการวางแผนโปรแกรม / การเขียนของฉันไม่ใช่แค่เข้าใจ Javaเท่านั้น ฉันพยายามที่จะคิดออกว่าจะทำให้ต้นไม้ที่มีระบบหมวดหมู่โดยพลการบนพื้นฐานของทักษะที่ระบุไว้สำหรับเกมสวมบทบาทนี้ที่นี่ ความพยายามครั้งก่อนของฉันมีบูลว่าทักษะนั้นเป็นหมวดหมู่หรือไม่ พยายามรหัสรอบที่ยุ่ง การวาดต้นไม้ของฉันฉันสังเกตเห็นว่า 'ใบไม้' ของฉันเป็นทักษะเท่านั้น สิ่งที่ฉันตามมาคือวิธีในการสร้างทรีที่พยายามแยกโมเดลและมุมมองและอนุญาตให้เพิ่มโหนดย่อยประเภทลูก (โดยมีวิธีการแก้ไข / เรนเดอร์แยกต่างหาก) ให้กับผู้ปกครองโดยพลการ NB ซื้อทุกอย่างที่นี่เป็นทักษะแม้ในที่ที่ดูเหมือนว่าเป็นทรัพย์สิน ผู้ใช้จะเห็นว่านี่เป็นทักษะการซื้อ (ซึ่งพวกเขาทำบนกระดาษ ATM) ดังนั้นจึงควรแสดงเช่นนี้ทั้งหมดในหน้าเดียวกัน คำอธิบายของต้นไม้:ต้นไม้ 'เกิด' พร้อมชุดหมวดหมู่ระดับสูงที่มีการเข้ารหัสอย่างหนัก ( อาวุธ, ร่างกายและจิตใจ, การแพทย์และอื่น ๆ ) จากนี้ผู้ใช้จะต้องสามารถเพิ่มทักษะ ในที่สุดพวกเขาต้องการเพิ่มทักษะ 'ความเชี่ยวชาญพิเศษด้วยดาบ' ( ไม่ใช่ไอเท็ม) เป็นต้น จะทำอย่างไรเพื่อให้คุณนึกคิดต้องการคลิก 'เพิ่ม' กับWeaponsที่เลือกแล้วเลือกOne-handedจากโหนด ComboBox ที่ปรากฏในเด็กนั้นแล้วคลิกเพิ่มอีกครั้งและใส่ชื่อในช่องข้อความในว่าเด็กโหนดที่ปรากฏ จากนั้นคลิกเพิ่มอีกครั้งเพื่อเพิ่ม / ระบุ 'ระดับ' หรือ 'ระดับ' สำหรับลีฟนั้น …

5
Quadtree พร้อมรายการที่ซ้ำกัน
ฉันกำลังใช้ควอดทรี สำหรับผู้ที่ไม่ทราบโครงสร้างข้อมูลนี้ฉันรวมถึงคำอธิบายเล็ก ๆ ต่อไปนี้: ควอดทรีที่มีโครงสร้างข้อมูลและอยู่ในระนาบแบบยุคลิดสิ่งที่ octree อยู่ในพื้นที่ 3 มิติ การใช้ควอดทรีทั่วไปคือการจัดทำดัชนีเชิงพื้นที่ เพื่อสรุปการทำงานของมัน quadtree คือชุดของรูปสี่เหลี่ยมที่นี่ด้วยความจุสูงสุดและกล่องขอบเขตเริ่มต้น เมื่อพยายามที่จะแทรกองค์ประกอบลงในควอดทรีซึ่งมีความจุมากที่สุดควอดทรีจะถูกแบ่งออกเป็น 4 ควอดทรี (การแสดงทางเรขาคณิตซึ่งจะมีพื้นที่เล็กกว่าต้นไม้สี่เท่าก่อนแทรก); แต่ละองค์ประกอบมีการกระจายใน subtrees ตามตำแหน่งของมันคือ มุมบนซ้ายถูกผูกไว้เมื่อทำงานกับสี่เหลี่ยม ดังนั้นควอดทรีเป็นทั้งใบและมีองค์ประกอบน้อยกว่าความสามารถของมันหรือต้นไม้ที่มี 4 ควอดทรีเป็นเด็ก ๆ ความกังวลของฉันคือถ้าคุณพยายามเพิ่มรายการที่ซ้ำกันอาจเป็นองค์ประกอบเดียวกันหลายครั้งหรือหลายองค์ประกอบที่มีตำแหน่งเดียวกัน quadtrees มีปัญหาพื้นฐานในการจัดการกับขอบ ตัวอย่างเช่นถ้าคุณทำงานกับควอดทรีที่มีความจุ 1 และหน่วยสี่เหลี่ยมผืนผ้าเป็นกล่องขอบเขต: [(0,0),(0,1),(1,1),(1,0)] และคุณลองแทรกสี่เหลี่ยมสองอันบนขอบเขตซ้ายบนซึ่งเป็นจุดกำเนิด: (หรือในทำนองเดียวกันถ้าคุณลองแทรก N + 1 ครั้งในควอดทรีที่มีความจุ N> 1) quadtree->insert(0.0, 0.0, 0.1, 0.1) quadtree->insert(0.0, 0.0, 0.1, 0.1) ส่วนแทรกครั้งแรกจะไม่มีปัญหา: แต่เมื่อแทรกครั้งแรกจะก่อให้เกิดการแบ่ง …

4
วิธีที่มีประสิทธิภาพที่สุดในการสร้างการสืบทอดทั้งหมดของโหนดทั้งหมดในทรี
ฉันกำลังมองหาอัลกอริทึมที่มีประสิทธิภาพที่สุดในการดึงทรี (จัดเก็บเป็นรายการขอบหรือเป็นรายการของการแมปจากโหนดแม่ไปยังรายการโหนดย่อย) และสร้างสำหรับโหนด EVERY รายการของโหนดทั้งหมดที่สืบเชื้อสายมาจากมัน (ระดับใบและระดับที่ไม่ใช่ใบ) การดำเนินการจะต้องผ่านลูปแทนการผสมเนื่องจากขนาด และควรเป็น O (N) คำถาม SO นี้ครอบคลุมโซลูชันมาตรฐานที่เห็นได้ชัดเจนพอสมควรสำหรับการค้นหาคำตอบสำหรับหนึ่งโหนดในทรี แต่เห็นได้ชัดว่าการทำซ้ำอัลกอริทึมนั้นในโหนดต้นไม้ทุกโหนดไม่มีประสิทธิภาพสูง (จากส่วนหัวของฉัน O (NlogN) ถึง O (N ^ 2) รู้จักรากของต้นไม้ ต้นไม้มีรูปร่างตามอำเภอใจอย่างแน่นอน (เช่นไม่ใช่ N-nary ไม่สมดุลในทางใดรูปร่างหรือรูปแบบไม่ลึกสม่ำเสมอ) - บางโหนดมีลูก 1-2 คนบางคนมีลูก 30K ในระดับปฏิบัติ (แม้ว่าจะไม่ส่งผลกระทบต่ออัลกอริทึม) ต้นไม้มีโหนด ~ 100K-200K

1
รูปแบบการสร้างเมนู
ฉันมีปัญหาในการจัดการกับเมนูที่ไม่ได้ใช้ในการกำหนดเส้นทาง ฉันมาจาก Drupal ที่ระบบเมนูจัดการการกำหนดเส้นทางเช่นกัน ดังนั้นการตั้งค่าสถานะที่ใช้งานและสถานะเส้นทางที่ใช้งานจะถูกจัดการโดยเส้นทาง (ที่ทำหน้าที่เป็นระบบการแสดงผลเมนูเช่นกัน) ตอนนี้กรอบ PHP จำนวนมากมีคลาสเราเตอร์ที่จัดการการกำหนดเส้นทาง ดูเหมือนจะเป็นการแยกที่ดีเนื่องจากเมนูไม่ควรระวัง POST || ตัวเลือก || ... คำขอ แต่เมื่อเขียนส่วนหน้าฉันพบว่าตัวเองเขียนโค้ดเมนูยาก หรือเก็บทุกอย่างใน DB และส่งค่าเหล่านั้นไปยังมุมมอง สิ่งที่ฉันไม่ชอบคือวิธีนี้คือคุณกำลังสร้างสำเนาของสิ่งที่คุณเขียนไว้ในเราเตอร์ แต่ตอนนี้ใช้คลาสเมนู ตัวอย่าง: Route::get('/somewhere','routename.somewhere','showStuffController'); Route::post('/somewhere','routename.somewhere','saveStuffController'); Menu::add('label.somewhere','routename.somewhere'); คุณกำลังแยกข้อกังวลที่นี่เพื่อที่ดี แต่เมนูขึ้นอยู่อย่างมากในเส้นทางเพื่อตั้งค่าสถานะการใช้งาน เมนูจะต้องรู้เกี่ยวกับลำดับชั้นเพื่อกำหนดเส้นทางการใช้งาน ใช่แล้วการตั้งค่าเทรลแอคทีฟและคลาสสถานะแอคทีฟเป็นเรื่องของมุมมอง แต่มี if ( Route::currentName() === $menuitem->getRouteName() ) { print 'active'; } ทุกมุมมองของคุณดูโง่ ถ้าอย่างนั้นก็ให้เพิ่มแอคทีฟเทรลที่น่ารำคาญหากมันเป็นของจริง การจัดการสิ่งนั้นก่อนที่ภาพจะเรนเดอร์และตั้งค่าสถานะแอคทีฟเทรลให้เป็นจริงเพียง แต่ดูน่าเกลียดในแบบที่ฉันรู้ คำถามของฉันคือ: มีรูปแบบหรือวิธีที่ชาญฉลาดในการทำความสะอาดนี้ดีกว่า ... ? หนึ่งควรจัดการ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.