Kompleksitet. IN algoritmer og datastrukturer Plenumstime / repetisjon

Like dokumenter
Kompleksitet og Beregnbarhet

Repetisjon og mer motivasjon. MAT1030 Diskret matematikk. Repetisjon og mer motivasjon

NP-kompletthet. «Hvordan gjøre noe lett for å vise at noe annet er vanskelig»

INF oktober Stein Krogdahl. Altså: Hva kan ikke gjøres raskt (med mindre P = NP)

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Maks Flyt og NPkompletthet

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Grafteori. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori.

MAT1030 Diskret Matematikk

MAT1030 Forelesning 23

Forelesning 23. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori.

Kompleksitetsteori reduksjoner

IN2010: Forelesning 11. Kombinatorisk søking Beregnbarhet og kompleksitet

Avgjørbarhet / Uavgjørbarhet

Korteste Vei II. Lars Vidar Magnusson Kapittel 24 Bellman-Ford algoritmen Dijkstra algoritmen

Grunnleggende Grafteori

Introduksjon til Algoritmeanalyse

UNIVERSITETET I OSLO

Studentnummer: Side 1 av 1. Løsningsforslag, Eksamen i TDT4120 Algoritmer og datastrukturer August 2005

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk

TMA4140 Diskret Matematikk Høst 2016

Forelesning 29: Kompleksitetsteori

MAT1030 Forelesning 25

Oversikt over kvadratiske kongruenser og Legendresymboler

UNIVERSITETET I OSLO

INF Stein Krogdahl. NB: Det som under forelesningen ble kalt et vitne er nå omdøpt til et sertifikat.

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Dag Normann

SIF8010 ALGORITMER OG DATASTRUKTURER

KONTINUASJONSEKSAMEN I TMA4140 LØSNINGSFORSLAG

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. INF1080 Logiske metoder for informatikk

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert.

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

INF2220: Time 8 og 9 - Kompleksitet, beregnbarhet og kombinatorisk søk

Forelesning 23. Grafteori. Dag Normann april Oppsummering. Oppsummering. Oppsummering. Digresjon: Firefarveproblemet

INF1080 Logiske metoder for informatikk. 1 Små oppgaver [70 poeng] 1.1 Grunnleggende mengdelære [3 poeng] 1.2 Utsagnslogikk [3 poeng]

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

MAT1030 Forelesning 22

LO118D Forelesning 2 (DM)

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

LO118D Forelesning 10 (DM)

INF oktober Dagens tema: Uavgjørbarhet. Neste uke: NP-kompletthet

MAT1030 Diskret matematikk

Vi kan finne formler som gir oss neste tall i tallfølgen dersom vi kjenner ett tall. Det er den rekursive formelen. gir oss gir oss alle tallene a

INF1080 Logiske metoder for informatikk. 1 Små oppgaver [70 poeng] 1.1 Grunnleggende mengdelære [3 poeng] 1.2 Utsagnslogikk [3 poeng]

MAT1030 Diskret matematikk

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Forelesning 23: Grafteori

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Alle mot alle. Åttende forelesning. (eller eller Bellman-Ford, eller BFS, alt ettersom) fra alle noder.

Analyse av Algoritmer

Forelesning 30. Kompleksitetsteori. Dag Normann mai Informasjon. Oppsummering

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

LO118D Forelesning 9 (DM)

MAT1030 Forelesning 22

Uretta grafar (1) Mengde nodar Mengde kantar som er eit uordna par av nodar

Introduksjon. MAT1030 Diskret matematikk. Søkealgoritmer for grafer. En graf

MAT1030 Diskret matematikk

Introduksjon. MAT1030 Diskret Matematikk. Introduksjon. En graf. Forelesning 22: Grafteori. Roger Antonsen

MAT1140: Kort sammendrag av grafteorien

UNIVERSITETET I OSLO

MAT1030 Forelesning 25

Forelesning 33. Repetisjon. Dag Normann mai Innledning. Kapittel 11

LØSNINGSFORSLAG, EKSAMEN I ALGORITMER OG DATASTRUKTURER (IT1105)

Eksamen MAT H Løsninger

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Roger Antonsen

INF Algoritmer og datastrukturer

