แจกแจงคู่ของเส้นทางที่แยกออกทั้งหมด


10

ได้รับการกำกับกราฟและสองจุดs , เสื้อ V คู่ของเส้นทางที่เรียบง่ายp 1 , p 2จากsถึงtคือความไม่ต่อเนื่องของขอบหากไม่ได้แบ่งขอบG=(V,E)s,เสื้อVพี1,พี2sเสื้อ

โดยใช้การไหลสูงสุดจึงเป็นเรื่องง่ายที่จะตัดสินใจว่ามีคู่ของเส้นทางเคลื่อนจากขอบไปที ตอนนี้มีอัลกอริธึมการหน่วงเวลาแบบพหุนามในการแจกแจงคู่ของขอบ disjoint path จากsถึงtหรือไม่?sเสื้อsเสื้อ


1
ไม่เนื่องจากอาจมีหลายเส้นทางเช่นนี้
Kaveh

6
@Kaveh: ฉันคิดว่า "อัลกอริทึมการหน่วงเวลาแบบโพลิโนเมียล" นั้นได้รับอนุญาตให้ใช้เวลาเอ็กซ์โพเนนเชียลตราบใดที่การหน่วงเวลาระหว่างเอาต์พุตนั้นมีความยาวแบบพหุนาม ตัวอย่างเช่นมีอัลกอริทึมการหน่วงเวลาแบบโพลิโนเมียลซึ่งแสดงรายการกลุ่มเป้าหมายสูงสุดทั้งหมดในลำดับที่เพิ่มขึ้นแม้ว่าจำนวนกลุ่มเป้าหมายสูงสุดจะเป็นแบบเอ็กซ์โพเนนเชียล
Robin Kothari

3
เป็นไปได้หรือไม่ที่จะรวมคำอธิบายเกี่ยวกับความล่าช้าของพหุนามในคำถาม ฉันไม่คุ้นเคยกับมันจนกว่าฉันจะอ่านความคิดเห็นของโรบิน
Artem Kaznatcheev

@ Robin คุณพูดถูกฉันไม่สนใจคำว่า "ล่าช้า"
Kaveh

คำตอบ:


6

ฉันเชื่อว่าคำตอบของ Artem Kaznatcheev นั้นถูกต้อง แต่มันไม่ได้ให้พื้นที่พหุนาม ดังนั้นนี่คือวิธีการที่แตกต่างกันซึ่งควรจะทำงานได้ดีขึ้นเล็กน้อยในแง่นั้น

การใช้การไหลสูงสุดนั้นเป็นไปได้ที่จะแก้ปัญหาทั่วไปได้เล็กน้อยมากขึ้น: หาคู่ของรอยแยกขอบจากสองจุดยอด {s1, s2} ไปยังจุดยอดคู่อื่น {t1, t2} แต่ไม่มีการควบคุมจุดเชื่อมต่อแหล่งที่มา ไปยังจุดสุดยอดปลายทาง

สมมติว่าเรามีกราฟ G และจุดยอด s1, s2, t1, t2 ซึ่งเราต้องการแสดงรายการคู่ของเส้นทางทั้งหมด ค้นหาคู่ของเส้นทาง P1, P2 และให้ e = (s1, v) เป็นขอบแรกของหนึ่งในเส้นทางเหล่านั้น จากนั้นเราสามารถแบ่งพื้นที่ปัญหาออกเป็นสอง subproblems: คู่ของเส้นทางที่ใช้ e นั้นเหมือนกับเส้นทางจาก {v, s2} ถึง {t1, t2} ใน G-s1 และคู่ของเส้นทางที่ไม่ได้ใช้ e เหมือนกับเส้นทางจาก {s1, s2} ถึง {t1, t2} ใน Ge ชดเชยในปัญหาย่อยทั้งสองนี้และ (เพื่อหลีกเลี่ยงการทำซ้ำ) เพียงรายงานเส้นทางเมื่อคุณอยู่ที่ด้านล่างของการสอบถามซ้ำ


1
เห็นได้ชัดหรือไม่ว่าอัลกอริทึมนั้นมีความล่าช้าแบบพหุนามหากเรารอจนกระทั่งจุดล่างของการเรียกซ้ำ
Artem Kaznatcheev

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

5

นี่เป็นครั้งแรกที่ฉันได้อ่านเกี่ยวกับอัลกอริธึมการหน่วงเวลาพหุนามดังนั้นฉันจึงไม่แน่ใจ 100% สำหรับคำตอบของฉัน แต่ฉันคิดว่าสิ่งต่อไปนี้ควรใช้งานได้

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

กำหนดอัลกอริทึม :F


:F(s,เสื้อ,G,* * * *D)

(ที่นี่ Dหมายถึงการอ้างอิงไปยังโครงสร้างข้อมูล inplace D )* * * *DD

  1. ขั้นตอนวิธีการเรียกใช้โพลีเวลาของคุณสำหรับการกลับมาคู่ของเส้นทางขอบเคลื่อนกับP < Qจากsไปที(P,Q)P<Qsเสื้อ
  2. ถ้าไม่ได้อยู่ในD(P,Q)D

    2.1 แทรกลงในD (และเอาท์พุทถ้าคุณคิดว่าจะส่งออกในขณะที่อัลกอริทึมทำงาน)(P,Q)D

    2.2 สำหรับแต่ละขอบทำงานF ( s , T , G - { ยูวี} , * D )ยูโวลต์E(PQ)F(s,เสื้อ,G-{ยูโวลต์},* * * *D)


ตอนนี้เพื่อระบุเส้นทางทั้งหมดของคุณสร้างที่ว่างเปล่าและแต่ละคู่s , เสื้อV ( G )กับs < T (ถ้ากราฟจะไม่มีทิศทาง, s เสื้ออื่น ๆ ) เรียกF ( s , T , G , * D ) คุณจะส่งออกทุกเส้นทางในครั้งแรกที่คุณเห็นพวกเขาและคุณจะมีโครงสร้างข้อมูลที่สามารถค้นหาได้ที่มีเส้นทางทั้งหมดเมื่อคุณทำเสร็จแล้ว โปรดทราบว่าอัลกอริทึมนี้ยังทำงานในเวลาพหุนามในขนาดของอินพุต + เอาต์พุต (เช่นเดียวกับอัลกอริทึมการหน่วงเวลาพหุนามใด ๆ )Ds,เสื้อV(G)s<เสื้อsเสื้อF(s,เสื้อ,G,* * * *D)

PSPAEPSPAE


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.