Tentamen: Programutveckling ht 2015 Datum: 2015-11-04 Tid: 09:00-13:00 Sal: Ansvarig: Resultat: Hjälpmedel: Maxpoäng: Betygsgränser: Anslås inom 3 veckor. Inga 40 p 20 p för G, 32 p för VG. Iakttag följande: Skriv tydligt. Börja varje ny uppgift på ett nytt blad. Använd bara en sida av varje papper. Motivera dina svar väl. Om du anser att en fråga är svår att förstå eller felaktigt ställd, skriv ner din tolkning av frågan tillsammans med svaret. Skriv din tentakod (som används för att anonymisera tentan) på varje blad som lämnas in.
1) Redogör kortfattat för följande begrepp, dvs. ge korta och koncisa förklaringar till dem i relation till algoritmer och algoritmdesign: a) Loop b) Minneskomplexitet c) Brute force d) Stack (4 p) 2) Quicksort och Mergesort är två exempel på sorteringsalgoritmer. a) Välj en av algoritmerna och beskriv utförligt hur den fungerar (gärna med pseudokod). b) Ange en likhet samt en skillnad i de två algoritmernas arbetssätt. c) Vilken worst-case tidskomplexitet har de båda algoritmerna? Motivera ditt svar. (2+1+1 p) 3) Antag att du måste frakta en hund, en katt och en guldfisk från en lägenhet i Göteborg till en lägenhet i Borås. Ditt enda transportmedel är bussen som går mellan städerna. Dessutom kan du endast frakta ett djur åt gången i bussen (i vardera riktningen). Problemet är att du inte kan lämna hunden och katten i samma lägenhet utan din tillsyn, annars äter hunden upp katten. Samma sak gäller för katten och guldfisken, dvs. att katten äter upp guldfisken om du lämnar dem i samma lägenhet utan tillsyn. Hur skall du bära dig åt för lösa detta dilemma? General Problem Solver (GPS) 1. Placera initialtillståndet S i en tom lista OPEN. 2. Skapa en tom lista CLOSED. 3. Om OPEN är tom, avsluta med misslyckande. 4. Avlägsna den första noden N i OPEN och placera i CLOSED. 5. Om N är en målnod, avsluta med lyckats. 6. Expandera N, dvs använd produktionsreglerna för att hitta en mängd NEW av noder som kan nås från N. Av dessa noder, lägg noderna i OPEN om de inte redan finns i OPEN eller CLOSED. 7. Loopa tillbaka till steg 3. a) Formulera problemet som en sökning i en tillståndsrymd. Hur ser representationen av tillstånden ut? Vilket är starttillståndet samt måltillståndet? Hur ser produktionsreglerna ut, dvs. vilka är de möjliga (tillåtna) förflyttningarna från ett tillstånd till ett annat? b) Bredden först och djupet först är två vanliga sökstrategier. Förklara med egna ord hur dessa sökstrategier fungerar, samt jämför deras för- och nackdelar. Förklara även hur OPEN listan i sökalgoritmen ovan (General Problem Solver) implementeras (datastruktur) för respektive sökstrategi.
c) Vilken funktion fyller CLOSED listan, dvs. vad är syftet med att ha en CLOSED lista i ovanstående sökalgoritm? (2+2+1 p) 4) Dynamisk Programmering kan ses som en intelligent brute-force algoritm. a) Vad menas med detta, dvs. hur arbetar dynamisk programmering för att åstadkomma detta? b) Nämn tre kriterier som måste vara uppfyllda för att kunna applicera dynamisk programmering som lösningsmetod för ett problem. c) Skriv pseudokod för en rekursiv lösning av fibonacci-tal (se formel nedan) med hjälp av dynamisk programmering (dvs. rekursion + memorization). (1+1+2 p) 5) Nedan finns pseudokod för algoritmen selection sort, vilken sorterar en vektor ALGORITHM SelectionSort(A[0..n-1]) // The algorithm sorts a given array by selection sort // Input: An array A[0..n-1] of orderable elements // Output: Array A[0..n-1] sorted in ascending order for i from 0 to n 2 do min i for j from i + 1 to n 1 do if A[j] < A[min] min j swap A[i] and A[min] a) Förklara i ord hur algoritmen arbetar. För att bevisa att selection sort är partiellt korrekt, så måste man formulera invarianter för både den yttre och den inre loopen. Loopinvarianten för den inre loopen kan formuleras på följande sätt variabeln min innehåller index för det minsta värdet mellan index i+1 och n-1 b) Formulera en lämplig loopinvariant för den yttre loopen. c) Förklara hur loopinvarianten för den yttre loopen från b) används för att visa att selection sort är partiellt korrekt. d) Var skulle du placera en konvergent för att bevisa att selection sort alltid terminerar och hur skulle denna formuleras? (1+1+1+1 p)
6) a) Vad innebär begreppet NP-komplett? Ge en utförlig, men generell, beskrivning, dvs. en teoretisk redogörelse som inte baseras på ett specifikt problem. b) Vilka av följande problem är NP-kompletta? Motivera! Towers of Hanoi Haltproblemet Minimalt uppspännande träd SAT (2+2 p) 7) Följande uppgifter handlar om att konstruera Turingmaskiner som arbetar med strängar ur alfabetet {A, B}. Maskinerna kan läsa och skriva tecknen A, B och blank (#). För båda uppgifterna gäller att läshuvudet får stå på valfri plats vid terminering och det är tillåtet att förstöra inputsträngen under arbetet. Maskinerna skall ange sin output genom att terminera i ett tillstånd YES eller NO. a) Konstruera en Turingmaskin som avgör om en sträng bestående av en obruten följd av A och B följer mönstret att ha exakt varannat tecken A och B. Strängen kan börja och sluta på vilket av tecknen som helst. Exempel: Om maskinen startas längst till vänster i inputsträngen ABABAB, så stannar den i ett tillstånd som heter YES. Om maskinen startas längst till vänster i inputsträngen AABABAB, så stannar den i ett tillstånd som heter NO. Svara på uppgift a) genom att ge en kort beskrivning i ord av hur din Turingmaskin arbetar och specificera maskinen i detalj med tillståndsdiagram. b) Beskriv i ord hur du skulle modifiera din Turingmaskin från uppgift a) till att istället avgöra om strängen följer mönstret att ha två av varje tecken och sedan två av det andra. Exempel: Om maskinen startas längst till vänster i inputsträngen AABBAABBAABB, så stannar den i ett tillstånd som heter YES. Om maskinen startas längst till vänster i inputsträngen AABAABBAABB, så stannar den i ett tillstånd som heter NO. (3+1 p) 8) Vid en Vigenèrekodning har nyckelordet valts till SAM. a) Kryptera följande meddelande: to be or not to be b) Förklara principen bakom att använda coincidence index för att bestämma nyckelordets längd vid knäckning av Vigenèrekrypton. Observera att ni inte skall beskriva hur beräkningarna görs rent praktiskt utan fokusera på den övergripande proceduren och motivera varför den fungerar. (2+2 p)
9) Det agila manifestet beskriver vad som skall känneteckna agil programutveckling. a) Beskriv de fyra värden som man primärt eftersträvar inom agil programutveckling. b) Ge ett exempel på en agil utvecklingsmetod och beskriv den kortfattat. (2+1 p) 10) 1950 publicerade Alan Turing artikeln Computing Machinery and Intelligence, i vilken han beskrev Turingtestet. a) Förklara vad syftet är med Turingtestet, hur testet går till samt kriterier för ett lyckat resultat. b) Edward Feigenbaum betonar ett specifikt problem som först måste lösas innan Turingtestet kan klaras. Vilket problem är detta? c) 2003 presenterade Edward Feigenbaum ett alternativ till Turingtestet - det så kallade Feigenbaumtestet. Vad är den största skillnaden mellan Turingtestet och Feigenbaumtestet? (2+1+1 p)