Super Mario Flows ใน NP?


15

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

ฉันสนใจในส่วนขยายของรุ่นนี้ที่ขอบมีพารามิเตอร์ "ช่วงชีวิต" ตัวที่สาม ถ้าโค้งมีช่วงชีวิตและเสื้อเป็นเวลาที่เร็วที่สุดที่ไหลในเชิงบวกจะถูกส่งผ่านโค้งแล้วเราทำลายโค้งในเวลาT + คุณอาจคิดว่านี่เป็นเหมือนแพลตฟอร์มใน Super Mario Brothers ที่พังทลาย / ถูกทำลายไม่นานหลังจากที่คุณเหยียบพวกเขาหรือคุณอาจคิดว่ามันเป็นแบตเตอรี่ที่จำเป็นสำหรับการขับเคลื่อนขอบซึ่งไม่สามารถปิดได้หลังจากเปิดใช้งาน . ( แก้ไข :) ปัญหาการตัดสินใจคือเมื่อกำหนดค่าการไหลของขอบเขตล่างBให้ว่าจะสามารถกำหนดตารางการประชุมได้หรือไม่ทั้งขอบเขตบนขอบฟ้าเวลาและค่าขอบเขตการไหลต่ำกว่าtt+B

จนถึงตอนนี้ฉันจะเห็นว่าปัญหานี้เป็นปัญหาที่รุนแรงมาก (ผ่าน 3 พาร์ติชัน) แต่ฉันไม่รู้จริง ๆ ว่าอยู่ใน NP: มีการรับประกันวิธีแสดงวิธีแก้ปัญหาดาน ๆ หรือไม่? ในรุ่นคลาสสิกการไหลที่ดีที่สุดแบบพิเศษบางอย่างถูกใช้เพื่อหลีกเลี่ยงปัญหานี้

หมายเหตุ: โมเดลด้านบนนั้นมีการขีดเส้นใต้เล็กน้อยเนื่องจากคุณอาจอนุญาตหรือไม่อนุญาตการสะสมของโฟลว์ที่โหนดและคุณอาจมีโมเดลแบบแยกเวลาหรือแบบต่อเนื่อง การแก้ไขคำถามสำหรับโมเดลเหล่านี้จะดีมาก


1
ฉันไม่แน่ใจว่าฉันเข้าใจ เหตุใดจึงมีปัญหาในการแสดงแผนการไหลที่เฉพาะเจาะจงอย่างกะทัดรัดและตรวจสอบว่าการไหลรวมอย่างน้อย F ในเวลาโพลี?
Suresh Venkat

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

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

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

1
@daveagp: คุณลองใช้ PSPACE-hardness เช่นการลด QBF ให้กับปัญหาของคุณหรือไม่?
โยชิโอะโอกาโมโตะ

คำตอบ:


13

มันนานมากแล้ว แต่ฉันค่อนข้างมั่นใจว่าปัญหานี้อยู่ใน P.

ฉันเขียนวิทยานิพนธ์ระดับปริญญาเอกของฉันเกี่ยวกับเรื่องนี้ในปี 1995 ดู "อัลกอริธึมการไหลของเครือข่ายแบบไดนามิกที่มีประสิทธิภาพ" โดย Bruce Hoppe ที่ส่งไปยังฝ่าย Cornell CS ออนไลน์ที่http://dspace.library.cornell.edu/bitstream/1813/7181/1/95-1524.pdf

ดูบทที่ 8 "ส่วนขยาย" ส่วนที่ 8.1 เกี่ยวกับ "ขอบมนุษย์"


3
"มันเป็นคืนที่มืดมนและมีพายุแจ็คนอนนิ่งอยู่ในกระท่อมของเขา - ไม่ขยับเขยื้อนยกเว้นท้องของเขาซึ่งกำลังปั่นป่วนอยู่ในอุทรของเขาเหมือนกับการนั่งรื่นเริงที่บ้าคลั่ง ... " (หน้าสิบสามที่ผู้เขียนกล่าวถึงการใช้งานจริง)
Neal Young

คำพูดดีนีโอ! :) BTW daveagp ทำให้เป็นจุดที่ดีเกี่ยวกับการต้องการพื้นที่หลอก - พหุนามในการจัดเก็บ "การไหล" ที่ตอบคำถามการตัดสินใจ วิธีที่จะไม่เพียง แต่หาการไหลที่ดีที่สุด แต่ยังเป็นตัวแทนของการไหลใน P เป็นบทที่ 1-7 ของวิทยานิพนธ์ของฉัน
Bruce Hoppe

