กลับไปหน้าบทความ

อ่าน 6 นาที

ไม่มีชื่อบทความ

อัลกอริทึมของ Dinic หรือ อัลกอริทึมของ Dinitz เป็น อัลกอริทึม พหุนามที่แข็งแกร่ง สำหรับการคำนวณ การไหลสูงสุด ใน เครือข่ายการไหล ซึ่งคิดค้นขึ้นในปี 1970...

อัลกอริทึมของ Dinic

อัลกอริทึมของ Dinicหรืออัลกอริทึมของ Dinitzเป็น อัลกอริทึม พหุนามที่แข็งแกร่งสำหรับการคำนวณการไหลสูงสุดในเครือข่ายการไหลซึ่งคิดค้นขึ้นในปี 1970 โดยนักวิทยาศาสตร์คอมพิวเตอร์ชาวอิสราเอล (อดีตสหภาพโซเวียต) Yefim Dinitz [ 1 ] อัลกอริทึมทำงานในโอ(|วี|2|อี|){\displaystyle O(|V|^{2}|E|)}เวลาและคล้ายกับอัลกอริทึม Edmonds–Karpซึ่งทำงานในโอ(|วี||อี|2){\displaystyle O(|V||E|^{2})}ข้อดีของอัลกอริธึมของ Dinic คือใช้เส้นทางเสริมที่สั้นที่สุด การนำแนวคิดของกราฟระดับและการไหลที่ถูกปิดกั้นมาใช้ทำให้อัลกอริธึมของ Dinic สามารถทำงานได้อย่างมีประสิทธิภาพ

ประวัติศาสตร์

Dinitz คิดค้นอัลกอริทึมนี้ในเดือนมกราคม พ.ศ. 2512 ขณะเป็นนักศึกษาปริญญาโทในกลุ่มของGeorgy Adelson-Velsky ไม่กี่ทศวรรษต่อมา เขาจะเล่าว่า: [ 2 ]

ในชั้นเรียนวิชาอัลกอริธึมของ Adel'son-Vel'sky อาจารย์ผู้สอนมีนิสัยชอบให้โจทย์ที่จะอภิปรายในครั้งต่อไปเป็นแบบฝึกหัดแก่นักเรียน อัลกอริทึม DA ถูกคิดค้นขึ้นเพื่อตอบสนองต่อแบบฝึกหัดดังกล่าว ในขณะนั้น ผู้คิดค้นยังไม่ทราบข้อเท็จจริงพื้นฐานเกี่ยวกับ [ อัลกอริทึม Ford–Fulkerson ]…

⋮ บางครั้งความไม่รู้ก็มีข้อดี เป็นไปได้มากว่า DA จะไม่ถูกคิดค้นขึ้นมาหากผู้เขียนรู้ถึงความเป็นไปได้ของการลดความอิ่มตัวของขอบภาพ

ในปี 1970 Dinitz ได้ตีพิมพ์คำอธิบายของอัลกอริทึมในDoklady Akademii Nauk SSSRในปี 1974 Shimon Evenและ (นักศึกษาปริญญาเอกของเขาในขณะนั้น) Alon Itai ที่Technionใน Haifa ต่างก็สงสัยและสนใจอัลกอริทึมของ Dinitz รวมถึง แนวคิดที่เกี่ยวข้องของ Alexander V. Karzanovเกี่ยวกับการปิดกั้นการไหล อย่างไรก็ตาม พวกเขาพบว่าการถอดรหัสเอกสารทั้งสองฉบับนั้นยาก เนื่องจากแต่ละฉบับจำกัดไว้ที่สี่หน้าเพื่อให้เป็นไปตามข้อจำกัดของวารสารDoklady Akademii Nauk SSSR Even ไม่ยอมแพ้ และหลังจากพยายามสามวัน เขาก็สามารถเข้าใจเอกสารทั้งสองฉบับได้ ยกเว้นปัญหาการบำรุงรักษาเครือข่ายแบบเลเยอร์ ในช่วงสองสามปีต่อมา Even ได้บรรยายเกี่ยวกับ "อัลกอริทึมของ Dinic" โดยออกเสียงชื่อผู้เขียนผิดในขณะที่เผยแพร่อัลกอริทึมนี้ Even และ Itai ยังได้มีส่วนร่วมในอัลกอริทึมนี้โดยการรวมBFSและDFSซึ่งเป็นวิธีการนำเสนออัลกอริทึมที่ใช้กันทั่วไปในปัจจุบัน[ 2 ]