Dijkstras algoritme Spørsmål

GRAFER. Noen grafdefinisjoner. Korteste vei i en uvektet graf V 2 V 1 V 5 V 3 V 4 V 6

Oversikt over det kinesiske restteoremet

Korteste vei problemet (seksjon 15.3)

Forelesning 30: Kompleksitetsteori

MAT1030 Diskret matematikk

Løsnings forslag i java In115, Våren 1998

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

UNIVERSITETET I OSLO. Med svar-forslag

Binomialkoeffisienter

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

Norsk informatikkolympiade runde

Eksamen i tdt4120 Algoritmer og datastrukturer

MAT1030 Diskret matematikk

45011 Algoritmer og datastrukturer Løsningsforslag eksamen 13. januar 1992

MAT1140: Kort sammendrag av grafteorien

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

INF3/4130 PRØVE-EKSAMEN MED SVARFORSLAG Gjennomgås 1/ , (lille aud.)

Notat for oblig 2, INF3/4130 h07

INF1020 Algoritmer og datastrukturer GRAFER

UNIVERSITETET I OSLO

MAT1030 Forelesning 24

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

TMA4140 Diskret Matematikk Høst 2018

Transkript:

Kompleksitet IN2010 - algoritmer og datastrukturer Plenumstime / repetisjon

Dagens agenda Kompleksitet - hva er det? Avgjørelsesproblemer Kompleksitetsklassene P og NP Reduksjoner - å redusere et problem til et annet NP-kompletthet Uløselige problemer? Still spørsmål hvis du lurer på noe! Det er derfor vi har denne timen :)

Hva er kompleksitet? Handler om å beskrive hvor vanskelige noen problemer er å løse. Hvis den beste kjente algoritmen som løser et problem tar lang tid og/eller mye plass, kan vi si at det er et vanskelig problem. Det finnes mange forskjellige kompleksitetsklasser, der problemer som er ansett for å være ca like vanskelige er gruppert sammen. Vi skal se på to av disse: P og NP, samt NP-hard og NP-komplett, som er egenskaper ved problemer, men vi kan også si mengden av problemer som er NP-harde og dermed tenke på dem som kompleksitetsklasser.

Avgjørelsesproblemer/Decision problems Problemer der svaret er enten JA eller NEI En algoritme som avgjør problemet, vil svare JA/akseptere/return true på alle n som er primtall, og NEI/avvise/return false på alle n som ikke er primtall. Vi kan se for oss at for alle avgjørelsesproblemer, så finnes det en mengde av instanser som aksepteres av algoritmen (JA-instanser) og en mengde av instanser som avvises av algoritmen (NEI-instanser).

P Mengden av alle problemer som avgjøres av en algoritme som kjører i polynom tid. Altså, algoritmen som avgjør problemet er O(n k ). Det vil si, alle problemer der vi kjenner til en algoritme som kjører i polynomtid. Eksempel: erpartall(n): 1. Regn ut n mod 2 2. Hvis svaret er 0, si JA. 3. Hvis svaret er 1, si NEI. PARTALL Instans: et tall n Spørsmål: er n et partall? Denne algoritmen kjører i polynomtid fordi modulo kan regnes ut i polynomtid

Er følgende problem i P? Korteste sti: Instans: en vektet graf G, en sti s = (v 1, e 1, v 2, e 2, v n ) Spørsmål: er stien s den korteste veien mellom v 1 og v n i G? Ja. Algoritmen som avgjør spørsmålet bruker Dijkstra eller Bellman-Ford med v 1 som startnode. Sjekker om summen av s er det samme som avstanden til v n.

NP Mengden av alle problemer som kan verifiseres av en algoritme som kjører i polynom tid. Altså, det finnes en algoritme tar inn en instans og et forslag til en løsning (sertifikat), og kan si JA eller NEI på om sertifikatet er en gyldig løsning. Eksempel: verifiserpartition(s, s 1, s 2 ): 1. Summer alle elementer i s 1 til tallet t 1, summer alle elementene i s 2 til tallet t 2. 2. Hvis t 1 = t 2, si JA, hvis ikke, si NEI. Instans: Spørsmål: En mengde S PARTITION Kan S partisjoneres til to delmengder S 1 og S 2, slik at S 1 og S 2 summerer til det samme tallet?

