Algoritmer, datastrukturer och komplexitet

Relevanta dokument
Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 1. Introduktion. Vad är en algoritm?

Dekomposition och dynamisk programmering

Algoritmer, datastrukturer och komplexitet

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

i=1 c i = B och c i = a i eller c i = b i för 1 i n. Beskriv och analysera en algoritm som löser detta problem med hjälp av dynamisk programmering.

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Komplexitetsklasser och repetition

Föreläsning 5: Dynamisk programmering

Föreläsning 5 Innehåll

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Föreläsning 5: Kardinalitet. Funktioners tillväxt

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering

Övningsmästarprov 2 + några NP-reduktioner. Algoritmer, datastrukturer och komplexitet

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Föreläsning 4: Giriga algoritmer. Giriga algoritmer

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Tommy Färnqvist, IDA, Linköpings universitet

Datastrukturer och algoritmer

Sökning och sortering

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet

Föreläsning 12+13: Approximationsalgoritmer

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Dynamisk programmering

Tentamen: Programutveckling ht 2015

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Programkonstruktion och Datastrukturer

Algoritmer, datastrukturer och komplexitet

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning...

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Föreläsning 5: Grafer Del 1

Föreläsning 9: NP-fullständighet

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Föreläsning 11 Datastrukturer (DAT037)

Föreläsning 5. Deduktion

Föreläsning 11. Giriga algoritmer

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Lösningar Datastrukturer TDA

Dugga Datastrukturer (DAT036)

Asymptotisk komplexitetsanalys

Dynamisk programmering

Tentamen Datastrukturer D DAT 036/INN960

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

I en matchning ligger varje hörn i högst en kant. I en stig ligger varje hörn i högst två kanter.

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Användarhandledning Version 1.2

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Föreläsning 7+8: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

Föreläsning 13. Rekursion

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 036/INN960

PROV I MATEMATIK Automatateori och formella språk DV1 4p

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00

Lösning av några vanliga rekurrensekvationer

Programmering för språkteknologer II, HT2014. Rum

Laboration: Whitebox- och blackboxtesting

Föreläsning 8+9: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

Föreläsning Datastrukturer (DAT037)

Föreläsning 8 Innehåll

Några svar till TDDC70/91 Datastrukturer och algoritmer

Pseudokod Analys av algoritmer Rekursiva algoritmer

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

Teoretisk del. Facit Tentamen TDDC (6)

Programmering för språkteknologer II. OH-serie: Sökning och sortering. Algoritm

Rekursion och induktion för algoritmkonstruktion

Föreläsning 6: Introduktion av listor

Sätt att skriva ut binärträd

Tentamen TEN1 HI

Föreläsning Datastrukturer (DAT037)

MMA132: Laboration 2 Matriser i MATLAB

Grundläggande datalogi - Övning 4

Datastrukturer och algoritmer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning Datastrukturer (DAT036)

Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180)

Transkript:

Algoritmer, datastrukturer och komplexitet Övning 8 Anton Grensjö grensjo@csc.kth.se 10 november 2015 Anton Grensjö ADK Övning 8 10 november 2015 1 / 34

Översikt Kursplanering F21: Introduktion till komplexitet F22: Formella definitioner, turingmaskiner F23: Oavgörbarhet Ö8: Mästarprov 1, oavgörbarhet F24: Cooks sats Labb 3 bonusdatum 10/11 F25: NP-fullständighetsbevis F26: NP-reduktionsvisualisering Ö9: NP-fullständighetsbevis Anton Grensjö ADK Övning 8 10 november 2015 2 / 34

Idag Idag Genomgång av Mästarprov 1 Oavgörbarhet Anton Grensjö ADK Övning 8 10 november 2015 3 / 34

Mästarprov 1 Uppgift 1: Hantverkare Uppgift 1: Hantverkare Ditt kök ska renoveras! Till din hjälp har du n stycken hantverkare med varsitt tilldelat uppdrag. Hantverkarnas respektive uppdrag tar tid t 1, t 2,..., t n tid att utföra. Endast ett uppdrag kan utföras åt gången. Alla hantverkare dyker upp samtidigt, och du debiteras både för arbetstid och väntetid. Varje hantverkare kostar 100 kr per timme. Uppgift Designa en girig algoritm som beräknar den minimala kostnaden för renoveringen. Beskriv algoritmen med pseudokod, förklara varför den fungerar och analysera tidskomplexiteten. Anton Grensjö ADK Övning 8 10 november 2015 4 / 34

