ผลต่างระหว่างรุ่นของ "204512/บรรยาย 7"
แถว 3: | แถว 3: | ||
........<br> | ........<br> | ||
ให้กราฟมีทิศทาง <math>G = (V,E)</math><br> | ให้กราฟมีทิศทาง <math>G = (V,E)</math><br> | ||
− | ฟังก์ชันความจุ cap :<math> | + | ฟังก์ชันความจุ cap :<math>VxV \to R^ +</math> และ s,t ∈ V<br> |
− | ฟังก์ชัน f : <math> | + | ฟังก์ชัน f : <math>VxV \to R</math> จะเรียกว่าเป็น flow <br> |
ถ้า<br> | ถ้า<br> | ||
i) สำหรับทุกๆคู่ u,v : <math>f(u,v) \le cap(u,v)</math> [Capacity Constraint]<br> | i) สำหรับทุกๆคู่ u,v : <math>f(u,v) \le cap(u,v)</math> [Capacity Constraint]<br> | ||
+ | |||
ii)สำหรับทุกๆ u,v : <math>f(u,v) = -f(u,v)</math> [Skew Symmetry]<br> | ii)สำหรับทุกๆ u,v : <math>f(u,v) = -f(u,v)</math> [Skew Symmetry]<br> | ||
− | iii)สำหรับทุกๆ u | + | |
+ | iii)สำหรับทุกๆ <math>{\rm u } \notin {\rm \{ s,t\} , }\sum\limits_{{\rm v} \in {\rm V}} {{\rm f(u,v) = 0}} | ||
+ | </math> [Flow conservation Constraint]<br> | ||
<u>ขนาดของ flow f</u> ,|f|, คือ<br> | <u>ขนาดของ flow f</u> ,|f|, คือ<br> | ||
− | + | <br> | |
+ | <math>\sum\limits_{v \in V} {f(s,v)} | ||
+ | </math><br> | ||
<br> | <br> | ||
มี Flow s-t<br> | มี Flow s-t<br> | ||
− | จะเรียก (x,\bar | + | จะเรียก <math>(x,\bar x)</math> ว่าเป็น s-t cut ถ้า <math>s \in x,t \in \bar x |
− | สำหรับ cut(x,\bar | + | </math> และ <math>\bar x = v - x</math><br> |
+ | |||
+ | สำหรับ cut <math>(x,\bar x)</math>,<math>f(x,\bar x) = \sum\limits_{u \in x} {\sum\limits_{v \in \bar x} {f(u,v)} }</math><br> | ||
<br> | <br> | ||
− | '''<u>Lemma</u>''' : สำหรับทุกๆ s-t cut (x,\bar | + | '''<u>Lemma</u>''' : สำหรับทุกๆ s-t cut <math>(x,\bar x),f(x,\bar x) = |f|</math><br><br> |
− | '''<u>Proof</u>''' : f(x,\bar | + | '''<u>Proof</u>''' : <math>f(x,\bar x) = \sum\limits_{u \in x} {\sum\limits_{v \in \bar x} {f(u,v) = \sum\limits_{u \in x} {\sum\limits_v {f(u,v) - \sum\limits_{u \in x} {\sum\limits_{v \in x} {f(u,v)} } } } } } </math><br> |
− | + | ||
− | :::= | + | :::::= <math>\sum\limits_v {f(s,v) = |f|}</math><br> |
<br> | <br> | ||
flow ที่หน้าตัดใดๆ เท่ากับ Flow ที่ออกจาก soure นั้นๆ<br> | flow ที่หน้าตัดใดๆ เท่ากับ Flow ที่ออกจาก soure นั้นๆ<br> | ||
<br> | <br> | ||
− | สำหรับ cut (x,\bar | + | สำหรับ cut <math>(x,\bar x)</math> ใด ๆ ให้ <math>cap(x,\bar x) = \sum\limits_{u \in x} {\sum\limits_{v \in \bar x} {cap(u,v)} }</math><br> |
<br> | <br> | ||
− | '''<u>Lemma</u>''' : สำหรับ s-t cut (x,\bar | + | '''<u>Lemma</u>''' : สำหรับ s-t cut <math>(x,\bar x)</math> ใดๆ และ flow f ใดๆ <br> |
− | ::|f| = | + | ::<math>|f| = f(x,\bar{x})\le cap(x,\bar{x})</math><br> |
− | '''<u>Proof</u>''' : ลองคิดเอง???<br> | + | '''<u>Proof</u>''' : ลองคิดเอง???<br><br> |
สำหรับ flow f , capacity บนเส้นเชื่อม (u,v) ใน Residual graph R<sub>f</sub> ของ f เท่ากับ <br> | สำหรับ flow f , capacity บนเส้นเชื่อม (u,v) ใน Residual graph R<sub>f</sub> ของ f เท่ากับ <br> | ||
− | ::cap(u,v)-f(u,v) | + | ::<math>cap(u,v) - f(u,v) \equiv r_f (u,v)</math><br> |
+ | <br> | ||
ให้ R<sub>f</sub> มีเฉพาะเส้นเชื่อมที่มี capacity เป็นบวก <br> | ให้ R<sub>f</sub> มีเฉพาะเส้นเชื่อมที่มี capacity เป็นบวก <br> | ||
− | flow f เป็น maximum flow ถ้า |f| มากที่สุด<br> | + | flow f เป็น maximum flow ถ้า |f| มากที่สุด<br><br> |
'''<u>Lemma</u>''' : ถ้า f* เป็น maximum flow, f เป็น flow ใดๆ แล้ว <br> | '''<u>Lemma</u>''' : ถ้า f* เป็น maximum flow, f เป็น flow ใดๆ แล้ว <br> | ||
− | :::f'=f*-f จะเป็น flow ใน R<sub>f</sub> เมื่อ f'(x,y)=(f*-f)(x,y)=f*(x,y)-f(x,y)<br> | + | :::f'=f*-f จะเป็น flow ใน R<sub>f</sub> เมื่อ f'(x,y)=(f*-f)(x,y)=f*(x,y)-f(x,y)<br><br> |
− | '''<u>Proof</u>''' : check : capaciy constraint | + | '''<u>Proof</u>''' : check |
− | :::skew symmetry | + | :::capaciy constraint <math>\forall \cup v,f(u,v) \le cap(u,v)</math><br> |
− | :::conservation | + | :::skew symmetry <math>\forall \cup v,f(u,v) = - f(u,v)</math><br> |
+ | :::conservation <math>\forall v \notin \{ s,t\} ,\sum\limits_w {f(v,w) = \emptyset }</math><br> | ||
:ตรวจสอบ capacity constraint พิจารณา (u,v)<br> | :ตรวจสอบ capacity constraint พิจารณา (u,v)<br> | ||
− | :::f'(u,v)=f*(u,v)-f(u,v) | + | :::<math>f'(u,v) = f^* (u,v) - f(u,v)\le cap(u,v) - f(u,v) = r_f (u,v)</math><br> |
===Flow Augmenting Step=== | ===Flow Augmenting Step=== | ||
เรียก path ใน R<sub>f</sub> จาก s ไป t ว่าเป็น augmenting path <br> | เรียก path ใน R<sub>f</sub> จาก s ไป t ว่าเป็น augmenting path <br> | ||
− | :1. f < | + | :1. <math>f \leftarrow \emptyset</math> |
:2. คำนวณ R<sub>f</sub> | :2. คำนวณ R<sub>f</sub> | ||
:3. หา augmenting path P ∈ R<sub>f</sub> | :3. หา augmenting path P ∈ R<sub>f</sub> | ||
:4. ถ้าหาไม่ได้ จบ | :4. ถ้าหาไม่ได้ จบ | ||
− | :5. ให้ C = min | + | :5. ให้ <math>C = \mathop {\min }\limits_{e \in P} r_f (e)</math> |
:6. ปรับค่า f ด้วย flow บน path p ที่มีขนาด C | :6. ปรับค่า f ด้วย flow บน path p ที่มีขนาด C | ||
:7. กลับไป step2 | :7. กลับไป step2 | ||
+ | <br> |
รุ่นแก้ไขเมื่อ 06:48, 27 กรกฎาคม 2550
Network Flows
........
ให้กราฟมีทิศทาง
ฟังก์ชันความจุ cap : และ s,t ∈ V
ฟังก์ชัน f : จะเรียกว่าเป็น flow
ถ้า
i) สำหรับทุกๆคู่ u,v : [Capacity Constraint]
ii)สำหรับทุกๆ u,v : [Skew Symmetry]
iii)สำหรับทุกๆ [Flow conservation Constraint]
ขนาดของ flow f ,|f|, คือ
มี Flow s-t
จะเรียก ว่าเป็น s-t cut ถ้า และ
สำหรับ cut ,
Lemma : สำหรับทุกๆ s-t cut
Proof :
- =
- =
flow ที่หน้าตัดใดๆ เท่ากับ Flow ที่ออกจาก soure นั้นๆ
สำหรับ cut ใด ๆ ให้
Lemma : สำหรับ s-t cut ใดๆ และ flow f ใดๆ
Proof : ลองคิดเอง???
สำหรับ flow f , capacity บนเส้นเชื่อม (u,v) ใน Residual graph Rf ของ f เท่ากับ
ให้ Rf มีเฉพาะเส้นเชื่อมที่มี capacity เป็นบวก
flow f เป็น maximum flow ถ้า |f| มากที่สุด
Lemma : ถ้า f* เป็น maximum flow, f เป็น flow ใดๆ แล้ว
- f'=f*-f จะเป็น flow ใน Rf เมื่อ f'(x,y)=(f*-f)(x,y)=f*(x,y)-f(x,y)
- f'=f*-f จะเป็น flow ใน Rf เมื่อ f'(x,y)=(f*-f)(x,y)=f*(x,y)-f(x,y)
Proof : check
- capaciy constraint
- skew symmetry
- conservation
- capaciy constraint
- ตรวจสอบ capacity constraint พิจารณา (u,v)
Flow Augmenting Step
เรียก path ใน Rf จาก s ไป t ว่าเป็น augmenting path
- 1.
- 2. คำนวณ Rf
- 3. หา augmenting path P ∈ Rf
- 4. ถ้าหาไม่ได้ จบ
- 5. ให้
- 6. ปรับค่า f ด้วย flow บน path p ที่มีขนาด C
- 7. กลับไป step2