ยอดเยี่ยม ในที่สุดฉันก็อ่านทั้งหมดนี้ เมื่อเราแก้ไขการไหลของเวลาครั้งแรกที่ได้รับการพิสูจน์ความเป็นไปได้ของเครือข่ายที่มีเวลาเริ่มต้นและสิ้นสุดที่เป็นผลลัพธ์คือ P (สมมติว่าอนุญาตให้มีการพักแรม) และดังนั้นปัญหาดั้งเดิมคือ NP: ใบรับรองขนาดพหุนามของเราแสดงเวลาเริ่มต้น แต่ละขอบ ซูเปอร์มาริโอจึงไหล NP- อย่างสมบูรณ์ คำถามแบบสุ่ม: การห้ามไม่ให้โฮลดิ้งเปลี่ยนแปลงอะไรหรือไม่? มีอัลกอริทึมการประมาณที่เหมาะสมหรือไม่?
daveagp

2

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

หมายเหตุ: วิธีการนี้อาจซับซ้อนหรือไม่ถูกต้อง แม้ว่าฉันจะพยายามตรวจสอบและเขียนมันอย่างระมัดระวัง - ฉันไม่ได้ใช้เวลามากมายกับมัน

สมมติว่าไม่อนุญาตให้มีการสะสมคลังสินค้าเช่นการไหลจะต้องมีการโอนทันที ให้แทนจำนวนขอบและNความยาวของอินพุต ฉันไม่ได้ระบุเวลาต่อเนื่องหรือไม่ต่อเนื่องเนื่องจากฉันไม่ได้พิจารณา มันควรใช้กับความคิดที่ไม่ต่อเนื่องเพื่อความต่อเนื่องฉันแน่ใจว่าmN

จากนั้นเราสามารถอธิบายการแก้ปัญหาเป็นชุดของ "เส้นทางกระแส" จากแหล่งที่จะจม เส้นทางไหลเป็นสี่เท่าซึ่งประกอบด้วยดังต่อไปนี้: เส้นทางที่เรียบง่ายPจากแหล่งที่จะจม; เวลาเริ่มต้นของเส้นทางการไหลs ; ปริมาณการไหลผ่านเส้นทางa ; การส่งผ่านอัตราR(P,s,a,r)Psar