Mästarprov 1 Uppgift 1: Hantverkare Uppgift 1: Hantverkare Lösning Hantverkarna måste utföra sina uppdrag i någon ordning. Låt k i vara indexet för det i:te uppdraget som utförs. Det uppdrag som utförs först tar tiden t k1, och under den tiden är det 1 person som arbetar och n 1 personer som väntar. Kostnaden under denna tid är alltså 100 n t k1. Under nästa uppdrag är det en person mindre som behöver vänta, så kostnaden under denna tid blir 100(n 1)t k2. Den totala kostnaden för denna ordning blir: K = 100 (nt k1 + (n 1)t k2 + (n 2)t k3 + + t kn ) Anton Grensjö ADK Övning 8 10 november 2015 5 / 34

Uppgift 1: Hantverkare Lösning Mästarprov 1 Uppgift 1: Hantverkare K = 100 (nt k1 + (n 1)t k2 + (n 2)t k3 + + t kn ) Frågan är alltså vilken ordning {k i } n i=1 som minimerar K. K har sitt minimala värde när uppdragen utförs i ordning av ökande tid, dvs: t k1 t k2 t kn Algoritm: Sortera listan av tider och beräkna kostnaden enligt formeln ovan. function HANTVERKARE(t 1, t 2,..., t n ) MERGESORT(t 1, t 2,..., t n ) cost 0 for i = 1 to n do cost cost + (n i + 1)t i return cost Anton Grensjö ADK Övning 8 10 november 2015 6 / 34

Uppgift 1: Hantverkare Tidskomplexitet Mästarprov 1 Uppgift 1: Hantverkare function HANTVERKARE(t 1, t 2,..., t n ) MERGESORT(t 1, t 2,..., t n ) cost 0 for i = 1 to n do cost cost + (n i + 1)t i return cost Mergesort har tidskomplexiteten O(n log n). Vi räknar med enhetskostnad, så varje steg i for-slingen går på konstant tid. Vi har n iterationer, så for-slingen går på tid O(n). Mergesort dominerar, så totala tidskomplexiteten är O(n log n). Anton Grensjö ADK Övning 8 10 november 2015 7 / 34

Uppgift 1: Hantverkare Korrekthetsresonemang Mästarprov 1 Uppgift 1: Hantverkare Korrekthet: varför ger den sorterade ordningen (t k1 t k2 t kn ) minst kostnad? Antag att vi har en ordning som ger minimalt K, men där t ki > t ki+1 för något i. Undersök vad som händer om vi byter plats på det i:te och i + 1:te uppdraget. (n i + 1)t ki + (n i)t ki+1 = (n i)(t ki + t ki+1 ) + t ki > (n i)(t ki + t ki+1 ) + t ki+1 = (n i + 1)t ki+1 + (n i)t ki Kostanden blir alltså lägre om vi byter plats på uppdragen. Motsägelse! Ordningen kan därmed inte har varit optimal. Slutsats: En ordning som ger minimalt K måste uppfylla t ki för varje i, dvs vi måste ha: t k1 t k2 t kn. t ki+1 Anton Grensjö ADK Övning 8 10 november 2015 8 / 34

Mästarprov 1 Uppgift 2: Höravstånd Uppgift 2: Höravstånd n personer står på en tallinje, på heltalskoordinater mellan 0 och 2kn. Två personer kan höra varandra om deras avstånd är strikt mindre än k. Vi vill flytta på personerna på ett sådant sätt att alla par av personer kan kommunicera (möjligen med hjälp av en eller flera mellanhänder). Vilken är den minimala summan av förflyttningar som behövs för att detta ska bli uppfyllt? Indata ges som n, k och P[1..n], där P[i] beskriver ursprungspositionen för person i. Det är givet att P[1] P[2] P[n]. Konstruera en algoritm som löser problemet, analysera tidskomplexitet i n och k samt motivera korrekthet. Anton Grensjö ADK Övning 8 10 november 2015 9 / 34