เป็นเวลากว่า 10 ปีหลังจากที่คิดค้นอัลกอริทึม Ford–Fulkerson ขึ้นมา ก็ยังไม่มีใครทราบว่าอัลกอริทึมนี้จะสามารถทำงานได้ในเวลาพหุนามในกรณีทั่วไปที่มีความจุของขอบเป็นจำนวนอตรรกยะหรือไม่ นี่จึงเป็นสาเหตุที่ทำให้ไม่มีอัลกอริทึมใดที่สามารถแก้ปัญหาการไหลสูงสุดในกรณีทั่วไปได้ในเวลาพหุนาม อัลกอริทึมของ Dinitz และอัลกอริทึม Edmonds–Karp (ตีพิมพ์ในปี 1972) ต่างก็แสดงให้เห็นโดยอิสระว่า ในอัลกอริทึม Ford–Fulkerson ถ้าเส้นทางเสริมแต่ละเส้นเป็นเส้นทางที่สั้นที่สุด ความยาวของเส้นทางเสริมจะไม่ลดลง และอัลกอริทึมจะสิ้นสุดลงเสมอ

คำนิยาม

อนุญาตจี=((วี,อี),,เอฟ,,ที){\displaystyle G=((V,E),c,f,s,t)}เป็นเครือข่ายกับ(คุณ,วี){\displaystyle c(u,v)}และเอฟ(คุณ,วี){\displaystyle f(u,v)}ความจุและการไหลของขอบ(คุณ,วี){\displaystyle (u,v)}ตามลำดับ

ความจุคงเหลือคือการแมปเอฟ:วี×วีอาร์+{\displaystyle c_{f}\colon V\times V\to R^{+}}กำหนดไว้ดังนี้
  1. ถ้า(คุณ,วี)อี{\displaystyle (u,v)\in E},
    เอฟ(คุณ,วี)=(คุณ,วี)เอฟ(คุณ,วี){\displaystyle c_{f}(u,v)=c(u,v)-f(u,v)}
  2. ถ้า(วี,คุณ)อี{\displaystyle (v,u)\in E},
    เอฟ(คุณ,วี)=เอฟ(วี,คุณ){\displaystyle c_{f}(u,v)=f(v,u)}
  3. เอฟ(คุณ,วี)=0{\displaystyle c_{f}(u,v)=0}มิฉะนั้น.
