สมชาย ประสิทธิ์จูตระกูล

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
วิธีการตั้งค่าและทดสอบ เครื่องคอมพิวเตอร์ก่อนใช้งาน
Advertisements

รายวิชา ง40206 โครงสร้างข้อมูลและขั้นตอนวิธี
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
ลิมิตและความต่อเนื่อง
สาขาวิชาคอมพิวเตอร์และเทคโนโลยี อ.เลาขวัญ งามประสิทธิ์
Chapter 2 Root of Nonlinear Functions
4.6 RTL (Resistor-Transistor Logic) Inverter
ชื่อสมบัติของการเท่ากัน
เปรียบเทียบจำนวนประชากรทั้งหมดจากฐาน DBPop Original กับจำนวนประชากรทั้งหมดที่จังหวัดถือเป็นเป้าหมาย จำนวน (คน) 98.08% % จังหวัด.
โครงการแลกเปลี่ยนเรียนรู้ เกี่ยวกับระเบียบกระทรวงการคลัง
AVL Tree.
แถวคอย (Queue).
Data structure & Algorithms
จำนวนจริง F M B N ขอบคุณ เสถียร วิเชียรสาร.
ผังงานโปรแกรม (Program Flowchart)
เนื้อหา ประเภทของโปรแกรมภาษา ขั้นตอนการพัฒนาโปรแกรม
กราฟถ่วงน้ำหนัก เสนอต่อ อ.ธรรมนูญ ผุยรอด จัดทำโดย
Poster Presentation โดย สำหรับ การประชุม สคร.5 รศ.นพ.สมพนธ์ ทัศนิยม
Image Processing & Computer Vision
Binary Image Processing
Image Processing & Computer Vision
Use Case Diagram.
การควบคุมทิศทางการทำงานของโปรแกรม
กระบวนการคิดทางคณิตศาสตร์
บทที่ 4 การโปรแกรมเชิงเส้น (Linear Programming)
Asst.Prof. Dr.Surasak Mungsing
Asst.Prof. Dr.Surasak Mungsing
การแปลงภาพสีเทาให้เป็นภาพขาวดำ
การจำแนกบรรทัดข้อความ
CHAPTER 4 Circuit Theorems
จำนวนทั้งหมด ( Whole Numbers )
เทคนิค การเติมเต็ม พลังชีวิตให้สำเร็จ 100%
ระบบการเบิก-จ่าย ลูกหนี้เงินยืม
แนวทางการปฏิบัติโครงการจูงมือ น้องน้อยบนดอยสูง 1.
โครงสร้างข้อมูลแบบคิว
ง30212 การเขียนโปรแกรมภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ค31211 คณิตศาสตร์สำหรับ คอมพิวเตอร์ 1
สัปดาห์ที่ 14 ผลตอบสนองต่อความถี่ Frequency Response (Part II)
ภาควิชาวิศวกรรมไฟฟ้า คณะวิศวกรรมศาสตร์ มหาวิทยาลัยสยาม
วิธีสายงานวิกฤต Critical Path Method แบบ Activity on Arrow.
คำสั่งควบคุมการทำงานของ ActionScripts
โดย อ. นัฐพงศ์ ส่งเนียม Do Loop Until โดย อ. นัฐพงศ์ ส่งเนียม
การนำ การคิด แบบหญิงยุคใหม่
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
ค21201 คณิตศาสตร์เพิ่มเติม 1
Classification Data mining การทำเหมืองข้อมูลแบบจำแนก
การสร้างแบบเสื้อและแขน
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
Shortest-Path Algorithms
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
School of Information Communication Technology,
แบบฝึกหัด จงหาคำตอบที่ดีที่สุด หรือหาค่ากำไรสูงสุด จาก
การค้นในปริภูมิสถานะ
การกำหนดโครงการ (Project Scheduling: PERT / CPM)
ค่าความจริงของประโยคที่มีตัวบ่งปริมาณ 2 ตัว
สื่อการสอนด้วยโปรมแกรม “Microsoft Multipoint”
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
วิธีเรียงสับเปลี่ยนและวิธีจัดหมู่
กราฟเบื้องต้น.
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
การจัดเรียงข้อมูล (sorting)
ต้นไม้ Tree [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การค้นในปริภูมิสถานะ
กราฟเบื้องต้น.
Week 13 Basic Algorithm 2 (Searching)
การแบ่งแยกและเอาชนะ Divide & Conquer
การแบ่งแยกและเอาชนะ Divide & Conquer
โครงการเทคนิคและเทคโนโลยีสนับสนุนงานตรวจสอบ “Risk & Control” จัดโดย สำนักงานตรวจสอบภายใน จุฬาฯ วันที่ 22 กรกฎาคม 2553.
รายการ (Lis t) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong.
ใบสำเนางานนำเสนอ:

สมชาย ประสิทธิ์จูตระกูล Max Flows สมชาย ประสิทธิ์จูตระกูล

การไหล (flow) เส้นเชื่อมแต่ละเส้นมีความจุเป็นจำนวนไม่ติดลบ ปมพิเศษ : source s และ sink t กำหนดให้ปมทุกปมอยู่บนวิถีใดวิถีหนึ่งจาก s ถึง t s v1 v3 v2 v4 t 16 13 10 4 9 12 20 14 7 capacity source sink หาปริมาณการไหลจาก s ถึง t ที่มากสุดในข่ายงาน

การไหล (flow) ให้ f(u,v) คือปริมาณการไหลในเส้นเชื่อม (u,v) ปริมาณการไหลในเส้นเชื่อมต้องไม่เกินความจุ ปริมาณการไหลเข้าปมหนึ่ง ต้องเท่ากับปริมาณการไหลออกจากปมนั้น (ยกเว้นปม s กับ t) flow / capacity s v1 v3 v2 v4 t 11/16 12/13 10 1/4 9 12/12 19/20 4/4 11/14 7/7

ส่วนตัด (cut) f(S,T)  c(S,T) s t s v1 v3 v2 v4 t S T ... ... s ... t ... ความจุของส่วนตัด (S,T) = ผลรวมความจุเส้นเชื่อมจาก S ไป T f(S,T)  c(S,T) s v1 v3 v2 v4 t 11/16 8/13 10 1/4 4/9 12/12 15/20 4/4 11/14 7/7 12 – 4 + 11  12 + 14

Max-Flow Min-Cut Theorem S T ... ... s ... t ... S c(S,T) { s } 6 { s, b } 13 { s, c } 5 { s, d } 8 {s, b, c } 12 { s, b, d } 11 { s, c, d } 4 { s, b, c, d } 7 fmax(S,T) = cmin(S,T)

วิธีหา max-flow Augmenting-path method Preflow-push method

หาวิถีเพื่อเพิ่มการไหล

วิถีการไหลแบบสวนทิศได้

Residual Network ให้ความจุคงเหลือ (residual capacity) ของเส้นเชื่อม (u,v) ในข่ายงาน G ที่มีการไหล f คือ cf(u,v) = c(u,v) – f(u,v) ให้ข่ายงานคงเหลือ (residual network) ของ G ที่มีการไหล f คือ ข่ายงานที่มีปมเหมือน G มีเส้นเชื่อม (u,v) ที่มีความจุ cf(u,v) ถ้า cf(u,v) > 0 มีเส้นเชื่อม (v,u) ที่มีความจุ f(u,v) ถ้า f(u,v) > 0

Augmenting Path Method 12/12 s v1 v3 v2 v4 t 11/16 8/13 10 1/4 4/9 15/20 4/4 11/14 7/7 s v1 v3 v2 v4 t 5 11 3 4 7 8 12 15

Ford & Fulkerson, 1962

ตัวอย่าง augmenting path Original Network Resulting Flow = 4

ตัวอย่าง (ต่อ) Resulting Flow = 4 augmenting path Residual Network

ตัวอย่าง (ต่อ) Residual Network Resulting Flow = 11

ตัวอย่าง (ต่อ) Resulting Flow = 11 augmenting path Residual Network

ตัวอย่าง (ต่อ) Residual Network Resulting Flow = 19

ตัวอย่าง (ต่อ) Resulting Flow = 19 augmenting path Residual Network

ตัวอย่าง (ต่อ) Residual Network Resulting Flow = 23

ตัวอย่าง (ต่อ) Resulting Flow = 23 No augmenting path: Maxflow=23 Residual Network

วิเคราะห์ ถ้าความจุทุกเส้นเป็นจำนวนเต็ม วิถีแต่งเติมหนึ่งวิถี เพิ่มการไหลได้อย่างน้อยหนึ่งหน่วย ถ้า max flow คือ f*, ใช้เวลารวม O(E f*) O(E) O(E)

กรณีแย่ ๆ v1 v1 s t s t v2 v2 v1 v1 s t s t v2 v2 v1 v1 s t s t v2 v2 100 v2 1 s v1 t 100 v2 99 1 s v1 t 99 v2 1 s v1 t 99 v2 98 1 2 s v1 t 98 v2 1 2 s v1 t 98 v2 97 1 3 2

Augmenting Path : ปรับปรุง Capacity scaling O(E2 log U) -residual network คือ residual network ที่เส้นเชื่อมมีความจุไม่น้อยกว่า  เริ่ม  = 2lg U แล้วค่อย ๆ ลดลงทีละครึ่งจนเป็น 1 Edmonds และ Karp เสนอ เลือกวิถีสั้นสุด (จำนวนเส้นน้อยสุด) O(VE2) เลือกเส้นที่มีความจุมากสุด O(V2 lg U lg V) s v1 t 100 v2 1 (U คือความจุมากสุดของเส้นเชื่อม)

วิธีหา max-flow Augmenting-path method Preflow-push method

Preflow-Push Method augmenting path method หาวิถีเพื่อเพิ่มการไหลให้มากขึ้น ๆ โดยรักษากฏการไหลเข้าเท่าไหลออกตามปมต่าง ๆ ไว้ตลอดเวลา (maintain feasibility, aim for optimality) preflow push method เพิ่มการไหลให้มากสุด ๆ ไปทาง sink แล้วค่อย ๆ ผลักให้ไหลกลับมาทาง source เพื่อทำให้ถูกกฎการไหลเข้าเท่าไหลออก (start with super optimality, aim for feasibility)

Original Network 6 5 4 3 2 14 1 s x y z t 12 5 8 10 7 16

Residual network : step 1 - initialize 6 s 5 -26 4 3 14 12 2 1 x y z t 5 8 10 12 14 7 16

Residual network : step 2 - relabel 6 s 5 -26 4 3 14 12 2 x 1 12 y z t 5 8 10 14 7 16

Residual network : step 3 - push 6 s 5 -26 4 3 14 12 2 x 1 7 y z t 5 8 10 19 7 16

Residual network : step 4 - push 6 s 5 -26 4 3 14 12 2 x 1 y z t 5 8 10 19 7 7 7 9

Residual network : step 5 - relabel 6 s 5 -26 4 3 14 12 2 x y 1 19 5 z t 8 10 7 7 7 9

Residual network : step 6 - push 5 -26 4 3 14 12 2 x y 1 11 5 z t 8 10 8 7 7 7 9

Residual network : step 7 - relabel 6 s 5 -26 4 3 14 12 2 x y z 1 11 8 5 8 10 t 7 7 7 9

Residual network : step 8 - push 6 s 5 -26 4 3 14 12 2 x y z 1 11 8 5 8 t 2 15 7 7 9

Residual network : step 9 - relabel 6 s 5 -26 4 14 3 y 12 2 11 x z 5 8 1 8 t 2 15 7 7 9

Residual network : step 10 - push 6 s 5 -26 4 14 3 y 12 2 6 x z 5 8 1 5 8 t 2 15 7 7 9

Residual network : step 11 - push 6 s 5 -26 4 14 3 y 12 2 6 x z 5 8 1 8 t 2 20 7 12 4

Residual network : step 12 - relabel y 6 6 s 14 5 -26 4 5 8 3 12 2 x z 1 8 t 2 20 7 12 4

Residual network : step 13 - push y 6 6 s 8 5 -20 4 5 8 3 12 2 x z 1 8 t 2 20 7 12 4

แนวคิด e(u) คือ excess ของปม u ปริมาณการไหลเข้า u ลบด้วยปริมาณการไหลออก active node คือปมที่มี e(u) > 0 (ไม่สนใจ s กับ t, e(s)  0, e(t)  0 แน่ๆ) แต่ละปมมีความสูงกำกับ ให้ flow ไหลจากที่สูงลงสู่ที่ต่ำ (sink อยู่ต่ำสุด) มีเส้น (u,v), d(u)  d(v) + 1 เลือก active node u แล้ว push การไหล e(u) ออกไปให้ปม "เพื่อน" v โดยที่ d(u) = d(v) + 1 (ปมใกล้สุดที่เข้าหา sink)

Preflow-Push Method Initialization: Algorithm: initialization while there exists an active node select an active node i Push-Relabel(i) Initialization: Set f = 0 Compute distance label d(i) for all iV f(s,j) = c(s,j) for all (s,j)  E d(s) = n, where n=|V| Push-Relabel(i): if there is an admissible edge (i,j) push min(e(i), cf(i,j)) units of flow on (i,j) else d(i) = 1 + min{ d(j) | cf(i,j)>0 } (i,j)Ef

ให้ distance label อย่างไร ทำ reverse breadth-first search จาก t ให้ d(t) = 0 และให้ d(i) = k โดยที่ k คือหมายเลขระดับของ i ใน breadth-first tree 0 1 2 3 4 5 d 3 2 2 1 1 0

จะเลือก active nodes อย่างไร FIFO preflow-push algorithm O(V3) Highest label preflow-push algorithm O(V2E1/2) Excess scaling algorithm O(VE + V2logU)

FIFO Preflow-Push ใช้ queue เก็บรายการของ active nodes ที่จะถูกนำออกมา push flow ปมที่ถูก relabel จะถูกไปต่อท้าย queue ถ้า u ถูกเลือกมา push, แล้วยังเป็น active node อยู่ ก็จะ push ต่อไปจนกว่า e(u) = 0 หรือจนกว่า relabel

FIFO : ตัวอย่าง Pic 1 Pic 2 Pic 3 Pic 4

ตัวอย่าง (ต่อ) Pic 5 Pic 6 Pic 7 Pic 8

ตัวอย่าง (ต่อ) Pic 9 Pic 10 Pic 11 Pic 12

ตัวอย่าง (ต่อ) Pic 13 Pic 14 Pic 15 Pic 16

ตัวอย่าง (ต่อ) Pic 17 Pic 18

Highest-Label Preflow-Push เลือก active node ที่อยู่สูงสุดมา push

การจับคู่

การจับคู่

ข่ายงานที่มีหลาย sources และ sinks

ข่ายงานที่ปมมีความจุจำกัด

การหาจำนวนวิถีในกราฟที่ไม่มีเส้นร่วมกัน