190 likes | 277 Views
Egde disjont paths. Giả sử chúng ta muốn gửi k files dữ liệu lớn từ s tới t nhưng không có bất cứ 2 file nào cùng nằm trên 1 đường link Thực tế sẽ dẫn đến bài toán sau :
E N D
Giảsửchúng ta muốngửi k files dữliệulớntừ s tới t nhưngkhôngcóbấtcứ 2 file nàocùngnằmtrên 1 đường link • Thựctếsẽdẫnđếnbàitoánsau: Cho đồthịcóhướngG,và 2 đỉnh s và t, tìm k đườngtừ s tới t saochokhôngcóbấtcứ 2 đườngnàocóchungítnhất 1 cạnh.
Liệurằngviệctìmra k đườngxuấtpháttừ s tới t màcáccạnhcủachúngphânbiệtcóliênquangìtớiluồngcựcđạitrongđồthị G?
MẠNG(network) • Mạnglàđồthịcóhướng G=<V,E> • Códuynhất 1 đỉnh s khôngcócungđivàogọilàđỉnhphát(nguồn) vàcóduynhất 1 đỉnh t khôngcócungđiragọilàđỉnhthu(đích). • Mỗicung e của G gắnliềnvới 1 sốkhôngâm c(e) gọilàcôngsuấtchophépcủa e.
Luồngtrongmạng • đ/n:luồng f trongmạng G=<V,E> làphépgánsố f(e) chomỗicạnh e(f(e) làluồngtrêncạnh e) thỏamãmcácđiềukiện: • Vớimỗi e:0≤f(e)≤c(e). • Điềukiệncânbằngluồng :vớimọiv≠s,t: Trongđó(v),(v) làtậpcungđiváo ,đirakhỏi v; giátrịcủaluồng :
Vídụ: 1/3 v t 2/6 3/7 s 3/3 4/5 w 2/9 3/5 1/1 u z 2/2
Luồngtrongmạng G đượcgọilàluồngcựcđạinếutrongsốtấtcảcácluồngtrongmạng G thìnólàluồngcógiátrịlớnnhất. • Chú ý:trong slide nàychúng ta giảsửrằngkhinóitớiluồng f tứclà ta chỉxéttớiluồng 0-1. Luồng 0-1 làluồngmàmỗicạnhcủachúngkhôngcóluồnghoặcnếucóthìchỉcóduynhất 1 đơnvị.
Paths flow • Có1 tươngứnggiữađườngđivàluồngtrongmạng. • Giảsửcó k đườngtừ s tới t màcócáccạnhphânbiệt. Khiđó ta cầnphảichuyểnmỗi 1 đơnvịcủaluồngtrênmỗiđườngđisaochokhông vi phạmvàocôngsuấtchophépcủamỗiluồng. • Bổđề:nếucó k đườngđitừ s tới t màcáccạnhcủachúnglàphânbiệttrongđồthịcóhướng,cótrọngsốlàđơnvị(unit-weight) G thìgiátrịcủaluồngcựcđại s-t ≥k
Flow paths • Địnhlý:nếutồntại 1 luồngcógiátrị k trongđồthịcóhướng,cótrọngsốlàđơnvị G thìsẽtồntạiítnhất k đườngđimàcáccạnhcủachúnglàphânbiệt. • Cóthểphátbiểulạiđltrênnhưsau: Nếutồntaị 1 luồng 0-1 cógiátrịk,thìtậpcáccạnhthỏamãn f(e) =1 sẽsinhratậpchứa k đườngđimàcócáccạnhphânbiệt.
Giảsửcho (s,u) là 1 cungcó f(e)=1;khi đótheotínhchấtcủaluồng ta cóítnhất 1 cungk cógiátrịluồng f(k)=1. • Tiếptụclặplạibướctrênthì ta sẽcóđược: -Đườngđitừ s tới t (1) -Vònglặpvôhạn(chutrình)
(1) K=2 S T U
(1) K=1 S T U
Nếutìmđược 1 đườngđitừ s tới t thìsẽgiảmcácluồngtrêncáccạnhđóxuống 0,do đósẽtạothành 1 luồngmới f’. • Giátrịcủaluồngmớilà k-1. • Sốcungtrênluồngmớilúcnàysẽgiảmđi,tiếptụcápdụngquynạpđểtìm k-1 egde disjoint paths trong f’. • Trongkhitìmđườngđichúng ta cũngcóthểgặpphảichutrình.
(2) Tạochutrình T S U
(2) Tạochutrình T S U
(2) Tạochutrình T S U
Chúng ta cóthểtìm 1 chutrình ,sauđógiảmgiátrịcủaluồngtrêncáccungđóvề 0,do đósẽtạora 1 luồngmới f’. • Luồngmớivẫncógiátrịlà k. • Tuynhiênsốcungcủaluồngmớiđãgiảmđi,nhưng ta vẫncóthểtiếptụcápdụngquynạpđểtìm k egdedisjoint paths trênluồng f’. • Khi k=1 rõràngchỉcó 1 egde disjoint path.
Path decomposition algorithm • Tìmluồngcựcđạitrongđồthị G • Bắtđầutừ s. • Nếuchúng ta tạođượcmộtchutrìnhthìgiảmgiátrịluồngtrêncáccungthuộcchutrìnhđóvề 0. • Nêúcuốicùngđiđượctới t thì output sẽthuđược 1 egde disjoint path.
Kếtluận • Chúng ta cóthểsửdụngthuậttoánluồngcựcđạiđểtìm k egde disjoint path từ s tới t trongđồthị. • Chúng ta cóthểnhúng1 luồngbấtkỳcógiátrị k nàotrên 1 đồthị unit-capacity đểcóthểtìmđược k egde disjoint paths . • Nóicáchkhácgiátrịcủaluồngsẽchochúng ta biếtsốegde disjoint path.