กราฟย่อยที่มีโหนดและขอบทั้งหมดที่เป็นส่วนหนึ่งของเส้นทางเซนต์แบบง่าย ๆ ที่มีความยาว จำกัด ในกราฟที่ไม่มีทิศทาง


12

ค่อนข้างคล้ายกับของฉันคำถามโพสต์ก่อนหน้านี้ อย่างไรก็ตามในเวลานี้กราฟจะไม่ถูกนำไปใช้

ป.ร. ให้ไว้

  • ไม่มีทิศทางกราฟไม่มีหลายขอบหรือลูปG
  • จุดยอดแหล่ง ,s
  • จุดยอดเป้าหมาย ,t
  • ความยาวเส้นทางสูงสุด ,l

ฉันกำลังมองหา - เป็น subgraph ของGที่มีจุดสุดยอดใด ๆ และขอบใด ๆ ในG (และเฉพาะผู้) ที่เป็นส่วนหนึ่งของเส้นทางที่ง่ายอย่างน้อยหนึ่งจากsไปทีมีความยาวลิตรGGGstl

หมายเหตุ:

  • ฉันไม่จำเป็นต้องระบุเส้นทาง
  • ฉันกำลังมองหาอัลกอริทึมที่มีประสิทธิภาพ (ทั้งเวลาและหน่วยความจำ) เนื่องจากฉันต้องดำเนินการกับกราฟที่มีขนาดใหญ่มาก (10 ^ 8 จุดยอด, 10 ^ 9 ขอบ)

ลองดู. พบกระดาษนี้ซึ่งดูเหมือนว่าจะลดการไหลของต้นทุนขั้นต่ำที่คล้ายกัน แต่ใช้ลักษณะพิเศษของเครือข่ายเพื่อแก้ปัญหาได้เร็วขึ้นแล้วจากอัลกอริทึม MCF ทั่วไป
RB

คำตอบ:


6

ปัญหาอยู่ที่หลังจากทั้งหมด ฉันจะให้คำตอบก่อนหน้าในขณะที่มันยังสามารถใช้ได้กับกรณีที่ผู้กำกับ (ซึ่งเป็น NPC เป็นคำตอบในคำถามอื่น ๆ ) และแสดงให้เห็นว่ามันเป็นF P Tด้วยความเคารพต่อลิตรPFPTl

