มีขั้นตอนวิธีการไหลของกระแสสูงสุดที่ใช้งานได้จริงหรือไม่?


30

สำหรับปัญหาการไหลสูงสุดดูเหมือนว่าจะมีอัลกอริธึมที่ซับซ้อนจำนวนมากโดยมีการพัฒนาอย่างน้อยหนึ่งรายการเมื่อเร็ว ๆ นี้เมื่อปีที่แล้ว Maxของ Orlin ไหลในเวลา O (mn) หรือดีกว่าให้อัลกอริทึมที่ทำงานใน O (VE)

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

  • Edmonds-Karp: ,O(VE2)
  • Push-relabel: หรือO ( V 3 )โดยใช้การเลือกจุดสุดยอด FIFOO(V2E)O(V3)
  • Dinic ของอัลกอริทึม: )O(V2E)

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

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

แก้ไข : ฉันถามคำถามที่เกี่ยวข้องกับ cs.stackexchangeโดยเฉพาะเกี่ยวกับอัลกอริทึมที่ใช้ต้นไม้แบบไดนามิก (หรือที่รู้จักในชื่อ link-cut trees) ซึ่งอาจเป็นที่สนใจสำหรับผู้ที่ติดตามคำถามนี้


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

3
Andrew Goldberg เคยมีฐานรหัสที่ดีมากสำหรับตัวแปรที่แตกต่างกันของการไหลสูงสุดตามการกด relabel ของเขา ฉันเคยใช้รหัสในอดีตและมันก็สะอาดมาก น่าเสียดายที่เว็บไซต์ดูเหมือนว่าจะหมดอายุ
Suresh Venkat

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

5
ไม่ว่าจะเป็นอัลกอริทึม "จริง" หรือไม่ว่าจะเป็น "นำไปใช้" จะแตกต่างกันเล็กน้อย - ถูกต้อง. อัลกอริทึมสามารถดำเนินการได้โดยไม่ต้องใช้งานจริง แต่ไม่สามารถนำกลับมาใช้ใหม่ได้
Jeffε

2
นี่คือรหัสจากการศึกษาทดลองของขั้นตอนวิธีการตัดขั้นต่ำ
Austin Buchanan

คำตอบ:


22

ฉันเป็นหนึ่งในนักเขียนของบทความด้านบน

เพียงแค่ต้องการพูดถึงว่าเราใช้ `` state-of-the-art '' เพื่อหมายถึงอัลกอริทึม (ด้วยการใช้งานแบบสาธารณะ) ที่ทำงานได้ดีกับอินสแตนซ์ max-flow ที่เกิดขึ้นในคอมพิวเตอร์วิสัยทัศน์

ฉันยังต้องการเพิ่มสิ่งนั้นในบริบทที่แคบ (แต่ยังใช้งานได้จริง) บ่อยครั้งที่อัลกอริธึมที่ทำงานได้ดีเป็นสิ่งที่รับประกันได้ในทางทฤษฎีที่ไม่ดี ตัวอย่างเช่นการอ้างอิง [5] จากบทความของเรา (อัลกอริทึม Boykov-Kolmogorov) ถูกนำมาใช้กันอย่างแพร่หลายในชุมชนการมองเห็นคอมพิวเตอร์

ในที่สุดในกรณีที่ใครสนใจข้อมูลจากการทดลองของเรามีอยู่ที่นี่: http://ttic.uchicago.edu/~dbatra/research/mfcomp/index.html

รหัสนี้ก็จะพร้อมใช้งานเช่นกัน


เรียบร้อยมากที่คุณเข้าร่วมกลุ่ม! ยินดีต้อนรับ! คำถามหนึ่งเกี่ยวกับกระดาษ [ตั้งแต่วันที่ 1 ค้นหามัน] มันจะน่าสนใจมากที่ได้ฟังเกี่ยวกับกระบวนการเลือกอัลกอริธึมที่ใช้ในบทความ - มันดูเหมือนจะไม่ได้อธิบายอย่างละเอียดเลย บางทีคุณอาจแบ่งปันบันทึกพื้นหลัง "เบื้องหลัง" บางแห่ง [เช่นหน้าเว็บ?] เกี่ยวกับอัลกอริธึมที่ถูกเลือกซึ่งถูกตัดออกไปทำไมความท้าทายที่เกิดขึ้นในการขอรับ / เรียกใช้แอพพลิเคชั่นคืออะไร อัลกอริทึมเช่น Orlins ล่าสุด & โอกาสในการใช้งานในที่สุดและอื่น ๆ !
vzn

7

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

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