P NP Hvis vi har en algoritme som løser svaret i polynomtid, kan den hvertfall verifiseres i polynomtid! verifikatortiletproblemip(instans, sertifikat): 1. Regn ut løsningen til instans. 2. Sjekk om sertifikat = løsningen. 3. Hvis den er lik, svar JA. Hvis ikke, svar NEI. Vi trenger ikke verifisere problemene i P, fordi vi kan regne dem ut

Løse problemer i NP? Hvis vi vil løse problemer i NP kan vi f eks finne alle mulige løsninger for en instans, og kjøre de gjennom verifikatoren etter tur for å få bekreftet om en av de stemmer. Antall mulige partisjoner av en mengde: https://en.wikipedia.org/wiki/bell_number Bell numbers are defined as the number of partitions of a set of n elements. They can easily be calculated recursively. [...] as long as n<=22 https://www.rdocumentation.org/packages/numbers/versions/0.7-1/topics/bell Å finne alle mulige løsninger vil i de fleste tilfeller ta eksponensiell tid. Når størrelsen av input til problemet blir veldig stor, vil det i praksis være umulig å regne ut, fordi det kan ta så lang tid at vi dør før utregningen er ferdig :(

Løse NP-problemer i praksis I praksis er det flere av problemene i NP som kan løses med heuristikk https://en.wikipedia.org/wiki/heuristic_(computer_science) Så selv om vi sier at problemene i NP er veldig vanskelige å løse, kan vi underveis gjøre valg som utelukker muligheter som virker usannsynlige. Hvis vi for eksempel vil finne en sti mellom to noder i en graf hvor kosten til den totale stien skal være under et visst tall k, kan vi la være å traversere kanter med en kost som er prosentvis stort i forhold til k.

Vise at problemer er i NP Vi kan vise at et problem er i NP ved å gi verifikatoren og sertifikatet, og argumentere for at verifikatoren kjører i polynom tid.

Eksempel Vis at SAT er i NP Sertifikatet er en valuasjon, altså en tilordning av verdier til alle variabler i F. verifisersat(f, v): der v er en valuasjon 1. Fyll inn verdiene fra v i formelen F. 2. Evaluer F. 3. Hvis F er sann, svar JA. Hvis ikke, svar NEI. Algoritmen verifisersat kjører i polynom tid. Punkt 1 og 2 tar lineær tid, og punkt 3 tar konstant tid.

Eksempel 2 Vis at TSP er i NP. Stien er sertifikatet. verifisertsp(g, k, s): 1. Sjekk at s er en gyldig sti i G, og at s inneholder alle nodene i G. 2. Summer vekten til alle kantene i s. 3. Hvis summen < k, si JA. Hvis ikke, si NEI. Algoritmen verifisertsp kjører i polynom tid, fordi 1 tar polynom tid, og 2 tar lineær tid, og 3 konstant tid.

Vise at problemer er i P For å vise at et problem er i P, må vi finne en algoritme som løser problemet, og argumentere for at denne kjører i polynom tid. Hva med dette problemet: Besøk alle noder Instans: En graf G og en node N Spørsmål: Kan alle nodene i grafen besøkes fra N?

Reduksjoner En reduksjon løser ikke problemet, den oversetter problemet til et annet problem. En reduksjon fra et problem A til et problem B er en funksjon f(x), slik at: x A f(x) B Altså, hvis en instans x er en JA-instans av A, vil f(x) være en JA-instans av B. Hvis x er en NEI-instans av A, er f(x) en NEI-instans av B. Hvis A kan reduseres til B skriver vi A B. Vi kan tenke på det som A er mindre vanskelig eller like vanskelig som B.

Eksempel på en reduksjon Reduksjonen fra ODDETALL til PARTALL Instans: ODDETALL et naturlig tall n Instans: PARTALL et naturlig tall n er en funksjon tar inn en instans av problemet Spørsmål: er n et oddetall? Spørsmål: er n et partall? ODDETALL, og gir ut en instans av problemet PARTALL. Hvis input er en JA-instans av ODDETALL, skal output være en JA-instans av PARTALL. Hvis input er en NEI-instans av ODDETALL, skal output være en NEI-instans av PARTALL. Dette er en reduksjon fra ODDETALL til PARTALL: f(n) = n + 1

Eksempel på en reduksjon forts. fra forrige slide: f(n) = n + 1, f er en reduksjon fra ODDETALL til PARTALL Hvorfor stemmer dette? La oss kalle JA-instansene til ODDETALL for A, og JA-instansene til PARTALL for B. Vi vet at A = {1, 3, 5, 7, } og at B = {2, 4, 6, 8,...} Hvis x A, så er f(x) B, og hvis x A, så er f(x) B. f er dermed en korrekt reduksjon fra ODDETALL til PARTALL. Vi skriver ODDETALL PARTALL Vi vet altså at hvis vi kan løse problemet PARTALL, kan vi løse problemet ODDETALL. Å finne oddetall er enklere eller like vanskelig som å finne partall.

Oppgave til dere: Vis at PARTALL ODDETALL La oss kalle JA-instansene til ODDETALL for A, og JA-instansene til PARTALL for B. Vi vet at A = {1, 3, 5, 7, } og at B = {2, 4, 6, 8,...} Vi kan bruke den samme reduksjonen fra forrige eksempel: f(n) = n + 1 Fordi hvis x B, så er f(x) A, og hvis x B, så er f(x) A. Vi har vist at x B f(x) A, dermed er f en korrekt reduksjon fra PARTALL til ODDETALL. PARTALL ODDETALL

Siden PARTALL ODDETALL og ODDETALL PARTALL kan vi si at problemene er like vanskelige. Og det stemmer godt med intuisjonen vår.

Litt om å lage reduksjoner Når det gjelder reduksjoner mellom grafproblemer og liknende kan vi ikke lage et matematisk funksjonsutrykk like enkelt som i eksempelet med partall/oddetall. Da bruker vi ord for å beskrive hva reduksjonen vår gjør, akkurat som de andre algoritmene i eksemplene til nå. Reduksjonen trenger bare å fungere den ene veien! Derfor kan vi av og til spesialdesigne en NEI-instans, eller legge på en ekstra node eller to for å tvinge reduksjonen vår til å fungere. Dette krever gjerne litt oppfinnsomhet. Jo likere to problemer er, jo enklere er det å lage reduksjoner mellom dem. Husk at reduksjonen er en algoritme som skal oversette problemene, ikke løse dem!

NP-kompletthet Definisjon: Et problem A er NP-komplett hvis: 1. A er i NP 2. For alle problemer B i NP, så kan B polynomtid-reduseres til A Polynomtid-reduseres betyr at det finnes en reduksjon fra B til A som kjører i polynom tid. Vi skriver B P A Problemer som oppfyller punkt 2 kaller vi NP-harde.

Forholdet mellom kompleksitetsklassene vi har lært om så langt, gitt antagelsen om at P NP https://www.youtube.com/watch?v=yx40hbahx3s

Hvorfor lager vi reduksjoner? For å bestemme kompleksiteten til ukjente problemer. Hvis vi viser at A P B, vet vi at B er like vanskelig, eller vanskeligere enn A. Hvis vi har en algoritme som avgjør B, kan vi dermed løse alle problemer i A. Fordi algoritmen som avgjør A, vil bestå av reduksjonen fra A til B, + algoritmen som avgjør B. Vi bare sender output av reduksjonen inn til algoritmen til B. Hvis B er i P, og A P B, så er også A i P. Fordi reduksjonen kjører i polynomtid, og algoritmen til B kjører i polynom tid, og det betyr at algoritmen til A også kjører i polynom tid. Hvis A er NP-hard, og A P B, så er B også NP-hard.

NP-komplette problemer vi kjenner til

NP-komplette problemer vi kjenner til + Hamiltonsk sykel + Sudoku + Super Mario Bros +++

Vise at et problem er NP-komplett Typisk oppgave: Vis at A er NP-komplett. Da må vi: 1. Vise at A er i NP (Vis at det kan verifiseres i polynom tid) 2. Vise at alle problemer i NP kan reduseres til A i polynom tid (Altså reduser et kjent NP-komplett problem til A, og vis at funksjonen kjører i polynom tid)* * Vi vet at alle problem i NP kan reduseres til NP-komplette problemer, så hvis vi kan redusere et NP-komplett problem til A, så vet vi at alle problemer i NP kan reduseres til A (via det NP-komplette problemet).

Eksempel Vis at følgende problem er NP-komplett: 3Partition Vi må vise at: 1. 3Partition er i NP 2. 3Partition er NP-hardt Først viser vi at 3Partition er i NP: Instans: Spørsmål: En mengde S Kan S partisjoneres inn i tre delmengder som summerer til det samme? Sertifikatet er de tre delmengdene. verifiser3partition(s, s 1, s 2, s 3 ): 1. Summer alle elementer i s 1 til tallet t 1, summer alle elementene i s 2 til tallet t 2, summer alle elementene i s 3 til tallet t 3. 2. Hvis t 1 = t 2 = t 3, si JA, hvis ikke, si NEI. At verifikatoren kjører i polynom tid er trivielt.

forts. 3Partition Så viser vi at det er NP-hardt ved å redusere PARTITION til 3PARTITION: partitiontil3partition(s): 1. Regn ut summen av alle elementene i S, kall summen z. 2. Hvis z er et oddetall, output {1} 3. Hvis z er et partall, legg til z/2 i den originale mengden, output denne. Denne kjører i polynomtid, for å summere elementene i en mengde kan gjøres i polynomtid. Den er korrekt, for hvis det fantes en partisjon av den originale mengden så vil summen av hver av de to være z/2, samme som elementet vi la til. Da vil JA-instanser av PARTITION gi JA-instanser av 3Partition, og NEI-instanser av PARTITION gi NEI-instanser av 3PARTITION.

Vis at SUBGRAPH-ISO er NP-komplett Sertifikatet er mappingen av noder (en mengde av tupler (v 1, v 2 ) der v 1 V G og v 2 V H ) verifisersubgraphiso(g, H, m): 1. Sjekk at alle noder i H er dekket i m, hvis ikke, si NEI. 2. Sjekk at for alle kanter i H, finnes den tilsvarende kanten i G, hvis ikke, si NEI. 3. Hvis alt stemmer, si JA.

CLIQUE P SUBGRAPH-ISOMORPHISM Viser at SUBGRAPH-ISOMORPHISM er NP-hardt ved å vise at CLIQUE P SUBGRAPH-ISO redusercliquetilsubgraphiso(g, k): 1. Lag en clique av størrelse k, kall den C. 2. Output G, C Hvis G har en clique av størrelse k, så er C en subgraf av G. Hvis G ikke har en clique av størrelse k, så er ikke C en subgraf av G. Reduksjonen er korrekt, fordi hvis den får en input som er en JA-instans av CLIQUE, så gir den en output som er en JA-instans av SUBGRAPH-ISOMORPHISM, og NEI-instanser av CLIQUE gir NEI-instanser av SUBGRAPH-ISOMORPHISM. Den kjører i O(k 2 ) tid.

Uavgjørbare problemer Vi sa at problemer er i P hvis de kan avgjøres* i polynomtid, og i NP hvis de kan avgjøres av en non-deterministisk algoritme i polynomtid. Det finnes problemer det ikke går an å avgjøre, fordi det er umulig å lage en algoritme som sier JA eller NEI til en instans av problemet. *avgjøres = en algoritme får en instans av problemet som input og har output JA eller NEI.

Stoppeproblemet Instans: En algoritme A og en inputstreng s Spørsmål: Stopper algoritmen på input s? (Hvis vi kaller A(s), stopper A eller looper evig?) https://www.youtube.com/watch?v=92whn-pafcs

Oppsummering Avgjørelsesproblemer - problemer der algoritmen sier JA eller NEI til instanser P - finnes en polynomtid algoritme som avgjør problemet NP - finnes en polynomtid algoritme som verifiserer problemet (algoritmen tar input instans + sertifikat, gir output JA/NEI) Polynomtid-reduksjoner - polynomtid algoritmer som oversetter instanser av ett problem til et annet, og beholder JA/NEI-egenskapene NP-hard - alle problemer i NP kan polynomtid-reduseres til dette NP-komplett - i NP + NP-hard