Uppgift 2: Höravstånd Insikter Mästarprov 1 Uppgift 2: Höravstånd Notera att det aldrig lönar sig för personerna längst ut att flytta sig längre bort. Det lönar sig heller aldrig för två personer att flytta sig förbi varandra. Antag att vi redan har placerat ut personerna 1, 2,..., i 1 på ett korrekt sätt. Det enda som just nu spelar roll för placeringen av person i är var person i 1 står (avståndet får inte vara för stort). Om vi bestämmer oss för att placera ut person i på plats j så kan vi enkelt beräkna kostnaden för detta: j P[i]. Men hur ska vi veta vilken plats j vi ska välja? Vi kanske kan tänka rekursivt här? Dela in i delproblem på något sätt? Låt delproblemet vara: Vad blir den minimala förflyttningen för de i första personerna, givet att den i:te personen placeras på plats j? Anton Grensjö ADK Övning 8 10 november 2015 10 / 34

Uppgift 2: Höravstånd Rekursion Mästarprov 1 Uppgift 2: Höravstånd Det här börjar likna dynamisk programmering! Låt F[i, j] = den minimala förflyttningen för de i första personerna, om person i flyttas till plats j. Basfall: F[1, j] = j P[1]. Vad blir F[i, j] generellt? Vi ska placera ut person i på plats j. Det kostar j P[i]. Vad kostar det att placera ut de i 1 första personerna? Det beror på var person i 1 placerats. Om person i 1 placerades på positionen x är kostnaden F[i 1, x]. Iterera över alla möjliga positioner x för person i 1 (dvs j k < x j), och välj positionen med lägst F[i 1, x]. { j P[1] om i = 1 F[i, j] = min j k<x j F[i 1, x] + j P[i] annars Anton Grensjö ADK Övning 8 10 november 2015 11 / 34

Uppgift 2: Höravstånd Rekursion Mästarprov 1 Uppgift 2: Höravstånd F[i, j] = den minimala förflyttningen för de i första personerna, om person i flyttas till plats j. { j P[1] om i = 1 F[i, j] = min j k<x j F[i 1, x] + j P[i] annars Svaret är min P[1] x P[n] F[n, x]. Beräkningsordning? Radvis fungerar bra. Anton Grensjö ADK Övning 8 10 november 2015 12 / 34

Uppgift 2: Höravstånd Pseudokod Mästarprov 1 Uppgift 2: Höravstånd function HÖRAVSTÅND(n, k, P[1..n]) for j P[1] to P[n] do F[1, j] j P[1] for i 2 to n do for j P[1] to P[n] do t a max (P[1], j k + 1) for x a to j do if F[i 1, x] < t then t F[i 1, x] F[i, j] t + j P[i] t for x P[1] to P[n] do if F[n, x] < t then t F[n, x] Basfall. Beräkna F[i, j] radvis. Iterera över alla möjliga val av position x för föregående person. Hitta det slutliga svaret. Anton Grensjö ADK Övning 8 10 november 2015 13 / 34

Uppgift 2: Höravstånd Tidskomplexitet Mästarprov 1 function HÖRAVSTÅND(n, k, P[1..n]) for j P[1] to P[n] do F[1, j] j P[1] for i 2 to n do for j P[1] to P[n] do t a max (P[1], j k + 1) for x a to j do if F[i 1, x] < t then t F[i 1, x] F[i, j] t + j P[i] t for x P[1] to P[n] do if F[n, x] < t then t F[n, x] Uppgift 2: Höravstånd De nästlade slingorna kommer dominera. Den yttre kör n 1 varv. Den mellersta kör maximalt P[n] P[1] + 1 2kn + 1 varv. Den innersta kör k 1 varv. Tidskomplexitet: O ( n 2 k 2). Anton Grensjö ADK Övning 8 10 november 2015 14 / 34

Mästarprov 1 Uppgift 2: Höravstånd Uppgift 2: Höravstånd Kommentar Många försökte lösa den här uppgiften girigt, men vi hittade ingen sådan lösning som verkade korrekt. Här är några testfall som knäcker många (men inte alla) giriga lösningar: k = 2, P = [1, 2, 3, 4, 10] k = 2, P = [1, 7, 8, 9, 10] k = 2, P = [1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 27] k = 3, P = [1, 3, 5, 7, 8, 11, 13] k = 2, P = [1, 2, 3, 4, 5, 8, 10] k = 3, P = [1, 3, 5, 8, 9, 11, 13] k = 3, P = [1, 3, 6, 7, 10, 11, 12] k = 3, P = [1, 2, 7, 8] k = 3, P = [1, 3, 5, 7, 8, 11, 13] Anton Grensjö ADK Övning 8 10 november 2015 15 / 34

Mästarprov 1 Uppgift 2: Höravstånd Uppgift 3: Mängder av anagram Givet: En lista av m stycken ord (endast små bokstäver, a-ö), med längd n. m och n är oberoende av varandra. Skriv ut alla mängder av anagram i ordlistan, med en mängd per rad. Dvs alla ord i listan som är anagram av varandra ska stå på samma rad. Orden på varje rad ska stå i bokstavsordning. Ordningen mellan raderna spelar ingen roll. Ett ensamt anagram ska stå på en egen rad. Beskriv algoritmen med pseudokod, analysera tidskomplexiteten, motivera korrekthet. Algoritmen ska vara optimal, visa därför att övre och undre gräns sammanfaller. Anton Grensjö ADK Övning 8 10 november 2015 16 / 34

Mästarprov 1 Uppgift 3: Mängder av anagram Lösning Uppgift 2: Höravstånd Hur kontrollerar vi om två ord är anagram? Sortera bokstäverna i respektive ord, kolla om resultatet blev lika. Låt orden lagras i en array w[1..m], där varje element har ett fält word som innehåller ordet, samt ett fält key. 1 Sortera w med avseende på fältet word. 2 Sortera varje ords bokstäver och lagra i fältet key (key kommer alltså vara samma för ord som är anagram). 3 Sortera w med avseende på fältet key med en stabil sorteringsalgoritm. 4 Gå igenom w och skriv ut alla ord, där de med samma key skrivs ut på samma rad. Anton Grensjö ADK Övning 8 10 november 2015 17 / 34

Mästarprov 1 Uppgift 2: Höravstånd Uppgift 3: Mängder av anagram Pseudokod function ANAGRAMMÄNGDER(w[1..m]) SORT(w[1..m]) med avseende på fältet word. for i 1 to m do w[i].key w[i].word SORT(w[i].key) med avseende på bokstäverna. SORT(w[1..m]) med avseende på fältet key. pref w[1].key for i 1 to m do if prev w[i].key then PRINT(newline) PRINT(w[i].word+ ) PRINT(newline) Anton Grensjö ADK Övning 8 10 november 2015 18 / 34

Mästarprov 1 Uppgift 2: Höravstånd Uppgift 3: Mängder av anagram Tidskomplexitet 1 Sortera w med avseende på fältet word. 2 Sortera varje ords bokstäver och lagra i fältet key. 3 Sortera w med avseende på fältet key med en stabil sorteringsalgoritm. 4 Gå igenom w och skriv ut alla ord, där de med samma key skrivs ut på samma rad. Om vi använder t.ex. mergesort blir tidskomplexiteten för steg 1 och 3 O(nm log m), för steg 2 O(mn log n) och för steg 4 O(nm). Totalt: O(nm log nm). Detta är inte optimalt. En lösning med denna tidskomplexitet gav mindre fel på mästarprovet. Om vi istället använder radixsort i steg 1 och 3, samt räknesortering i steg 2 slipper vi log-faktorerna och får tidskomplexitet O(nm). Anton Grensjö ADK Övning 8 10 november 2015 19 / 34

Mästarprov 1 Uppgift 2: Höravstånd Uppgift 3: Mängder av anagram Undre gräns En övre gräns för vår algoritms tidskomplexitet är alltså O(nm). Vi vill visa att en undre gräns för varje möjlig algoritm är Ω(nm), vilket skulle innebära att vår algoritm är optimal. Insikt: För att kunna lösa problemet måste vi titta på alla bokstäver. Varför? Om vi inte tittar på alla bokstäver i något ord kan vi inte avgöra vilka ord det är anagram med. Således är Ω(nm) en undre gräns för problemet, vilket vi ville visa. Anton Grensjö ADK Övning 8 10 november 2015 20 / 34

Oavgörbarhet Teori Oavgörbarhet Teori Ett problem som har en algoritm som för alla instanser kan hitta en lösning i ändlig tid kallas avgörbart. Ett problem som inte kan lösas i ändlig tid av någon algoritm kallas oavgörbart. För beslutsproblem talar man om avgörbarhet. För övriga problem talar man istället om beräkningsbarhet (definieras analogt). Motsägelsebevis: För att bevisa ett påstående p, antag p och härled motsägelse. Då måste p vara sant. Anton Grensjö ADK Övning 8 10 november 2015 21 / 34

Oavgörbarhet Teori Oavgörbarhet Teori Stopproblemet Givet ett program P och indata X, kommer P någonsin att terminera om det startas med X? Stopproblemet är oavgörbart. Bevis. Antag motsatsen, dvs att det finns en algoritm STOPP(P, X) som löser stopproblemet. Konstruera följande program: function META(P) Vad händer om vi anropar META(META)? if STOPP(P, P) then Om META terminerar så går programmet in while true do i en oändlig loop. Omöjligt! else Om META inte terminerar så går det in i return else-satsen och terminerar. Omöjligt! Således måste antagandet vara falskt. Anton Grensjö ADK Övning 8 10 november 2015 22 / 34

Oavgörbarhet Teori Oavgörbarhet Teori Att bevisa oavgörbarhet med hjälp av reduktion: Säg att vi vill visa att ett problem P är oavgörbart. Antag att P är avgörbart. Reducera stopproblemet till P. Vi kan nu lösa stopproblemet genom att lösa P!...men det är bevisat att stopproblemet är oavgörbart. Detta är alltså en motsägelse, och P måste vara oavgörbart. Anton Grensjö ADK Övning 8 10 november 2015 23 / 34

Oavgörbarhet Problem 1 Problem 1 Problemet orm i kakel tar som indata en mängd T av kakelplattstyper och två punkter p 1 och p 2 i planet. Frågan är om det går att användande endast kakeltyper i T kakla en orm som ringlar sig från p 1 till p 2, som inte bryter kakelmönstret någonstans och som hela tiden håller sig i det övre halvplanet. Detta problem är oavgörbart. Är följande varianter av ormproblemet avgörbara eller oavgörbara? a) Indata utvidgas med en fjärde parameter, en kakeltyp t T. Första kakelplattan (den som täcker p 1 ) måste vara av typ t. Antag att denna variant är avgörbar. Då kan vi lösa det ursprungliga ormproblemet genom att göra ett anrop till detta för varje kakeltyp. Motsägelse. Svar: Oavgörbart. Anton Grensjö ADK Övning 8 10 november 2015 24 / 34

Oavgörbarhet Problem 1 Problem 1 b) Indata utvidgas med ett tal N och frågan utvidgas med bivillkoret att ormen måste bestå av högst N plattor. Avgörbart, ty vi kan nu lösa problemet med totalsökning, då det bara finns ett ändligt antal möjliga ormar. c) Indata utvidgas med ett tal N och frågan utvidgas med bivillkoret att ormen måste bestå av åtminstone N plattor. Oavgörbart. Bevis: Antag att denna variant är avgörbar. Då kan vi lösa det ursprungliga problemet genom att anropa denna variant med N = 1. Men det ursprungliga problemet är oavgörbart, så det är en motsägelse. Således kan inte denna variant vara avgörbar. Anton Grensjö ADK Övning 8 10 november 2015 25 / 34

