320 likes | 497 Views
Bakpokaverkefnið. 4. apríl 2002. Bakpokaverkefnið. Fyrir ferðalag með geimskutlunni Megum taka með okkur muni að eigin vali Munirnir hafa mismikið gildi fyrir okkur Munirnir hafa einnig mismikla þyngd Viljum hámarka ‘gildi’ hluta sem við tökum Takmörk fyrir heildarvigt:.
E N D
Bakpokaverkefnið 4. apríl 2002
Bakpokaverkefnið • Fyrir ferðalag með geimskutlunni • Megum taka með okkur muni að eigin vali • Munirnir hafa mismikið gildi fyrir okkur • Munirnir hafa einnig mismikla þyngd • Viljum hámarka ‘gildi’ hluta sem við tökum • Takmörk fyrir heildarvigt:
Dæmi 2: Fjárfestingar • Fyrirtæki hefur úr 1 milljarði úr að spila • Fjárfesta má í misarðbærum rekstri: • Gagnagrunnur: 400 millj, væntiarður: 40mill. • Hótel: 500 millj, væntiarður: 50mill. • Frystihús: 200 millj, væntiarður: 20 millj. • Sjónvarpsstöð: 400 millj, væntiarður: 30 millj. • Bílasölu: 100 millj, væntiarður: 20 millj
Bakpokaverkefnið: Skilgreining • Gefið: n “hlutir” með • Kostnaður s1, s2, ..., sn ( kostnaður) • Framlegð f1, f2, ..., fn ( hagnaður) • Kostnaðarþak B • Finna: Mengi S af þessum hlutum þ.a. • Heildarvægi hlutanna sé minni en B iS si B • Heildarframlegð iS fisé hámarkað
0-1 Bestunarverkefni max i fixi subject to i sixi B xi{0,1}, i=1, 2, ..., n • LP slökun: 0 xi 1, i=1, 2, ..., n
Dæmi 3: • Höfum 800MB geisladisk til að skrifa á • Viljum troða eins miklu á hann og hægt er • Þetta er sértilfelli þar sem fi=si • “Subset Sum problem” = “Hlutasumma” • Einbeitum okkur að þessu, til einföldunar.
Eðlileg gráðug aðferð • Gráðugt val: • Bætum við stærsta staki sem kemst fyrir • Gráðug aðferð: • Endurtekið gráðugt val, uns engu má við bæta • Kostir: • Virkar almennt vel • Dýnamískt, þ.e. bæta má við eftir þörfum • Hversu góðri lausn skilar hún? Bestu??
Mótdæmi B=1 0.55 0.5 *2
Lausn með kvikri bestun • Virkar þegar þakið B er ekki of stórt • Lykilhugmynd: • Síðasta stakið/hluturinn er annað hvort valinn í pokann eður ei! • Ef við neglum niður þetta val, hvað fáum við þá til að kljást við? Hvað er eftir?
Stak n með?? Já Nei Poki rúmar nú B – sn til. Stök 1, ..., n-1 eftir. Poki rúmar enn B. Stök 1, ..., n-1 eftir.
Inntak: s1 s2 s3 s4 s5 s6 Bakpoki: B
a) Stak 6 valið með: s6 B - s6 b) Stak 6 ekki valið: B
a1) Stök 6 og 5 með: B – s6 – s5 a2) Stak 6 með, ekki 5: B - s6
b1) Stak 5 með: B – s5 b2) Hvorki stak 5 né 6: B
Aðalverkefni nB • Stök með vægi/umtak s1, s2, ..., sn • Kostnaðarþak B Undirverkefni: Stak n með • Stök með vægi/umtak s1, s2, ..., sn-1 • Kostnaðarþak B – sn n-1B-sn Undirverkefni: Stak n ekki með • Stök með vægi/umtak s1, s2, ..., sn-1 • Kostnaðarþak B n-1B
1 j B j-si 1 i n Bp(i,j) = Hámarks afrakstur af s1...si, þegar þak er j max(fi + Bp(i-1, j-si), Bp(i-1, j)), j si Bp(i-1, j), annars Bp(i,j) =
Neðansækin aðferð For j=0 to B do A[0,j] = 0 For i=1 to n do for j=1 to B do A[i,j] = A[i-1,j] if (j si AND fi + A[i-1, si ] A[i,j]) A[i,j] = fi + A[i-1, si ] return A[n,B]
Tímaflækja • O(n^2) ? • Fylkið er n * B. • Hvað er B?? • Er þetta margliðubundið? • Hvað táknar það?
Margliðubundin reiknirit • Reiknirit er margliðubundið, ef tímaflækja þess er efri mörkuð af margliðu í stærð inntaks. • Hver er stærð inntaksins hér? • s1, s2, ..., sn = n tölur minni en B • B • B er táknað með log B bitum • Stærð inntaks = O(n * log B).
Meira um tímaflækju • Reiknirit krefst O(n * B) tíma. • Inntaksstærð = O(n * log B). • Hversu stórt getur B orðið? • Af hverju ekki 2^n ? • Þá er aðferð okkar alls ekki margliðubundin • “Pseudopolynomial time” = Margliða af stærð inntaks og stærsta gildis.
Flækjustigshópurinn NP • NP = flokkur ákvörðunarverkefna sem eru leysanleg á margliðubundnum tíma af brigðgengri vél (non-deterministic polynomial time)
Brigðgeng vél • Giskar á n^t bita (eða tölur), t einhver fasti • Vinnur þaðan í frá eins og venjuleg tölva. • (“tölvur” eru allar jafnöflugar, innan margliðu) • Leysir verkefnið rétt, ef fyrir einhverja af þessum ágiskunum, þá skilar hún réttri lausn.
NP • NP = flokkur þeirra ákvörðunarverkefna þar sem sannreyna má tillögu að lausn á margliðutíma. • “Tillaga að lausn” : “certificate” • Sannreyning: • Prófa að tillagan sé gild lausn • Prófa að lausnin uppfylli kröfur verkefnisins
Sannreyning á 3-Litun • 3-Litun: Gefið net, má lita það með 3 litum? 3LitaPróf(G, Litur[]) // Gefin ‘litun’ á G fyrir hvern hnút v í V ef (Litur[v] > 3 || Litur[v]<1) skila “Ósatt” fyrir hvern u granna v ef (Litur[u] == Litur[v]) skila “Ósatt” skila “Satt”
Ákvörðunarverkefnið Bakpoki • Gefið: n “hlutir” með • Kostnaður s1, s2, ..., sn ( kostnaður) • Framlegð f1, f2, ..., fn ( hagnaður) • Kostnaðarþak B • Hagnaðarlágmark F • Spurning: Er til mengi S af hlutum þ.a. • Heildarvægi hlutanna sé minni en B: iS si B • Heildarframlegð sé allavega F: iS fi F
Bakpoki er í NP • “Certificate”: Hlutmengi S af hlutum • Sannprófun: Prófa hvort • iS si B • iS fi F
Subset Sum • Gefið: n “hlutir” með • Stærð s1, s2, ..., sn • Kostnaðarþak B • Finna: Mengi S af þessum hlutum þ.a. • Heildarvægi hlutanna sé minni en B iS si B • Heildarvægi sé hámarkað
Subset Sum ákvörðunarverkefni • Gefið: n “hlutir” með • Stærð s1, s2, ..., sn • Kostnaðarmark L • Finna: Mengi S af þessum hlutum þ.a. • Heildarvægi hlutanna sé nákvæmlegaL iS si=L
Umbreyting með sértekningu • Fullyrðing: SubsetSum p Bakpoki • Gefið inntak I f. SS, útbúum inntak I’ f. BP: • n hlutir sem áður • Sömu stærðir s1, s2, ..., sn • Framlegðir sama og stærðir, fi = si • B og F bæði gerð jöfn L • Nú er Bakpoki(I’) = SubsetSum(I)
Umbreyting með sértekningu • Fullyrðing: SubsetSum p Bakpoki • Gefið inntak I f. SS, útbúum inntak I’ f. BP: • Inntak I f. SubsetSum • n hlutir • Stærðir s1, s2, ..., sn • Kostnmark L • Inntak I’ f. Bakpoka • Sömu n hlutir • Sömu s1, s2, ..., sn • Framlegðir f1, ..., fn • Jafnar stærðum, fi = si • B = L, F = L • Nú er Bakpoki(I’) = SubsetSum(I)
Ákvörðunarverkefnið 2-Hlutun • Gefið: Mengi U með n “hlutum” með kostnað s1, s2, ..., sn • Finna: Skiptingu í mengin S og S’ • U = S S’, og S S’ = • Skorða: Dreifa kostnaðinum allveg jafnt • iS si = iS’ si
Önnur einföld umbreyting • Fullyrðing: 2-Hlutun p SubsetSum • Gefið inntak I f. 2H, útbúum inntak I’ f. SS: • n hlutir sem áður • Sömu stærðir s1, s2, ..., sn • Setjum L = (i=1,...,n si) / 2 • SubsetSum(I’) = “já” 2Hlutun(I) = “já”