กราฟส่วนเหลือเป็นกราฟที่ไม่มีน้ำหนักจีเอฟ=((วี,อีเอฟ),เอฟ|อีเอฟ,,ที){\displaystyle G_{f}=((V,E_{f}),c_{f}|_{E_{f}},s,t)}, ที่ไหน
อีเอฟ={(คุณ,วี)วี×วี:เอฟ(คุณ,วี)>0}{\displaystyle E_{f}=\{(u,v)\in V\times V\colon \;c_{f}(u,v)>0\}}.
เส้นทางเสริมคือ{\displaystyle s}ที{\displaystyle t}เส้นทางในกราฟส่วนเหลือจีเอฟ{\displaystyle G_{f}}.
กำหนดดิสท์(วี){\displaystyle \operatorname {dist} (v)}ให้เป็นความยาวของเส้นทางที่สั้นที่สุดจาก{\displaystyle s}ถึงวี{\displaystyle v}ในจีเอฟ{\displaystyle G_{f}}จากนั้นกราฟระดับของจีเอฟ{\displaystyle G_{f}}คือกราฟจีแอล=((วี,อีแอล),เอฟ|อีแอล,,ที){\displaystyle G_{L}=((V,E_{L}),c_{f}|_{E_{L}},s,t)}, ที่ไหน
อีแอล={(คุณ,วี)อีเอฟ:ดิสท์(วี)=ดิสท์(คุณ)+1}{\displaystyle E_{L}=\{(u,v)\in E_{f}\colon \;\operatorname {dist} (v)=\operatorname {dist} (u)+1\}}.
การไหลที่ถูกปิดกั้นคือ{\displaystyle s}ที{\displaystyle t}ไหลเอฟ{\displaystyle f'}โดยที่กราฟจี=((วี,อีแอล),,ที){\displaystyle G'=((V,E_{L}'),s,t)}กับอีแอล={(คุณ,วี):เอฟ(คุณ,วี)<เอฟ|อีแอล(คุณ,วี)}{\displaystyle E_{L}'=\{(u,v)\colon \;f'(u,v)<c_{f}|_{E_{L}}(u,v)\}}ไม่มี{\displaystyle s}ที{\displaystyle t}เส้นทาง[หมายเหตุ 1 ] [ 3 ]

อัลกอริทึม

อัลกอริทึมของ Dinic

อินพุต : เครือข่ายจี=((วี,อี),,,ที){\displaystyle G=((V,E),c,s,t)}.
ผลลัพธ์ : แอน{\displaystyle s}ที{\displaystyle t}ไหลเอฟ{\displaystyle f}ของค่าสูงสุด
  1. ชุดเอฟ(อี)=0{\displaystyle f(e)=0}สำหรับแต่ละคนอีอี{\displaystyle e\in E}.
  2. สร้างจีแอล{\displaystyle G_{L}}จากจีเอฟ{\displaystyle G_{f}}ของจี{\displaystyle G}. ถ้าดิสท์(ที)={\displaystyle \operatorname {dist} (t)=\infty }หยุดและส่งออกเอฟ{\displaystyle f}.
  3. ค้นหาสิ่งกีดขวางการไหลเอฟ{\displaystyle f'}ในจีแอล{\displaystyle G_{L}}.
  4. เพิ่มการไหลเอฟ{\displaystyle f}โดยเอฟ{\displaystyle f'}แล้วกลับไปที่ขั้นตอนที่ 2

การวิเคราะห์

สามารถแสดงให้เห็นได้ว่าจำนวนชั้นในแต่ละกระแสการปิดกั้นจะเพิ่มขึ้นอย่างน้อย 1 ชั้นในแต่ละครั้ง ดังนั้นจึงมีจำนวนชั้นอย่างมากที่สุด|วี|1{\displaystyle |V|-1}การปิดกั้นการไหลในอัลกอริทึม สำหรับแต่ละกรณี:

  • กราฟระดับจีแอล{\displaystyle G_{L}}สามารถสร้างได้โดยใช้การค้นหาแบบกว้าง (breadth-first search ) ในโอ(อี){\displaystyle O(E)}เวลา
  • การไหลที่ถูกปิดกั้นในกราฟระดับจีแอล{\displaystyle G_{L}}สามารถพบได้ในโอ(วีอี){\displaystyle O(VE)}เวลา[หมายเหตุ 2 ]

ด้วยระยะเวลาการวิ่งทั้งหมดโอ(อี+วีอี)=โอ(วีอี){\displaystyle O(E+VE)=O(VE)}สำหรับแต่ละชั้น ดังนั้น เวลาในการทำงานของอัลกอริทึมของ Dinic จึงเป็นโอ(วี2อี){\displaystyle O(V^{2}E)}[ 2 ]

การใช้โครงสร้างข้อมูลที่เรียกว่าต้นไม้แบบไดนามิกสามารถลดเวลาในการค้นหาสิ่งกีดขวางการไหลในแต่ละเฟสลงได้โอ(อีบันทึกวี){\displaystyle O(E\log V)}ดังนั้น เวลาในการทำงานของอัลกอริทึมของ Dinic จึงสามารถปรับปรุงให้ดีขึ้นได้โอ(วีอีบันทึกวี){\displaystyle O(VE\log V)}.

กรณีพิเศษ

ในเครือข่ายที่มีความจุเป็นหน่วย จะมีข้อจำกัดด้านเวลาที่เข้มงวดกว่ามาก การไหลที่ปิดกั้นแต่ละครั้งสามารถพบได้ในโอ(อี){\displaystyle O(E)}เวลา และสามารถแสดงได้ว่าจำนวนเฟสไม่เกินโอ(อี){\displaystyle O({\sqrt {E}})}และโอ(วี2/3){\displaystyle O(V^{2/3})}[หมายเหตุ 3 ]ดังนั้นอัลกอริทึมจึงทำงานในโอ(นาที{วี2/3,อี1/2}อี){\displaystyle O(\min\{V^{2/3},E^{1/2}\}E)}เวลา[ 4 ]

ในเครือข่ายที่เกิดขึ้นจาก ปัญหา การจับคู่แบบทวิภาคีจำนวนเฟสจะถูกจำกัดโดยโอ(วี){\displaystyle O({\sqrt {V}})}ดังนั้นจึงนำไปสู่โอ(วีอี){\displaystyle O({\sqrt {V}}E)}ขอบเขตเวลา อัลกอริทึมที่ได้นี้ยังเป็นที่รู้จักในชื่ออัลกอริทึม Hopcroft–Karpโดยทั่วไปแล้ว ขอบเขตนี้ใช้ได้กับเครือข่ายหน่วย ใดๆ — เครือข่ายที่แต่ละจุดยอด ยกเว้นแหล่งกำเนิดและจุดปลาย จะมีขอบขาเข้าเพียงเส้นเดียวที่มีความจุหนึ่ง หรือขอบขาออกเพียงเส้นเดียวที่มีความจุหนึ่ง และความจุอื่นๆ ทั้งหมดเป็นจำนวนเต็มใดๆ[ 3 ]

ตัวอย่าง

ต่อไปนี้เป็นการจำลองอัลกอริทึมของ Dinic ในกราฟระดับจีแอล{\displaystyle G_{L}}จุดยอดที่มีป้ายกำกับสีแดงคือค่าต่างๆดิสท์(วี){\displaystyle \operatorname {dist} (v)}เส้นทางสีน้ำเงินก่อให้เกิดการไหลเวียนที่กีดขวาง

จี{\displaystyle G}จีเอฟ{\displaystyle G_{f}}จีแอล{\displaystyle G_{L}}
1.

การไหลที่ปิดกั้นประกอบด้วย

  1. {,1,3,ที}{\displaystyle \{s,1,3,t\}}โดยมีอัตราการไหล 4 หน่วย
  2. {,1,4,ที}{\displaystyle \{s,1,4,t\}}โดยมีอัตราการไหล 6 หน่วย และ
  3. {,2,4,ที}{\displaystyle \{s,2,4,t\}}โดยมีอัตราการไหล 4 หน่วย

ดังนั้น ปริมาณการไหลที่ถูกปิดกั้นคือ 14 หน่วย และค่าของการไหลคือ|เอฟ|{\displaystyle |f|}คือ 14. โปรดสังเกตว่าแต่ละเส้นทางเสริมในกระแสการปิดกั้นมี3ขอบ

2.

การไหลที่ปิดกั้นประกอบด้วย

  1. {,2,4,3,ที}{\displaystyle \{s,2,4,3,t\}}โดยมีอัตราการไหล 5 หน่วย

ดังนั้น ปริมาณการไหลที่ปิดกั้นคือ 5 หน่วย และค่าของการไหลคือ|เอฟ|{\displaystyle |f|}คือ 14 + 5 = 19 โปรดสังเกตว่าแต่ละเส้นทางเสริมมี 4 ขอบ

3.

เนื่องจากที{\displaystyle t}ไม่สามารถติดต่อได้ในจีเอฟ{\displaystyle G_{f}}อัลกอริทึมจะสิ้นสุดการทำงานและส่งคืนค่าการไหลที่มีค่าสูงสุด 19 โปรดทราบว่าในแต่ละการไหลที่ถูกปิดกั้น จำนวนขอบในเส้นทางเสริมจะเพิ่มขึ้นอย่างน้อย 1

ดูเพิ่มเติม

หมายเหตุ

  1. หมายความว่ากราฟย่อยที่ได้จากการลบขอบอิ่มตัวทั้งหมด (ขอบ)(คุณ,วี){\displaystyle (u,v)}กับเอฟ(คุณ,วี)=เอฟ|อีแอล(คุณ,วี){\displaystyle f'(u,v)=c_{f}|_{E_{L}}(u,v)}) ไม่มีเส้นทางใดๆ จาก{\displaystyle s}ถึงที{\displaystyle t}กล่าวอีกนัยหนึ่งการไหลที่ปิดกั้นนั้นเป็นเช่นนั้น ทุกเส้นทางที่เป็นไปได้จาก{\displaystyle s}ถึงที{\displaystyle t}มีขอบที่อิ่มตัว
  2. การค้นหาเส้นทางการไหลที่กีดขวางสามารถดำเนินการได้ในโอ(อี){\displaystyle O(E)}ต่อเส้นทางผ่านลำดับการดำเนินการเดินหน้าและถอยหลัง ดูรายละเอียดเพิ่มเติมได้ที่ http://courses.csail.mit.edu/6.854/06/scribe/scribe11.pdf
  3. เดอะโอ(วี2/3){\displaystyle O(V^{2/3})}ขอบเขตนี้ถือว่าไม่มีเส้นขอบสองเส้นใดเชื่อมต่อจุดยอดคู่เดียวกันในทิศทางเดียวกัน ในขณะที่โอ(อี){\displaystyle O({\sqrt {E}})}bound ไม่ได้ตั้งสมมติฐานเช่นนั้น
  1. EA Dinic (1970). "อัลกอริทึมสำหรับการแก้ปัญหาการไหลสูงสุดในเครือข่ายที่มีการประมาณกำลังไฟฟ้า" (PDF) . Doklady Akademii Nauk SSSR . 11 : 1277– 1280.
  2. 1 2 3 Dinitz, Yefim (2006). "อัลกอริทึมของ Dinitz: เวอร์ชันดั้งเดิมและเวอร์ชันของ Even"ในOded Goldreich ; Arnold L. Rosenberg ; Alan L. Selman (บรรณาธิการ). วิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี: บทความเพื่อรำลึกถึงShimon Even . Lecture Notes in Computer Science. เล่มที่3895. Springer. หน้า218–240 . doi : 10.1007/11685654_10 . ISBN   978-3-540-32880-3.
  3. 1 2 Tarjan 1983 , หน้า 102.
  4. Even, Shimon; Tarjan, R. Endre (1975). "การไหลของเครือข่ายและการทดสอบการเชื่อมต่อกราฟ" SIAM Journal on Computing . 4 (4): 507– 518. doi : 10.1137/0204043 . ISSN 0097-5397 . 

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ไม่มีชื่อบทความ

อัลกอริทึมของ Dinic หรือ อัลกอริทึมของ Dinitz เป็น อัลกอริทึม พหุนามที่แข็งแกร่ง สำหรับการคำนวณ การไหลสูงสุด ใน เครือข่ายการไหล ซึ่งคิดค้นขึ้นในปี 1970...

ประวัติศาสตร์

Dinitz คิดค้นอัลกอริทึมนี้ในเดือนมกราคม พ.ศ. 2512 ขณะเป็นนักศึกษาปริญญาโทในกลุ่มของ Georgy Adelson-Velsky ไม่กี่ทศวรรษต่อมา เขาจะเล่าว่า: [ 2 ]

คำนิยาม

อนุญาต จี = ( ( วี , อี ) , ค , เอฟ , ส , ที ) {\displaystyle G=((V,E),c,f,s,t)} เป็นเครือข่ายกับ ค ( คุณ , วี ) {\displaystyle c(u,v)} และ เอฟ ( คุณ , วี ) {\displaystyle f(u,v)} ความจุและการไหลของขอบ ( คุณ , วี ) {\displaystyle (u,v)} ตามลำดับ

การวิเคราะห์

สามารถแสดงให้เห็นได้ว่าจำนวนชั้นในแต่ละกระแสการปิดกั้นจะเพิ่มขึ้นอย่างน้อย 1 ชั้นในแต่ละครั้ง ดังนั้นจึงมีจำนวนชั้นอย่างมากที่สุด | วี | − 1 {\displaystyle |V|-1} การปิดกั้นการไหลในอัลกอริทึม สำหรับแต่ละกรณี: