เส้นทางที่ไม่ตัดกันสั้นที่สุดสำหรับกราฟที่ฝังอยู่ในระนาบแบบยุคลิด (2D)


14

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

ยกตัวอย่างเช่นในกราฟด้านล่างที่คุณต้องการจะไปจากที่ ) โดยปกติอัลกอริทึมอย่างอัลกอริทึมของ Dijkstra จะสร้างลำดับดังนี้:(0,0)(-3,2)

[(0,0)3(0,3)2(1,2)4(-3,2)]=7+2.

กราฟเต็มรูปแบบ:

ป้อนคำอธิบายรูปภาพที่นี่

เส้นทางที่สั้นที่สุด:

ป้อนคำอธิบายรูปภาพที่นี่

เส้นทางที่ไม่ตัดกันสั้นที่สุด:

ป้อนคำอธิบายรูปภาพที่นี่

อย่างไรก็ตามเส้นทางนี้ตัดกันตัวเองบนระนาบแบบยุคลิดดังนั้นฉันต้องการอัลกอริทึมที่จะให้ลำดับที่ไม่ตัดกันสั้นที่สุดในกรณีนี้:

[(0,0)3(0,3)3(0,6)5(-3,2)]=11

เส้นทางนี้ยาวกว่าเส้นทางที่สั้นที่สุด แต่เป็นเส้นทางที่ไม่ตัดกันสั้นที่สุด

มีอัลกอริทึม (มีประสิทธิภาพ) ที่สามารถทำได้หรือไม่

แหล่ง TikZ

  • กราฟแบบเต็ม
  • เส้นทางที่สั้นที่สุด
  • ที่สั้นที่สุดที่ไม่ได้ตัดเส้นทาง

2
เป็นปัญหาที่ดี! (+1) คุณสามารถพูดอะไรเกี่ยวกับแอปพลิเคชันหรือบริบทที่เกิดปัญหานี้ได้หรือไม่? ฉันรู้สึกทึ่ง (PS ในหมายเหตุที่แยกต่างหาก: วิธีที่ชัดเจนจากปริศนานี้คือการดูว่าคุณสามารถนำจุดยอดใหม่สำหรับทุกจุดแยกได้หรือไม่เช่นทุกจุดที่ขอบหนึ่งสามารถตัดขอบอื่นได้อย่างไรก็ตามฉันตระหนักว่าสำหรับบางแอปพลิเคชั่น / มาก อาจเป็นไปไม่ได้)
DW

2
@DW นี่คือฉัน reformulating ป่วยคำ Babibu ของการเผาไหม้ลา / ปัญหาม้า ; แอปพลิเคชันคืออัลกอริทึมฮิวริสติกแบบปริพันธ์ของเขาแบบยุคลิดผมไม่แน่ใจว่าเขาตั้งใจจะใช้มันอย่างไร แต่ฉันคิดว่าเขาอยากรู้ว่าเขาสามารถหาเส้นทางระหว่างสองจุดได้หรือไม่เมื่อเขาไปเยี่ยมคนอื่น ๆ จะไม่ตัดกัน) และใช่ถ้าคุณสามารถแนะนำโหนดใหม่นั่นจะยอดเยี่ยม แต่คำถามคือถ้าคุณไม่สามารถ (และ ofc คุณไม่สามารถแนะนำเมืองใหม่สำหรับ Euclidean TSP)
Realz Slaw

1
ให้ฉันลองแปลงปัญหาการมีอยู่ของเส้นทางเป็น 3SAT การหาทางข้ามสัญญาณสองทางในขณะที่ไม่ได้ข้ามสองเส้นทางนั้นเป็นความท้าทายที่ยิ่งใหญ่ที่สุด
John Dvorak

1
อ๋อ ฉันหมายถึงการแก้ SAT ผ่านสิ่งนี้
John Dvorak

2
n

คำตอบ:


11

มันเป็น NP-complete ที่จะตัดสินใจว่ามีเส้นทางใด ๆอยู่หรือไม่

เป็นไปได้อย่างชัดเจนว่าการตรวจสอบเส้นทางที่กำหนดเป็นเส้นทางที่ถูกต้องในกราฟที่กำหนด ดังนั้นปัญหาความยาวล้อมรอบอยู่ใน NP และเป็นเซตย่อยของมันปัญหาใด ๆ เส้นทาง

ตอนนี้เพื่อพิสูจน์ความแข็ง NP ของปัญหาวิถีใด ๆ (และปัญหาความยาวล้อมรอบ) ให้ลด SAT-CNF เป็นปัญหานี้:


โครงสร้างทั่วโลกเป็นกริดของชิ้นส่วนลวดที่อยู่ติดกันโดยคอลัมน์ของชิ้นส่วน สูตรลอจิกเป็นที่น่าพอใจถ้ามีเส้นทางที่ไม่ตัดผ่านกราฟ

มันเป็นไปไม่ได้ที่จะข้ามสองชิ้นของเส้นทาง แต่มันเป็นสิ่งจำเป็นที่จะข้ามสองสายตรรกะ แต่เส้นทางการไหลจะได้รับอย่างเคร่งครัด: จุดลวดจะได้รับจากสองโหนด ลำดับของจุดลวดที่ผ่านเส้นทางถูกบังคับโดยการลด ลอจิกถูกแสดงโดยโหนดที่เลือก สามารถเลือกเส้นทางใดก็ได้ตราบใดที่ผ่านจุดลวดทั้งหมด