Oavgörbarhet Problem 1 Problem 2 Fråga: Finns det något explicit program P så att det givet y är avgörbart huruvida P stannar på indata y? Betrakta följande program: 1: function P(y) 2: return Uppenbarligen så finns det massor av sådana program. Anton Grensjö ADK Problem 2 10 november 2015 26 / 34

Oavgörbarhet Problem 1 Problem 3 Fråga: Finns det något explicit program P så att det givet y är oavgörbart huruvida P stannar på indata y? Låt P vara en interpretator och indata y vara ett program x följt av indata y till det programmet. P(y) beter sig alltså precis som programmet x skulle göra på indata y, och det är ju oavgörbart huruvida ett program x stannar på ett visst indata y. Svaret är alltså ja. Anton Grensjö ADK Problem 3 10 november 2015 27 / 34

Oavgörbarhet Problem 1 Problem 4 Fråga: Om programmet x stannar på tomt indata så låter vi f (x) vara antalet steg innan det stannar. Annars sätter vi f (x) = 0. Definiera nu MR(y), den maximala körtiden över alla program vars binära kodning är mindre än y. Är MR beräkningsbar? MR(y) = max x y f (x) Nej. Vi vet att det är oavgörbart huruvida ett program stannar på blankt indata. Reducera detta problem till MR(y). Notera att om programmet y stannar, så gör det det på högst MR(y) steg. Simulera därför y på blankt indata i MR(y) steg och kolla om det stannar. Om det inte gör det så vet vi att det aldrig stannar. Anton Grensjö ADK Problem 4 10 november 2015 28 / 34

