CS 1 Algorim nd Progrm Exm Soluion Jonn Turnr 11/8/01 B n nd oni, u ompl. 1. (10 poin). Conidr vrion of or p prolm wi mulipliiv o. In i form of prolm, lng of p i produ of dg lng, rr n um. Explin ow or p lgorim n modifid o ndl mulipliiv o. W i impliion of ving poiiv dg o r l n 1? On wy o do i i o rpl originl o y ir logrim nd n u ndrd or p lgorim on grp wi rnformd o. T rul din mu n rnformd k o giv mulipliiv din. Sin logrim of produ i qul o um of logrim, i produr yild or mulipliiv p. Alrnivly, on n modify originl lgorim o rpl xprion of form di(u) + lng(u,v) wi di(u) * lng(u,v) in or p lgorim. T orrn of i follow from logrim rnformion. Poiiv dg o l n 1 rdu p lng nd v m ff ngiv dg lng in ndrd prolm. If u dg r prn, Dijkr lgorim nno ud.. (10 poin) Inr flow in nwork own low y finding n ugmning p uing din lling lgorim. Wnvr r r mulipl dmiil dg vill for xnding p, u on wo or ndpoin om fir in lpil ordr. B ur o ow ow din ll ng, wll owing ugmning p found. 1 6,, f 8, 1,0,0,0 d 0 7, 6, 1,0 7, g,, 1 T ugmning p i own in old nd modifid din ll r lo own in old. T ugmning p ridul piy of 1. 6,, f 8, 1,0,0,1 d 0 7, 6, 1,1 7,6 g, - 1 -, 1
. (1 poin) T piur low ow n implmnion of dynmi r, uing linkd p rprnd y inry r r. Drw ul r i rprn (wi vrx o). Auming ul r i ing ud in mximum flow ompuion, w i ridul piy of p from o in ul r. Wi dg om urd if mximum poil moun of flow i ddd o i p? min, o, 10 1,0 0,1 i g k,1,0 d 0,0 96, m, 1,0 f 0,0 g n 0,0 i,0 d 6 T ul r ppr rig. T dg from d o i only on om urd fr uni of flow r ddd o p kfd. 8 n m 7 f k 6 6 - -
. (10 poin) T diffrnil o rprnion ud y p d ruur rquir min nd o updd during roion oprion. Sow wo quion low r orr. o, min x,1 z 0,1 1,1, o, min 1,1 z, x 1, o'(x) = o(x) min'(x) o'(x) = o(x) mino'(x) = o(x) (mino'(z) + min'(x)) = o(x) mino(x) min'(x) = o(x) min'(x) min'() = min() min'(x) + min(z) mino'() = mino'(z) + min'(x) + min'() min'() = mino'() mino'(z) min'(x) = mino() mino(x) min'(x) = mino(x) + min(z) + min() mino(x) min'(x) = min(z) + min() min'(x) - -
. (1 poin) W v own Dini lgorim wi or p ugmnion k O(mn)=O(n ) im o find loking flow in lvl grp. Sow i lo k Ω(n ) im in wor-, y owing for om onn C nd ny vlu of n, r i lvl grp on wi Dini lgorim k l Cn im. dg pii qul o n. dg pii qul o n. n n/ vri nd dg pii qul o n. ompl ipri grp wi n/ vri nd dg pii ll qul o 1. T ndrd vrion of Dini lgorim will find n/ p in i lvl grp nd for p i will rr p lf, mning i will k Ω(n ) im ovrll. In onr, Slor-Trjn vrion of Dini lgorim will run in O(n log n) im, in i n ffivly rvr long p lf in O(log n) im uing dynmi r d ruur. - -
6. (10 poin) Sow wv mod run fr on uni nwork n on gnrl nwork. How do wv mod ompr o ndrd vrion of Dini lgorim on uni nwork? From nlyi of Dini lgorim on uni nwork, w know numr of loking p rquird o find mximum flow i O(n 1/ ). Ti ppli o wv mod wll. Sin wv mod find loking flow in O(n ) im, ovrll running im i O(n / ), wi i r n O(n ) for gnrl grp, u no good O(mn 1/ ) ndrd vrion of Dini lgorim iv on uni nwork. 7. (1 poin). Conidr d ruur minin ollion of li of im, wi im ppring on on li, nd uppor following oprion: on(l 1, L ) Comin li L 1 wi li L. op(x) Spr li onining x ino wo li, on onining ll lmn prding x nd on onining x nd ll lmn following i. rvr(l) Rvr ordr of lmn in li L. il(l) Rurn l lmn of li onining L. T oprion n implmnd ffiinly uing lf-djuing inry r r o rprn li, upplmnd wi flip i nod. If um of flip i on p from nod o roo of r i vn, n lf ur of nod x onin im ppr for x in i li nd rig ur onin im ppr fr x in i li. If um i odd, lf ur onin im ppr fr x in i li nd rig ur onin im ppr for i. Fill in C++ od ndd o implmn rvr, il nd on oprion. You nd no ow ow ro oprion r modifid o ndl flip i. l li { in n; // li dfind on im 1..n ru nod { in flip; // flip i im prn; // prn in r r im l; // lf ild im r; // rig ild } *v; // vor of nod puli:... im li::rvr(li L){ v[l].flip =!v[l].flip; - -
im li::il(li L) { in f; if (L == Null) rurn Null; f = v[l].flip & 1; wil (1) { if (f == 0 && v[l].r Null) { L = v[l].r; f = (f + v[l].flip) & 1; } l if (f == 1 && v[l].l Null) { L = v[l].l; f = (f + v[l].flip) & 1; } l rurn ply(l); } im li::on(li L1, li L) { in ; if (L1 == Null) rurn L; l if (L == Null) rurn L1; = il(l1); if (v[].flip == 0) v[].r = L; l { L.flip = (L.flip + 1) & 1; v[].l = L; } v[l].prn = L1; rurn L1; - 6 -