Övningsmästarprov 2 + några NP-reduktioner Algoritmer, datastrukturer och komplexitet
Idag Första timmen: övningsmästarprov 2 Andra timmen: NP-reduktioner
Uppgiftsbeskrivning Låt oss ta bort kravet på att orden i den packade texten i övningsmästarprov 1 ska vara i samma ordning som i indata. Då kan det vara möjligt att packa texten på färre rader än den giriga algoritmen kan. Textpackningsproblemet har som indata ordlängderna w1,..., wn och radlängden len. Alla tal i indata är positiva heltal. Problemet är att ta reda på det minimala antalet rader av längd len som de n orden kan rymmas på om det är tillåtet att blanda om orden. Orden ska ha mellanslag mellan sig när dom placeras ut på raderna, precis som i övningsmästarprov 1. Formulera detta minimeringsproblem som ett beslutsproblem (genom att införa ett mål) och visa att beslutsproblemet är NP-fullständigt. När du ska visa att problemet är NP-svårt är det lämpligt att reducera problemet Mängdpartitionering (givet en multimängd positiva heltal, går det att partitionera talen i två delar som har samma summa?).
Vi inför ett mål K i indata i formuleringen av minimeringsproblemet som beslutsproblem: Indata: ordlängder w1,..., wn, radlängd len, mål K. Alla tal är positiva heltal och alla ordlängder är högst len. Fråga: Går det att pussla in alla n ord på K rader av längd len så att det finns ett mellanslag mellan varje par av närliggande ord på samma rad?
Först visar vi att textpackningsproblemet ligger i NP. För varje ja-instans ska en lösning kunna verifieras i polynomisk tid. Låt lösningen vara utplaceringen av orden på K rader, alltså vilka ord som ska placeras på vilken rad, till exempel representerad som en funktion f från [1..n] till [1..K]. När lösningen är formulerad som en funktion på detta sätt behöver verifieringsalgoritmen bara kolla att längden, inklusive mellanslag, inte blir större än len på någon rad. Om K n är det trivialt att det finns en lösning (med ett ord på varje rad).
Först visar vi att textpackningsproblemet ligger i NP. För varje jainstans ska en lösning kunna verifieras i polynomisk tid. Låt lösningen vara utplaceringen av orden på K rader, alltså vilka ord som ska placeras på vilken rad, till exempel representerad som en funktion f från [1..n] till [1..K]. När lösningen är formulerad som en funktion på detta sätt behöver verifieringsalgoritmen bara kolla att längden, inklusive mellanslag, inte blir större än len på någon rad. Om K n är det trivialt att det finns en lösning (med ett ord på varje rad). Tidskomplexiteten för verifieringsalgoritmen är O(n) med enhetskostnad. Om antalet bitar i talen i indata är högst m så tar en addition bitkostnaden O(m) och bitkomplexiteten för algoritmen blir O(nm) som är polynomiskt.
Vi visar nu att problemet är NP-svårt med en reduktion av mängdpartitionering. Idén är att varje tal i indata till mängdpartitioneringsproblemet ska motsvaras av ett ord med en viss längd i textpackningsproblemet, så att vi kan få in alla ord på två rader om och endast om det går att partitionera talen i två delar med samma summa. Mellan varje ord finns det ett mellanslag. För att ta hänsyn till det borde vi låta ordlängden vara ett mindre än talets storlek, men då kommer talet ett att motsvara ordlängden noll, och det är en otillåten ordlängd. För att undvika ordlängden noll tar vi och multiplicerar varje tal med samma heltalskonstant (till exempel 2, men större tal fungerar också) innan vi drar bort ett för att få ordlängden. Då motsvaras talet 1 av ordlängden 2 1 1 = 1. Radlängden ska sättas till ett mindre än summan av alla tal, eftersom det inte är något mellanslag efter sista ordet på raden.
MÄNGDPARTITIONERING({s1, s2,..., sn}) = σ 0 for i 1 to n do wi 2si 1 σ σ + si len σ 1 K 2 return TEXTPACKING({w1, w2,..., wn}, len, K)
Indata: {s1, s2, s3, sn} = {1, 2, 3, 4} {w1, w2, w3, w4} = {1, 3, 5, 7} len: 1+2+3+4-1 = 9 1 (1) 7 (4) 3 (2) 5 (3)
För att bevisa att detta är en Karpreduktion ska vi visa att varje ja-instans för mängdpartitioneringsproblemet transformeras till en ja-instans för textpackningsproblemet och att varje nej-instans för mängdpartitioneringsproblemet transformeras till en nej-instans för textpacknings- problemet. Den andra delen är ekvivalent med att visa att för varje jainstans för textpacknings- problemet som kan skapas av transformationen så är motsvarande mängdpartitioneringsinstans en ja-instans. I en uppgift på E-nivå krävs inte att dessa två bevis genomförs i detalj
Om det finns en partitionering av {s1, s2,..., sn} i A och B där summan av talen i A är lika med summan av talen i B så ska vi visa att det finns en textpackning på 2 rader av längd σ 1 där σ är summan av alla talen {s1, s2,..., sn}. Eftersom A och B har samma summa så måste σ/2 vara precis denna summa. Om vi placerar ut orden som motsvarar talen i A på första raden och orden som motsvarar talen i B på andra raden så blir båda radlängderna 2σ/2 1 = σ 1 eftersom varje ord, inräknat det efterföljande mellanslaget (dvs ordlängden plus 1), är dubbelt så långt som motsvarande tals värde och det sista ordet på raden inte har något mellanslag efter sig. Därför uppfyller textpackningen villkoret.
Anta nu istället att vi har en textpackning på två rader av längd σ 1 och visa att det finns en mängdpartitionering. Lägg till ett mellanslag efter sista ordet på varje rad. Summan av alla ordlängder på varje rad inklusive efterföljande mellanslag är nu högst σ och motsva- rande tal har då summan högst σ/2. Eftersom summan av alla tal är σ så blir det en jämn partitionering om vi låter A vara talen som motsvarar orden på första raden och B övriga.
Det är också nödvändigt att visa att Karpreduktionen tar polynomisk tid. Reduktionen ovan tar med bitkostnad tid O(nm), där m är antalet bitar i största talet i indata, vilket är polynomiskt. Alltså är textpackningsproblemet NPfullständigt.
Bedömningskriterier Kamraträttarens namn: Den bedömda elevens namn: Rättningsprotokoll för övningsmästarprov 2 i adk18 Bedömningskriterium NP-fullständighet och NP-tillhörighet Förklarar vilka steg som behöver ingå i NPfullständighetsbevis, och vad varje steg är bra till Formulerar problemet som ett beslutsproblem Förklarar vad en lösning består av Beskriver hur man verifierar en ja-lösning eller visar NP-tillhörighet på ett annat acceptabelt sätt Motiverar att verifikationsalgoritmen (motsv.) är polynomisk Reduktionsalgoritm Beskriver reduktionen övergripande i ord och eventuellt i bild Beskriver reduktionen tillräckligt tydligt (pseudokod inte nödvändigt) Reduktionen är korrekt Tidskomplexitet för reduktionen Anger komplexitet(-sklass) för reduktionen, eller vilken som krävs för NP-reduktioner i allmänhet Motiverar tidskomplexitet (överensstämmer med algoritmen och den angivna komplexiteten) Korrekthetsresonemang Förklarar vad man behöver visa i ett korrekthetsbevis för en NP-reduktion Genomför ett korrekt resonemang som omfattar alla nödvändiga delar Helt rätt Litet fel Fel/saknas M M M M M M Kan ej bedöma Förklaring till bedömningen
Bara den som har med sig en lösning på övningsmästarprovet kan delta i resten av övningen Om ni inte har en lösning med er kan ni gå nu (ni får ta med er bedömningsinstruktionsbladet). Ni är välkomna tillbaka andra timmen on ni vill :)
Dela in er i par! Om ni jobbat ihop med lösningen får ni inte vara i samma par. Om ni är ojämnt antal blir en grupp tre. Byt lösningar inom paren Genomför kamratbedömning enskilt enligt instruktionerna (prata inte med den ni rättar när ni gör detta, även om något i lösningen är oklart) Därefter: diskutera era bedömningar med varandra (inom varje par alltså). Jag kommer dela ut närvarolistor jag vill att ni skriver på. När ni är klara: lämna in era lösningar. Behåll bedömningsprotokollen. Ta rast/gå hem.
Reduktion 3-SAT till största oberoende mängd 3-SAT: (x y z) && (!x u!v) && (!y!z u)... Oberoende mängd: finns en delmängd av hörn i en graf sådan att delmängden har storlek k och inte ett enda par av hörn i delmängden har en kant mellan sig
Reduktion 3-SAT till oberoende mängd Skapa en komponent av varje klausul (k st) Tre hörn som sitter ihop i en triangel ett hörn per literal (x, y, z) Har nu lika många komponenter som klausuler (k st) För varje hörn som motsvarar x, dra en kant till alla hörn som motsvarar!x Om det finns en oberoende mängd av storlek k så är SATinstansen satistfierbar
Reduktion 3-SAT till oberoende mängd
Reduktion Partyproblemet Vi ska ha fest och vill bjuda så många personer som möjligt Tyvärr är vi karaktärer i tv-serien Gossip Girl, och på grund av detta är det mycket drama i våra liv Vissa av våra vänner skyr varandra som pest, och vägrar gå på samma fest Andra älskar varandra mer än allt, och kommer under inga omständigheter komma om inte hela deras grupp är bjuden Kommer vi lyckas ordna en stor fest eller borde vi ge upp?
Reduktion Partyproblemet Det går inte att lösa på polynomisk tid Dvs det är NP-fullständigt Kan reducera största oberoende mängd OM vi har en algoritm A som löser beslutsproblemet (kan vi ha en fest med k personer), hur kan vi avgöra vilka som ska bjudas?
Reduktion Partyproblemet OM vi har en algoritm A som löser beslutsproblemet (kan vi ha en fest med k personer), hur kan vi avgöra vilka som ska bjudas? En gadget: Gud, djävulen och Judas. Gud och djävulen har svårt för varandra Men båda älskar Judas Kan inte bjuda någon av dem Koppla denna gadget på en gäst i taget Judas kompis med gästen Går det fortfarande att bjuda k gäster? Ta bort Judas nya kompis, och alla hennes vänner från listan. Går det inte? Då måste nya kompisen komma. Gör henne till kompis med alla som är kvar på listan. G d J
Reduktion 3-SAT till delmängdsumma