Oavgörbarhet Problem 1 Problem 4 StopBlank(y) = s MR(y) if s = 0 then return false else simulera y på blankt indata i s steg (eller tills y stannar) if y stannade then return true else return false Anton Grensjö ADK Problem 4 10 november 2015 29 / 34

Oavgörbarhet Problem 1 Problem 5 Problem: Visa att funktionen MR i föregående uppgift växer snabbare än varje rekursiv (beräkningsbar) funktion. Visa närmare bestämt att det för varje rekursiv funktion g finns ett y så att MR(y) > g(y). Ledtråd: Tänk på föregående uppgift. Använd motsägelsebevis. Antag motsatsen, dvs att det finns en rekursiv funktion g så att g(y) MR(y) för alla y. Betrakta nu lösningen till föregående problem. Eftersom g(y) MR(y) kan vi lika gärna simulera programmet i g(y) steg istället för MR(y) steg. Detta betyder alltså att programmet med den förändringen är beräkningsbart, men det vet vi att det inte kan vara. Motsägelse. Anton Grensjö ADK Problem 5 10 november 2015 30 / 34

Oavgörbarhet Problem 1 Problem 6 Fråga: Anta att en turingmaskin M, indata X (som står på bandet från början) och en heltalskonstant K är givna. Är följande problem avgörbart eller oavgörbart? Stannar M på indata X efter att ha använt högst K rutor på bandet (en använd ruta får skrivas och läsas flera gånger)? Detta är faktiskt avgörbart! Varför? Turingmaskinen måste hålla sig inom K rutor på bandet = Turingmaskinen har endast ett ändligt antal möjliga konfigurationer (över dessa rutor). Om maskinen har m tillstånd, så är antalet konfigurationer m K 3 K. Simulera maskinen m K 3 K + 1 steg. Kontrollera att den inte rör sig över fler än K rutor. Om den stannar inom denna tid svarar vi ja. Om den inte har stannat måste den ha återkommit till en gammal konfiguration, och vara fast i en oändlig slinga. Svara nej. Anton Grensjö ADK Problem 6 10 november 2015 31 / 34