ในกรณีที่ไม่ได้บอกทิศทางมันสามารถแก้ไขได้กำหนดผ่านการไหลของต้นทุนต่ำสุด (สิ่งนี้อาจใช้ไม่ได้กับเครื่องชั่งที่คุณอ้างถึงในคำถาม แต่ดีกว่าอัลกอริธึมแบบเอ็กซ์โปเนนเชียล

ขั้นตอนต่อไปนี้จะตัดสินว่าขอบบางควรเป็นส่วนหนึ่งของกราฟผลลัพธ์หรือไม่ เพื่อที่จะตอบปัญหาเดิมเพียงแค่วนรอบขอบทั้งหมดe=(u,v)E

ในการสร้างเครือข่ายการไหลให้ทำดังนี้:

ขั้นตอนที่ 1: ขยายเพื่อให้จุดสุดยอดx eและแทนที่eด้วยขอบ( u , x e ) , ( x e , u ) , ( v , x e ) , ( x e , v ) (พวกเขาถูกชี้นำเป็น ส่วนหนึ่งของเครือข่ายการไหล) ตั้งค่าเป็น 0exee(u,xe),(xe,u),(v,xe),(xe,v)

ขั้นตอนที่ 2: เปลี่ยนทุกจุดสุดยอดยกเว้นx อีสองจุดT -และT +และเพิ่มขอบ( T - , เสื้อ+ ) กำหนดค่าขอบเหล่านี้เป็น 1txett+(t,t+)

ขั้นตอนที่ 3: แทนที่ของทุกขอบกับขอบ( + , - ) , ( B + , - ) กำหนดค่าขอบเหล่านี้เป็น 0{a,b}E(a+,b),(b+,a)

ขั้นตอนที่ 4: เพิ่มใหม่ยอดและเพิ่มขอบ( s , Y E ) , ( T , Y อี )ที่มีค่าใช้จ่าย 0ye(s,ye),(t,ye)

ขั้นตอนที่ 5: ตั้งค่าความจุทั้งหมดเป็น 1

ตอนนี้ใช้อัลกอริทึมนาทีไหลค่าใช้จ่ายในการค้นหาสำหรับการไหลของมูลค่า 2 จากเพื่อYอีxeye


วิเคราะห์:

  • ทุก 2 มูลค่าไหลจากเพื่อY อีเป็นสหภาพของเส้นทางx อีs Y อีและเส้นทางx อีเสื้อYอีxeyexesyexetye
  • เส้นทางมีเคล็ดเนื่องจากทุกจุดสุดยอดมีเพียง 1 ความจุใน( T - , เสื้อ+ )โค้งt(t,t+)
  • เส้นทางที่ส่งคืนเป็นเส้นทางสองเส้นทางที่มีระยะทางรวมน้อยที่สุดและนั่นก็เป็นต้นทุนของการไหลที่พบ สิ่งนี้ทำให้เราสามารถเพิ่มไปยังกราฟผลลัพธ์หรือลบอย่างอื่นได้e

1
มันง่ายกว่าที่จะเข้าใจข้อโต้แย้งในคำตอบข้างต้นโดยดึงการลดลงไปสู่การไหลโดยตรง มีเส้นทางที่เรียบง่ายจากการเป็นการทีมีโหนดวี IFF มีเส้นทางPจากโวลต์เพื่อsและเส้นทางQจากโวลต์เพื่อtเช่นที่PและQเป็นโหนดเคล็ดยกเว้นที่วี สิ่งนี้ใช้ความไม่พึงประสงค์ สามารถตรวจสอบได้ผ่านโฟลว์และรุ่นต้นทุนสามารถทำได้ผ่านโฟลว์ราคาต่ำสุด หนึ่งสามารถตรวจสอบว่ามีเส้นทางที่เรียบง่ายจากsถึงtที่มีestvPvsQvtPQvsteโดยการแนะนำโหนดในช่วงกลางของอีe
จันทรา Chekuri

@ChandraChekuri - ถูกต้อง แต่พึงระลึกไว้เสมอว่าหากปัญหาไม่มีข้อ จำกัด เรื่องความยาวมีอัลกอริธึมที่ง่ายกว่าสำหรับการตัดสินใจ - ดูที่นี่
RB

แน่นอนว่าฉันตระหนักถึงวิธีการแก้ปัญหาเช่นกัน - โดยหลักการแล้วมันเป็นเรื่องดีที่จะเข้าใจส่วนประกอบที่เชื่อมต่อผ่านเส้นทางที่แยกจากกันแม้ว่าจะพบจุดตัดและจุดเชื่อมต่อโดยตรงผ่านทาง DFS
จันทรา Chekuri

@RB: ขอบคุณ algorihm ที่แนะนำอาจมีประสิทธิภาพเมื่อ l มีขนาดค่อนข้างใหญ่ แต่มันอาจไม่ดีสำหรับค่า l ที่ค่อนข้างเล็ก ฉันเดาว่าฉันสามารถตัด G ก่อนด้วยการเอาจุดสุดยอดออกไปไกลกว่าพื้น (l / 2) จาก s และ ceil (l / 2) จาก t
Lior Kogan

1
yyyexey

1

stst

O(|V|+|E|)

sVssdist(s,v)vVstVttVsolution={v:vVsVt,dist(s,v)+dist(t,v)}E[Vsolution]=(v,u)E:u,vVsolution

O(|V|+|E|)O(|Vs|+|Vt|+|E[Vs]|+|E[Vt]|)st มีขนาดเล็ก

st/2


3
tusvxl=4vv

ขอบคุณสำหรับการแก้ไข @RB ฉันแก้ไขคำตอบเพื่อทราบว่ามันผิด
mobius dumpling

1

นี่เป็นความคิดเห็น แต่มีความยาวเกินกว่าจะโพสต์เป็นความคิดเห็นได้

G=(V,E)H=(V,E)H=(V,E,w)

O(n4/3)O(n4/3)O(n4/3)

หากฟังดูมีประโยชน์ฉันสามารถลองขุดสิ่งปลูกสร้างที่เกี่ยวข้องให้กับคุณได้

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