การสำรวจเปรียบเทียบอาจเพียงพอ แต่จะทำผิดพลาดในด้านของอัลกอริทึมที่ทำงานได้ นี่เป็นการวิเคราะห์เชิงประจักษ์ล่าสุดของอัลกอริทึมการไหลสูงสุด 14 "ล้ำสมัย" เปรียบเทียบกับการประมวลผลการมองเห็นเชิงประจักษ์เปรียบเทียบกับการประมวลผลการมองเห็นที่กระแสสูงสุดมีแอปพลิเคชั่นมากมาย "state of the art" ถูกนำมาใช้เพื่ออ้างถึงอัลกอริทึม "ใช้แล้ว"

[1] MaxFlow Revisited: การเปรียบเทียบเชิงประจักษ์ของอัลกอริธึม Maxflow สำหรับปัญหาการมองเห็นที่หนาแน่นโดย Verma และ Batra, 2012

** อัลกอริทึมเชิงทฤษฎีบางอย่างอยู่ในหมวดหมู่มากขึ้นในชุมชน TCS ที่ถูกเรียกอย่างไม่เป็นทางการว่า "กาแลคซี" แต่น่าเสียดายที่ผู้เขียน TCS ไม่ได้ติดป้ายอัลกอริทึมของตนเองในประเภทนี้ทันทีและไม่มีเกณฑ์ที่เผยแพร่หรือยอมรับโดยทั่วไปสำหรับ "กาแล็คซี่" อัลกอริทึมถึงแม้จะมีการอ้างอิงในบล็อก

การปฏิบัติจริงในแง่นี้อาจเป็นมิติใหม่สำหรับการศึกษาเชิงทฤษฎี เป็นการดีที่จะมีการสำรวจอัลกอริธึมการไหลสูงสุดโดยเฉพาะในแกน / เกณฑ์ "ภาคปฏิบัติ" นี้ แต่มีแนวโน้มว่าจะไม่มีอยู่ในขณะที่เขียน มันเป็นแนวคิดที่ได้รับการยอมรับ / รับรู้เมื่อเร็ว ๆ นี้ใน TCS ที่ยังไม่ได้รับการตรวจสอบอย่างเป็นทางการ (ซึ่งแตกต่างจากการยอมรับอย่างแพร่หลายของอัลกอริทึม P ในฐานะ "ประสิทธิภาพ")


3
+1 ฉันไม่แน่ใจว่าทำไมสิ่งนี้จึงถูกลดระดับลง ฉันกำลังอ่านบทความที่คุณเชื่อมโยงและเป็นประโยชน์อย่างมากในการดูว่าแนวทางการปฏิบัติคืออะไรอย่างน้อยในโดเมนปัญหานั้น
Rob Lachlan

3
Robert Sedgewick กล่าวในการพูดคุยอย่างเป็นธรรมเมื่อไม่นานมานี้ว่าผู้ออกแบบอัลกอริทึมที่ไม่เรียกใช้การทดลองมีความเสี่ยงที่จะหายไปในสิ่งที่เป็นนามธรรม การพูดคุยเกี่ยวกับการค้นหาเส้นทางในกราฟและค่อนข้างเกี่ยวข้องกับ maxflow ด้วย ไม่ตอบคำถาม แต่อาจน่าสนใจสำหรับใครบางคน
Juho

5
@Rob ส่วนที่เกี่ยวข้องเท่านั้นในคำตอบนี้คือลิงค์ไปยังกระดาษและมีคำตอบไม่มากในการอธิบายว่าทำไมกระดาษนั้นถึงถูกเชื่อมโยงทั้งหมด ฉันเดาว่า OP พบลิงค์จาก Google และยังไม่ได้อ่าน ส่วนที่เหลือของคำตอบคือข้อสังเกตทั่วไปและความเห็นที่ระบุมุมมองส่วนตัวของ OP เกี่ยวกับปัญหาที่เขาไม่ได้เป็นผู้เชี่ยวชาญและไม่เกี่ยวข้องกับที่นี่จริงๆ รู้รอบไม่ใช่บล็อกโพสต์ ลิงก์ไปยังเอกสารที่เกี่ยวข้องอาจเป็นความคิดเห็นที่ดี แต่ก็ไม่ได้รับคำตอบ นี่เป็นคำตอบที่ไม่ดีถ้ามันเป็นคำตอบเดียว นั่นคือเหตุผลที่ฉันลงคะแนนมัน
Kaveh

2
@Kaveh ยุติธรรมพอ ฉันพบว่ากระดาษเป็นตัวบ่งชี้ที่มีประโยชน์ในสิ่งที่ผู้คนคิดว่าเป็นอัลกอริทึมที่มีประโยชน์ ฉันยอมรับว่ายังไม่ได้ตอบมาก
Rob Lachlan

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

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