Oavgörbarhet Problem 7 Problem 7 En rekursivt uppräknelig mängd definierades på föreläsningen som ett språk som kan kännas igen av en funktion vars ja-lösningar kan verifieras ändligt. En alternativ definition är en mängd som är uppräknelig (elementet kan numreras med naturliga tal) och kan produceras av en algoritm. Uppgift: Använd den senare definitionen och visa att varje rekursiv mängd också är rekursivt uppräknelig. Vi vill visa att om en mängd S är rekursiv (det finns en beräkningsbar algoritm som kan avgöra vilka element som tillhör S) så är S uppräknelig och kan produceras av en algoritm. Så, om S är en rekursiv mängd, så finns det en algoritm A(x) som returnerar true omm x S. Vi antar att elementen i S lagras som binära strängar. 1: for i 0 to do 2: if A(i) then write i Anton Grensjö ADK Problem 6 10 november 2015 32 / 34

Oavgörbarhet Problem 8 Problem 8 Uppgift: Den diagonaliserade stoppmängden består av alla program p som stannar på indata p. Visa att denna mängd är rekursivt uppräknelig. Visualisering: oändlig tabell. 1: for i 0 to do 2: for p 0 to i do 3: Simulera beräkningen p(p) under i steg 4: if p(p) stannar inom i steg then write p Notera: samma p kommer skrivas ut många gånger. Enkelt att fixa. Hur? Anton Grensjö ADK Problem 6 10 november 2015 33 / 34

Nästa gång Nästa gång Redovisning av teoriuppgifter för labb 4 NP-fullständighetsbevis Anton Grensjö ADK Problem 6 10 november 2015 34 / 34