ในแผนภาพนี้เส้นทางจะถูกแทนด้วยเส้นโค้งสีแดงและการไหลของลอจิกจะแสดงด้วยเส้นลวดสีดำ:

ตะแกรงของสายไฟทางด้านซ้ายคอลัมน์ของส่วนคำสั่งทางด้านขวา

ทีนี้มาสร้างแต่ละองค์ประกอบกัน


การเดินสายใช้สามไทล์: การข้ามจุดแยกและลวดแนวตั้ง เริ่มจากสิ่งที่ยากที่สุด:

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

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

การแสดงกราฟิกด้านบน

จุดแยกและเส้นลวดในแนวตั้งทำงานแบบเดียวกัน แต่มีเส้นทางเชื่อมโยงน้อยลง:

เส้นทางสองคู่นี้เพียงพอแล้ว  ลวดเป็นจุดสำคัญที่สาขาทำลายสาขา

¬A¬B

ป้อนคำอธิบายรูปภาพที่นี่

เป็นไปได้ที่จะสรุปการลดลงนี้เพื่อเข้ารหัสต้นไม้โดยพลการของและและหรือประตูโดยแยกสายการอ่านในวิธีที่แตกต่างกัน โดยเฉพาะอย่างยิ่ง SAT-CNF และ SAT-DNF เป็นไปได้ที่จะลดปัญหาเส้นทางที่ไม่ตัดกันตามวิธีที่อธิบายไว้ข้างต้น


ว้าวคนทำได้ดี ฉันยังไม่ได้ตรวจสอบ แต่งานที่คุณใส่นั้นยอดเยี่ยมมาก
Realz Slaw

ตกลงฉันแค่ต้องการสรุปความเข้าใจของฉัน: การใช้แกดเจ็ตแรกสามารถข้ามคู่พา ธ ที่แท้จริงสองคู่และรักษาเส้นทางที่ใช้ ดังนั้นหนึ่งไม่ต้องกังวลเกี่ยวกับ planarity สำหรับการวางเส้นทาง (เช่น gadget xor ใน PlanarCircuitSat ทำสำหรับวงจร) จากนั้นใช้แกดเจ็ตสุดท้ายผู้ใช้สามารถสร้างคำสั่งแบบลอจิคัลโดยพลการ ถูกต้องหรือไม่
Realz Slaw

ดูเหมือนจะถูกต้อง แต่คุณต้องแน่ใจว่ามีสองสิ่งสำหรับเลย์เอาต์ทั่วไป: คุณสามารถใช้แกดเจ็ตทั้งหมดด้วยพา ธ NIP (ซึ่งควรเป็นไปได้เสมอ - หากมีพา ธ ติดอยู่ตรงกลางคุณสามารถแนะนำแกดเจ็ตสายไฟให้ นำปลายเดียวของเส้นทางมารวมกัน) และเส้นทางทั้งหมดในสายการอ่านข้ามกันในลักษณะที่มันเป็นไปไม่ได้ที่จะย้อนกลับภายในสาย (ดูเหมือนว่าฉันจะรับประกันได้ถ้าไม่มีข้อจริง ( ไม่ข้ามตัวอักษรใด ๆ ) และถ้าประโยคทั้งหมดอยู่ด้านนอกของวงจร (ในหน้าเดียวกันจุดเริ่มต้นและจุดสิ้นสุด)
John Dvorak

ทำให้แน่ใจว่าเส้นทางทั้งหมดในสายการอ่านข้ามกันได้ง่าย - ถ้าคุณต้องการให้แน่ใจเพียงแค่แยกเส้นทางออกจาก n เส้นทางแล้วข้ามมันทั้งหมดทันที ฉันคิดว่านี่ไม่จำเป็นเลย
John Dvorak

1
ฉันใช้ OpenOffice Draw สำหรับโครงสร้างส่วนกลางและ [yEd] (www.yworks.com/products/yed) ที่เหลือ ฉันควรแก้ไขใน (พร้อม<sub>) หรือไม่
John Dvorak

-1

ปัญหาดูเหมือนว่าจะถึงวันที่ Turan 1944 ดูเหมือนว่าการสำรวจที่ดีของทฤษฎีและอัลกอริทึมจำนวนข้ามกราฟ: ทฤษฎีและการคำนวณโดย Mutzel วิกิพีเดียมีข้อมูลบางส่วนภายใต้จำนวนข้ามกราฟ


1
บางทีนี่อาจจะดีกว่าเป็นความคิดเห็น?
Juho

มันตอบคำถามทางวิทยาศาสตร์พื้นฐานว่า "คุณใช้อัลกอริธึมแบบไหน"
vzn

1
ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
John Dvorak

jan อ้างการอ้างอิงจาก meta ของ stackexchange ในขณะที่มันเป็นความคิดที่ถูกต้องบทบาทของการอ้างอิงในวิทยาศาสตร์ / คณิตศาสตร์นั้นแตกต่างจากไซต์เคล็ดลับการเขียนโปรแกรม .... [ยอมรับกันว่าการอ้างอิงไม่พร้อมใช้งานสำหรับฉันในปัจจุบันสำหรับคำตอบที่ละเอียดยิ่งขึ้น] .. อย่างไรก็ตามมันเป็นไปได้ Jans ก่อสร้างในขณะที่มีประโยชน์ / คุ้มค่าที่มีอยู่แล้วในวรรณคดีและในด้านวิทยาศาสตร์เป็นส่วนหนึ่งของกระบวนการมาตรฐาน / วิธีปฏิบัติที่ดีที่สุดที่จะ [พยายามที่จะ] ค้นหามัน ....
vzn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.