ปล่อยให้วิธีแก้ปัญหาถูกกำหนดโดยชุดของเส้นทางการไหล เราสามารถตรวจสอบได้ว่าการแก้ปัญหาที่กำหนดโดยการไหลของเส้นทางเหล่านี้ถูกต้องในเวลาพหุนามใน| F | และN :F|F|N

  • ทุกขอบและช่วงเวลาของเวลาทีเพิ่มขึ้นอัตราการทำงานของทุกเส้นทางกระแสไปกว่าอีในเวลาที ทุกเส้นทางการไหลมีเวลาเริ่มต้นและสิ้นสุดดังนั้นเราจึงจะต้องพิจารณาช่วงเวลาของเวลาเมื่อเส้นทางการไหลของการเริ่มต้นหรือสิ้นสุดลง (ระหว่างการเปลี่ยนแปลงเหล่านี้ในช่วงเวลาที่ไม่มีอะไรเกี่ยวกับการที่มีเส้นทางไหลไปที่ขอบอีetete
  • สำหรับทุกการไหลของเส้นทางเราสามารถตรวจสอบว่าการไหลทั้งหมดมาถึงที่อ่างก่อนเวลาหรือไม่T
  • สำหรับทุก ๆ ขอบเราสามารถตรวจสอบว่าเส้นทางการไหลผ่านหลังจากที่มันถูกทำลายหรือไม่
  • ขอบเขตล่างของการไหลเราสามารถตรวจสอบได้โดยเพิ่มปริมาณการไหลของเส้นทางการไหลB

ตอนนี้เรา 'เพียง' จำเป็นที่จะต้องแสดงให้เห็นว่าจำนวนเส้นทางไหลเป็นพหุนามในNN

สำหรับวิธีการแก้ปัญหาที่กำหนดเราสามารถกำหนดเวลาที่การไหลผ่านขอบและเมื่อขอบถูกทำลาย แปลงสิ่งนี้เป็นปัญหาด้วยวิธีแก้ปัญหาที่เทียบเท่า: มีขอบแข็งบนแต่ละขอบเมื่อสามารถใช้งานได้และเมื่อไม่มี - เวลาเริ่มต้นและสิ้นสุด Let แสดงชุดของเวลาทั้งหมดเหล่านี้{t1,...,tk}

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

ค้นหาเส้นทางการไหลที่เริ่มต้นและสิ้นสุดระหว่างและt j , i < jแต่ไม่ได้จบระหว่างt pและใด ๆtitji<jtptq[tp,tq][ti,tj]Fi,jtjtj

[i,j][ti,tj][ti+1,tj1]|Fs,t|m

Fti,tjti+1tj1

i,j[k]|Fi,j|cm3c


สำหรับฉันการแบ่งแยกที่ดูผิดพลาดฉันจะลองยกตัวอย่างการนับตัวอย่าง สมมติว่าเครือข่ายเป็นเพียงแหล่งเดียว -> sink edge ของความจุ 100, ล่าช้า 0, อายุการใช้งาน 100 ลองพิจารณากำหนดการไหลนี้: ในช่วงเวลา [0, 1) ส่งโฟลว์ในอัตรา 1; ใน [1, 2) ในอัตรา 2 และสูงถึง 100 ใน [99, 100) การย่อยสลายใด ๆ ต้องการ> = 100 เส้นทาง - กระแสซึ่งขัดแย้งกับการอ้างสิทธิ์ของคุณเมื่อฉันเข้าใจ ฉันควรพูดถึงว่าฟอร์ดและฟอล์กเกอร์สันหลีกเลี่ยงอุปสรรคนี้ในการแก้ปัญหาแบบคลาสสิกของพวกเขา (โดยไม่มีช่วงชีวิต) โดยพิจารณาถึงวิธีการแก้ปัญหาที่เหมาะสมที่สุดโดยเฉพาะ
daveagp

นี่อาจจะสามารถหลีกเลี่ยงได้โดยเพิ่มการไหลของ 'อายุขัย' ให้สูงสุด แต่ก็มีปัญหาอีกข้อหนึ่งในการพิสูจน์ฉันได้แก้ไขมันเพื่อให้ชัดเจน
Ruub

1

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


ฉันไม่เข้าใจว่าการเรียกร้องของคุณคืออะไร
Tsuyoshi Ito

ฉันไม่คิดว่ามันถูกต้อง ตัวอย่างเช่นลองนึกภาพเครือข่ายที่มีสามโหนดคือต้นกำเนิด s, เทอร์มินัล t และอีกโหนดหนึ่ง v ที่มีสามอาร์ค a1 = (s, v), a2 = (s, v), a3 = (v, t) ความสามารถของส่วนโค้งนั้นเป็น 1 ทั้งหมดและเวลาการเดินทางถูกตั้งค่าเป็น 0 สำหรับ a1 และ a3 และ 100 สำหรับ a2 ช่วงชีวิตคือ 1 สำหรับ a1 และ 1,000 สำหรับ a2 และ a3 จากนั้นในเวลา 0 หนึ่งสามารถส่งหนึ่งหน่วยของการไหลผ่าน a1 และ a3 จาก s ถึง t และเริ่มส่งหนึ่งหน่วยของการไหลผ่าน a2 ในช่วงเวลา 1 ถึง 99, a3 จะไม่มีการไหลเนื่องจาก a1 หมดไป แต่ ณ เวลา 100 การไหลผ่าน a2 จะมาถึง v และ a3 จะถูกใช้อีกครั้ง
โยชิโอะโอกาโมโตะ

หากฉันเข้าใจอย่างถูกต้องคุณอ้างว่าส่วนหนึ่งเมื่อแก้ไขวันเกิด / เวลาตายของขอบแล้วปัญหาที่เหลือสามารถแก้ไขได้โดยใช้วิธี max-flow แบบดั้งเดิมตลอดเวลา แต่ฉันไม่เห็นว่าสิ่งนี้เป็นเช่นไร
daveagp

@Yoshio: ในกรณีนั้นถ้าแทนที่จะส่งหน่วยหนึ่งไปตาม a2 ทันทีคุณหยุดส่งกระแสทั้งหมดหลังจากระยะเวลาสั้น ๆ โดยพลการ a1 สามารถใช้อีกครั้งและนั่นจะเป็นทางออกที่ดีกว่า
Leandro M.

@ เดฟ: ไม่นั่นไม่ใช่สิ่งที่ฉันเรียกร้อง สิ่งที่ฉันกำลังพูดคือว่าแต่ละอาร์คสามารถใช้งานได้เพียงจำนวนครั้งที่ จำกัด เท่านั้นหรือการแก้ปัญหาควรจะประมาณวิธีแก้ปัญหาโดยประมาณกับการไหลของเวลามากเกินไป ฉันกังวลเกี่ยวกับรายละเอียดของคำนิยามปัญหาสั้น ๆ
Leandro M.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.