ฉันจะสร้างต้นไม้ทอดข้ามความสูงได้อย่างไร


9

สำหรับโครงการที่ฉันกำลังดำเนินการอยู่ฉันควรสร้างต้นสแปนแบบสุ่มที่มีความสูงล้อมรอบ

โดยพื้นฐานแล้วฉันจะทำสิ่งต่อไปนี้: 1) สร้างทรีสแปนนิ่ง 2) ตรวจสอบความเป็นไปได้ถ้าเก็บไว้ได้

1) เริ่มต้นจากต้นไม้ที่ขยายน้อยที่สุด (Prim's หรือ Kruskal's) ฉันเพิ่มขอบที่ไม่มีอยู่แล้วและนี่เป็นการสร้างรอบฉันตรวจพบรอบนี้และลบหนึ่งในขอบของรอบนี้ที่ให้ต้นไม้ทอดใหม่และดำเนินการต่อด้วย ต้นไม้ที่ขยายออกไปนี้โดยการเพิ่มขอบใหม่ ...

2) สมมติว่ามีจุดสุดยอดพิเศษ vcenter. สำหรับทุกจุดสุดยอดvความยาวของเส้นทางจาก v ถึง Vcenter ควรจะน้อยกว่านั้น δที่ไหน δ เป็นพารามิเตอร์ที่กำหนด

มีวิธีที่ดีกว่า (ฉลาด) ในการทำเช่นนี้?

ป.ล. ฉันลืมระบุข้อ จำกัด อื่น ๆ (ความผิดพลาดของฉัน): ระดับของจุดยอดควรถูก จำกัด ขอบเขตด้วย


ฉันไม่แน่ใจว่าฉันได้รับสิทธินี้หรือไม่ ในขั้นตอนแรกคุณเอาขอบออกแบบสุ่มหรือเพื่อลดความสูงของต้นไม้ (อาจ) หรือไม่?
ซาชา

ฉันเพิ่มและลบขอบแบบสุ่ม
Arman

คุณช่วยสุ่มเส้นทางที่สั้นที่สุดที่ทอดข้ามต้นไม้แทนได้หรือไม่? มันลดความซับซ้อนของสิ่งต่าง ๆ
Yaroslav Bulatov

คุณมีค่าใช้จ่ายที่ขอบหรือไม่? คุณกำลังมองหาต้นสแปนที่มีความสูงหรือไม่δและค่าใช้จ่ายขั้นต่ำ? ตามที่ @pboothe เขียนคุณสามารถใช้ BFS ได้ ปัญหาเดียวคือ BFS ใช้หน่วยความจำมากเกินไป หากคุณสนใจเรื่องค่าใช้จ่ายคุณสามารถลองใช้อัลกอริทึมในวิกิพีเดียสำหรับต้นยูคาลิเดียนขั้นต่ำที่ครอบคลุม ( en.wikipedia.org/wiki/Euclidean_minimum_spanning_tree ) มันมีเวลาทำงานของO(nเข้าสู่ระบบn) กับ O(n)ของพื้นที่
Marcos Villagra

ดังนั้นปัญหาของคุณมีสามขอบเขตที่ จำกัด : ความสูงของต้นไม้, ระดับของแต่ละจุดยอดและระยะทางจาก v_center, จริงไหม? เพียงแค่ข้อ จำกัด ระดับขอบเขตทำให้ตัวปัญหา NP- ยาก แต่ฉันคิดว่าคุณกำลังมองหาวิธีที่มีแนวโน้มที่จะสร้างวิธีการแก้ปัญหาได้อย่างรวดเร็วและไม่ใช่อัลกอริทึมที่แน่นอน
Jagadish

คำตอบ:


7

เมื่อไม่กี่ปีที่ผ่านมาฉันกำลังทำงานกับต้นไม้ที่ทอดลึกลงไปพวกเขาน่าสนใจมาก เพื่อนร่วมงานของฉันบางคนเกิดอัลกอริธึมการส่งข้อความที่ทำได้ดี แต่ฉันไม่สามารถหารหัสใด ๆ ได้ เราเขียนมันขึ้นมาในรูปแบบฟิสิกส์ที่นี่: http://iopscience.iop.org/1742-5468/2009/12/P12010/ พวกเขาบอกฉันว่ามันใช้งานได้กับขอบเขตการศึกษาระดับปริญญาแม้ว่าจะไม่ได้ลงในกระดาษ

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

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


2
รายละเอียดเพิ่มเติมรวมทั้งภาพยนตร์: healthyalgorithms.wordpress.com/2010/12/23/…
Abraham Flaxman

3

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

อย่างไรก็ตามฉันไม่แน่ใจว่าอัลกอริทึมที่คุณอธิบายจะสร้างแผนผังสแปนแบบสุ่มหรือไม่ ฉันอยากจะแนะนำให้ดูอัลกอริธึมมาตรฐานแทน อัลกอริธึมมีสองขั้นตอน: อัลกอริธึมของวิลสันและอัลกอริธึม คุณสามารถดูได้ที่นี่ มีอัลกอริธึมที่ใหม่กว่า (การประมาณ) แต่มันค่อนข้างซับซ้อน

นอกจากนี้อาจมีวิธีในการสร้างต้นไม้ทอดซึ่งมีความสูงโดยตรง แต่ฉันไม่เคยได้ยินเกี่ยวกับอัลกอริทึมดังกล่าว


1

ใช้การค้นหาความกว้างแรก! ทำ BFS จากทุก ๆ จุดสุดยอดในกราฟเลือกต้นไม้ผลลัพธ์ที่มีความสูงน้อยที่สุด BFS จะค้นหาเส้นทางจากรูทไปยังจุดสุดยอดอื่น ๆ ด้วยฮอปที่น้อยที่สุดเสมอ


คุณพูดถูก เราเริ่มทำกับ BFS แต่มันไม่ได้ผลเพราะข้อ จำกัด ด้านองศาของจุดยอด ฉันลืมที่จะพูดถึงข้อ จำกัด นี้ (ความผิดพลาดของฉัน): ระดับของจุดยอดในต้นไม้ที่สร้างขึ้นควรถูก จำกัด ขอบเขตด้วย คำตอบของคุณถูกต้องกับคำถามปัจจุบัน แต่ฉันคิดว่าฉันควรแก้ไขคำถามของฉัน
Arman

ปัญหาของคุณก็คือ NPC โดยการลดระดับ Spanning Tree - ปริญญาตรี - en.wikipedia.org/wiki/Degree-constrained_spanning_tree
Peter Boothe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.