Lösningsskisser/kommentarer till tentamen 150321
Transcription
Lösningsskisser/kommentarer till tentamen 150321
Lösningsskisser/kommentarer till tentamen 150321 Alla sidhänvisningar är till kursboken Datatyper och algoritmer, Janlert Lars-Erik, Wiberg Torbjörn 2., [rev.] uppl. : Lund : Studentlitteratur : 2000 : x, 387 s. : ISBN: 91-44-01364-7. Uppgift 1 – terminologi (5 p) Förklara följande termer: a) Abstrakt datatyp Sidan 27, kapitel 2, föreläsning 1, quizzar b) Enkel datatyp Sidan 26, kapitel 2, föreläsning 1, quizzar c) Data Sidan 25, kapitel 2, föreläsning 1, quizzar d) Sammansatt datatyp (composite datatype) Sidan 26, kapitel 2, föreläsning 1, quizzar e) Algoritm Sidan 22, kapitel 2, föreläsning 1, quizzar Här vill vi se att du kan beskriva begreppet på ett sådant sätt att vi ser att du förstått vad det innebär. Det behöver inte vara ett citat från kursboken. Vanliga ”fel” är att man skriver bara något enstaka ord som svar eller skriver något så generellt att det inte tydligt visar att man verkligen förstått terminologin ordentligt. Uppgift 2 – algoritmer och sortering (2 + 2 + 1p) a) Ge pseudokod för en valfri iterativ sorteringsalgoritm. Kapitel 15, s 299 och framåt. Gruppövning, OU1, föreläsning 5, 6 Exempel på iterativa sorteringsalgoritmer är bubble sort, insertion sort, selection sort Här vill vi dels se att du vet vad ”iterativ sorteringsalgoritm” betyder och kan välja ut en sådan från kursmaterialet och dels att du kan beskriva denna tydligt i algoritmform i pseudokod. Vanliga ”fel” är att man väljer en rekursiv algoritm, att man inte beskriver algoritmen korrekt (dvs algoritmen fungerar inte på det sätt man skriver) och att man inte kan skriva pseudokod (skriver ren c/python-kod, glömmer tala om vad variabler står för, vet inte hur man beskriver loopar etc). b) Förklara hur algoritmen fungerar. Här kontrollerar vi om du förutom att kunna upprepa en algoritm ur minnet också förstår hur den fungerar och dessutom kan beskriva detta på ett sätt så att andra människor förstår det. c) Vad har algoritmen för tidskomplexitet? Något som man kanske kan utantill eller så räkna ut utifrån pseudokoden. Alla exempel jag gav i a) är 2 O(n ) Uppgift 3 – prioritetskö (2+2p) a) Förklara begreppet prioritetskö (priority queue). Kapitel 14.6 s 293 och framåt. Föreläsning 10 Här ska du kunna övertyga oss om att du vet vad en prioritetskö är och hur den fungerar. Vanligt ”fel” är att man ger en så generell beskrivning att det skulle passa in på fler datatyper än prioritetskön eller att man nämner orden kö och prioritet men inte tydligt visar att man förstått hur prioriteten fungerar. b) Det finns två specialfall av prioritetskö. Hur fungerar de? s 294. Föreläsning 10 Att bara svara stack och kö räcker inte man måste också förklara hur det fungerar, dvs på vilket sätt de är specialfall av prioritetskön. Uppgift 4 – tabell (1 + 2 + 2p) a) Data i en tabell lagras med hjälp av en nyckel (key). Vad är en nyckel? Kapitel s117 och framåt. Föreläsning 7, OU Återigen går uppgiften ut på att du ska visa att du förstått begreppet nyckel och frågan kan besvaras på många sätt. b) Den potentiella uppsättningen nycklar är mycket stor. Ge en metod för att minska den uppsättningen. Hur fungerar det? Avsnittet om hashtabeller s 276 och framåt. Föreläsning 7 Här förväntar vi oss att du beskriver hashfunktionen och tanken bakom en hashtabell. c) Vilket problem kan vi få pga att vi använder metoden i b) och hur kan vi lösa problemet? Avsnittet om hashtabeller s 276 och framåt. Föreläsning 7 Här förväntar vi oss att du beskriver problemet med kollisioner i hashtabellen och någon/några metoder för att lösa detta (dvs öppen hashing och/eller sluten hashing med linjär/kvadratisk teknik). Uppgift 5 – tidskomplexitet (5p) Vad har följande algoritm för tidskomplexitet. Motivera ditt svar! MergeSort(A, p, r) if p < r then q ← (𝑝 + 𝑟) 2 MergeSort(A, p, q) MergeSort(A, q+1, r) Merge(A, p, q, r) Merge(A, p, q, r) n1 ← q – p + 1 n2 ← r – q create arrays L [1 .. n1 + 1] and R[1 .. n2 + 1] for i ← 1 to n1 do L[i] ← A[p + i – 1] for j ← 1 to n2 do R[j] ← A[q+j] L[n1 + 1] ← ∞ // ∞ är oändligheten R[n2 + 1] ← ∞ i ← 1 j ← 1 for k ← p to r do if L[i] ≤ R[j] then A[k] ← L[i] i ← i + 1 else A[k] ← R[j] j ← j + 1 Föreläsning 2, 5-6 Här testar vi dels om du kan komplexiteten för merge sort (vilket är värt ca 1p) och att du kan motivera detta utifrån en algoritm du inte sett beskriven på detta sätt tidigare (dvs kan du läsa och förstå pseduokod?). Man behöver inte räkna hela vägen ned till enstaka operationer men bör diskutera exempelvis hur många gånger funktionen merge anropas och hur mycket den funktionen kostar. Uppgift 6 – heap (1 + 1 + 2p) a) Vad är en heap och vad har den för egenskaper? Sidan 295 och framåt i boken. Föreläsning 10 Det måste vara en specifik beskrivning i svaret (att bara säga att det är ett binärt träd med en ordning och sen ge ett (korrekt) exempel räcker inte). Det måste framgå av ditt svar att du vet om den speciella heap-relationen mellan förälder och barn. b) Vi kan ha två olika typer av heapar. Förklara vad som skiljer dem åt. Sidan 295 och framåt i boken. Föreläsning 10 Glöm inte att beskriva skillnaderna mellan min och maxheapen… c) Förklara hur algoritmen ”heap sort” fungerar. Sidan 311 och framåt i boken. Föreläsning 10 Här räcker det inte med att beskriva hur man skapar en heap av en osorterad lista (heapify). Man måste också visa hur man omvandlar heapen till en sorterad lista…. Uppgift 7 – träd (2 + 2p) a) Vad är ett binärt sökträd (binary search tree). Hur skiljer det sig från en heap? Kapitel 14.3 s 286 och framåt. Föreläsning 13 Det måste vara en specifik beskrivning i svaret (att bara säga att det är ett binärt träd med en ordning och sen ge ett (korrekt) exempel räcker inte). Det måste framgå av ditt svar att du vet om den speciella relationen mellan syskonen. Glöm inte heller tydligt beskriva skillnaden mot heapen. b) Vad är en trie, illustrera ditt svar med ett exempel. Kapitel 14.1 s 281 och framåt. Föreläsning 13 Glöm inte både att definiera en trie och ge ett exempel. Uppgift 8 – grafer (4p) Vad är en grannskapslista (adjacency list)? Illustrera ditt svar med ett exempel. Kapitel 17, s337 och framåt. Föreläsning 11-12 Här måste man kunna beskriva detta med rätt terminologi (dvs för en nod i en graf är grannskapslistan en lista med dess grannar) och sedan visa ett exempel på en graf och för varje nod i grafen vissa dess grannskapslista. Många tror att grannskapslistan är den kö som används vid traversering av grafer vilket inte är samma sak. Uppgift 9 – mängd (4p) Förklara en enkel metod för att hitta om ett värde är medlem i en mängd (set). Illustrera ditt svar med ett exempel. Kapitel 13.2 s 267 och framåt. Föreläsning 11 Viktigt här att kommentera hur metoden hänger ihop med mängdens konstruktion. Uppgift 10 – problemlösningsstrategier (3+1p) a) Förklara tre strategier för problemlösning. Föreläsning 8 Vi har diskuterat tex brute force, greedy, divide and conquer, dynamisk programmering. Du ska beskriva vad de heter och hur de fungerar. b) Förklara begreppet överlappande delproblem (overlapping sub problems). Föreläsning 8 Även här är det viktigt att vara noggrann i beskrivningen. Överlappande delproblem är identiska delproblem som uppkommer på flera olika ställen i lösningen och där man inom dynamisk programmering kan utnyttja detta genom att lösa dem en gång och sen lagra svaret i tex en tabell.