Lösningsförslag DD1320/DD

Relevanta dokument
Tildatenta Lösningsskiss

Fredag 10 juni 2016 kl 8 12

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

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

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

DD1320 Tillämpad datalogi. Lösnings-skiss till tentamen

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

DAI2 (TIDAL) + I2 (TKIEK)

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 9 Datastrukturer (DAT037)

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

Lösningar Datastrukturer TDA

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Trädstrukturer och grafer

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Måndag 13 mars 2017 kl Rita en KMP-automat för CAMCORDERCAMERA samt ange next-vektorn.

Föreläsning Datastrukturer (DAT036)

Algoritmer och datastrukturer 2012, fo rela sning 8

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

3. Toppkvinnor på hög Låt lådan och de två kvinnornas famnar utgöra stackarna L, K1 respektive K2. Från början finns alla kort i L.

Tentamen, Algoritmer och datastrukturer

Träd Hierarkiska strukturer

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Föreläsning 9 Innehåll

Hashtabeller! (& kanske lite sortering)

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

::= HIHI HIHIHI ::= HAHA HAHAHA

13 Prioritetsköer, heapar

Tentamen Datastrukturer D DAT 035/INN960

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Tentamen Datastrukturer (DAT036)

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

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

Exempeltenta GruDat 2002/2003

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen Datastrukturer, DAT037 (DAT036)

Övning 2. (Länkade) Listor, noder

DD1321, Tentamen i tillämpad programmering och datalogi Lördagen den 18 dexember 2010 kl 13 18

Datastrukturer. föreläsning 10. Maps 1

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Tentamen Datastrukturer D DAT 036/INN960

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Programkonstruktion och. Datastrukturer

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Föreläsning Datastrukturer (DAT036)

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

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

Föreläsning 13 Innehåll

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

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

Programkonstruktion och Datastrukturer

Tentamen kl Uppgift 4. Uppgift 5

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Tentamen i Algoritmer & Datastrukturer i Java

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

Tentamen Datastrukturer (DAT037)

Föreläsning 13. Träd

KTH, NADA, Vahid Mosavat. 1. Flervalsfrågor (5p)

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen Datastrukturer, DAT037 (DAT036)

Datastrukturer. Föreläsning 5. Maps 1

Föreläsning Datastrukturer (DAT037)

Datalogi, grundkurs 1

Tentamen Datastrukturer D DAT 036/INN960

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

Dekomposition och dynamisk programmering

Föreläsning 5 Innehåll

Teoretisk del. Facit Tentamen TDDC (6)

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 5: Grafer Del 1

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Föreläsning Datastrukturer (DAT036)

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Föreläsning 7. Träd och binära sökträd

Teoretisk del. Facit Tentamen TDDC (6)

Övning 4. Hashning, sortering, prioritetskö, bästaförstsökning. Hitta på en perfekt hashfunktion för atomer. Hur stor blir hashtabellen?

Föreläsning Datastrukturer (DAT037)

Föreläsning 7: Prioritetskö, trappa heapsort, hashning

Övning 6 - Tillämpad datalogi 2012

Vad har vi pratat om i kursen?

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

TDDC30 Programmering i Java, datastrukturer och algoritmer

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

Föreläsning 10 Datastrukturer (DAT037)

Transkript:

1. KMP för IT-support K Ö A R I K Ö N 0 1 1 1 1 0 1 3 eller 0 1 1 1 1 1 1 0 1 3 Lösning med eller utan mellanslag godkänns 5 ettor i följd godkänd (slarvfel) sista siffran (3) ett krav men kan avvika om bild rätt (men F om bägge är fel) 2. Vilken datastruktur är det? På KTH:s it-support fördelas inkommande ärenden över ett antal supporttekniker som sedan hanterar dessa i den ordning de kom in och de lagras därför lämpligast i en kö (1=b). I samband med att ett ärende skapas skickas också ett mail för att notifiera it-supporten om detta vilket utgör en slags todo-lista för dessa. Ada, som är nyanställd på supporten, har valt att sortera sin inbox i ordningen nyast överst och betar av ärendena uppifrån och ned vilket leder till att Ada betraktar ordningen som en stack (2=e). En del ärenden behöver hanteras mer skyndsamt än andra och då är det lämpligt att lagra dessa i en prioritetskö (3=f). Slutligen, när ett ärende är klart, arkiveras de i en struktur där epostadress (för den som behövde hjälp) ska kunna användas för effektiv sökning och därför används lämpligen en hashtabell (4=c) eller binärt sökträd (4=a). En sorterad lista (vektor) kan användas i 4 om det motiveras med binärsökning. En lista (vektor) kan också användas istället för stack eller dubbeländad kö (deque) om det motiveras. 3. Binärt sökträd a) Utskrift preorder: tenta kth mars vt19 Utskrift inorder: kth mars tenta vt19 Utskrift postorder: mars, kth, vt19, tenta b) O(n) Några har skrivit O ( log N ). Det är fel. Om man ska skriva ut hela trädet måste alla N noder gås igenom

4. Syntax för nätverk Finns ett flertal t ex <NODE> :== <TYPE> <NODE> <TYPE> Ett absolut krav är att rekursion finns med. Rekursionen måste ha ett avbrott. Det givna exemplet CISCO PC MAC MAC ska klaras av. 5. Graf a) n*(n-1) b) 2*n c) 6. Redundans till ASCII (tilda) a) Minsta hammingavstånd är 1 (kan vara allt mellan 1 och 7 för de olika tecknen) Kan visas med exempel mellan två tecken t.ex. A och a i lydelsen Allt annat än 1 som svar är fel. b) Om man adderar fler bitar så att minsta hammingavståndet är 3 så kan man gissa sig till vad som skickats om en enstaka bit ändrats på vägen. Man kan addera en paritetsbit och göra alla tal jämna eller udda vilket ökar chansen att detektera en felöverföring.

6 Pekare (tilpro) En miss i något steg är OK och då måste efterföljande satser ( om de ritats ) rättas därefter C-delen 7. Kryptering med bokchiffer 3 jämförelsekriterier efterfrågas, olika utfall av jämförelserna kan godkännas beroende motivering. a) Tre jämförelser mellan bokchiffer med digital respektive tryckt bok. i) Kryptering - bokchiffer är starkt krypterat. Lika starkt digitalt och i tryckt format ii) Nyckelutdelning - Kan tänkas vara både lika svårt att lösa digitalt och tryckt bok. Det går att argumentera för att det är både enklare eller svårare att distribuera en exakt likadan digital bok/pdf än en tryckt. T.ex. kan vattenmärkning av en pdf tillföra tecken eller epub/mobi-format vara olika på olika plattformar. iii) Prestanda - Det går snabbare att dekryptera/krypterar en digital bok med ett datorprogram.

b) Bokchiffer vs RSA: i) Kryptering - i princip lika stark som RSA. Dåligt indata kan göra det knäckbart. ii) Nyckeludelning/autentisering - RSA löser detta bättre än bokchiffer. Den publika nyckeln i RSA behöver inte vara hemlig och kan enklare delas ut. iii) Prestanda - Digitalt bokchiffer är potentiellt snabbare än RSA men det är OK det går att argumentera för båda. Man behöver inte motivera skillnad i digital snabbhet. Bokchiffer med tryckt bok är väsentligen långsammare. Det finns andra jämförelsekriterier och jämförelseresonemang som godkänts, t.ex. iv) Implementation - enklare att implementera bokchiffer, i synnerhet digitalt v) Autentisering - kan lösas med en tillfredsställande nyckelutdelning. Bara den som har nyckeln/boken kan skicka meddelanden och man kan föra liknande jämförelseargumentation som för nyckelutdelningen vi) Säker förvaring - större risk för intrång i datorn med digital bok. Det kan finnas spår, digitalt eller fysiskt. F - Har endast svarat på en delfråga D - 3 korrekt motiverade och specificerade jämförelser C - 5 eller 6 korrekt motiverade och specificerade jämförelser 8. Datastrukturer för dictionary För betyg D så ska man ta hänsyn till att det är ett okänt antal nycklar och nämna minst en av Binärträd kan växa obehindrat Om hashtabellen inte omdimensioneras -> löjligt långa krocklistor eller skriva att dimensionera hashtabellen kräver omhashning av alla element. Dessutom ska man för betyg D jämföra prestanda i det allmänna fallet Binärträd O(logN) vs Hashtabell O(1) För C så ska man uppfylla D och nämna alla tre ovan eller 2 + en annan bra jämförelse t.ex. risk för träd att bli obalanserad med sorterat indata.

A-delen 9. Brädspel Komplexitet: Komplexiteten efterfrågas inte i uppgiften men det kan vara av värde för framtida lösningsförslagsläsare att resonera kring matematiken. Ett bräde med en lampa kan lysa på tre sätt. Ett bräde med två lampor kan lysa på nio sätt. Ett bräde med tre lampor kan lysa på 27 sätt. Ett bräde med N lampor lyser på 3 N sätt två lampor bräde med tre lampor kan lysa på 3 3 = 27 sätt bräde med fyra lampor kan lysa på 3 4 = 81 sätt Jämför med ordkedjelabben där antal kombinationer för trestaviga ord är 29 3 = 24389 (med w ) Komplexiteten för att söka igenom ett sökträd är i värsta fallet att gå igenom hela trädet. Alla kombinationer kommer inte att undersökas, i ordkedjelabben filtrerar man mot en ordlista. Beroende på utseendet av brädspelet så kan inte alla lampkombinationer uppnås. Utan att känna till utseendedetaljerna kan man bara uttala sig om en teoretiskt övre gräns. Breddenförstsökning Det som efterfrågas är den kortaste knapptryckningssekvensen vilket man får genom att söka i trädet med bredden först. Man måste i varje steg spara undan den knapptryckning man gör, antingen i noder med föräldrapekare (som i labben) eller genom att bygga på en knapptryckningslista som skickas vidare i varje steg. Det kan bli en väldigt lång kö om det finns många kombinationer att undersöka.

Bästaförstlösning kan ge fel svar Spelbrädet till vänster har ca en halv miljon (531441) kombinationer. Den går att lösa med 6 knapptryckningar. (1, 0), (1, 0), (0, 3), (0, 3), (0, 5), (3, 0) och lösningen hittas efter att ha undersökt 22932 bräden. Om man istället söker i prioritetsordning, t.ex. genom att prioritera bräden där en färg dominerar så kan man hitta en lösning redan efter 39 bräden men det är inte den kortaste sekvensen utan har dubbelt (12) så många knapptryckningar. Undersök inte besökta matriser på nytt I uppgiften framgår att när man trycker på samma knapp fyra gånger så får man samma bräde igen. Vissa knappar ändrar lampor på samma sätt t.ex. flera i samma kolumn. För att undvika onödiga undersökningar måste man hålla koll på redan undersökta matriser. Om man inte gör det kan det bli orimligt många undersökningar.. Nedan undersöks två olika implementationer av breddenförstsökning för matrisen ovan. Den ena tar inte hänsyn till redan besökta matriser (dumbarn), trycker på alla 28 knappar och lyckas inte hitta rätt lösning innan minnet tar slut. Den andra lösningen sparar bara 12 knappar (7 vertikala och 5 horisontella), undersöker inte redan besökta matriser och hittar rätt lösning. Notera skillnaden i köstorlek i 5:e barngenerationen sjutton miljoner visavi fjorton tusen. breddnivå antal sökningar kölängd antal sökningar kölängd utan att ta hänsyn till dumbarn och med reduntanta knapptryckningar med hashtabell för redan besökta 0 1 1 1 1 1 2 28 2 12 2 30 784 14 144 3 814 21952 158 936 4 22766 614656 1094 4224 5 637422 17210368 5318 14652 6 slut på minne slut på minne 19970 41184 Det är viktigt att man kan spara undan och slå upp om man redan undersökt matrisen t.ex. genom att räkna ut ett hashvärde för matrisen och spara i en hashtabell. Det är också onödigt att undersöka reduntanta knapptryckningar som genererar samma matriser som en annan knapp. Datastrukturer: en teckenmatris eller lista av listor (pythonvektorer) exempelvis den ovan en lista/vektor med radnummer för specialknappen exempel radlista [(1, 0), (2, 0), (3, 1), (4, 0), (5, 1)] en lista/vektor med kolumner för specialknappen exempel kolumnlista [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (3, 0), (3, 6)]

en kö för breddenförstsökning en hashtabell eller binärt sökträd för redan undersökta matriser. en nod med matris och knappkoordinatlista en hashtabell med lampbytarordning (kan också göras med en funktion) change = {"G": "R", "B": "G", "R": "B"} m[3, 4] = change [ m[3, 4] ] Funktioner Ändra matrisen, det räcker att beskriva i text om hur en rad resp. kolumn ändras. Uttryckt i kod kan man tänka sig en rowchange och en colchange som i princip gör följande for i in range(len(m)): if m[i][col] in "RBG": m[i][col] = change[m[i][col]] for i in range(len(m[0])): if m[row][i] in "RBG": m[row][i] = change[m[row][i]] funktion eller funktionalitet som kan jämföra två matriser för insättning i binärträd alternativ funktionalitet för att stoppa in i hashtabell. funktion eller funktionalitet som avgör om alla lampor lyser i samma färg måste finnas med Algoritm Läs in från filen till en matris och till en rad- och kolumn-lista Lägg till startmatrisen i redanbesökta-hashtabellen/trädet Lägg en nod med startmatrisen och en tom knapptryckningslista i kön. Så länge kön inte är tom: plocka ut en matrisnod ur kön. kolla om matrisen är lösningen i så fall avbryt och returnera knapptryckslistan annars: för varje radknapp i rad-listan och varje kolumnknapp i kolumn-listan: generera ny matris med rowchange/colchange Om nya matrisen inte finns i redanbesökta-hashtabellen/trädet: skapa en ny nod med den nya matrisen en knapptryckslista med den nya knappen tillagd lägg till matrisen i redanbesökta-hashtabellen/trädet lägg till matrisnoden i kön För betyg B krävs en korrekt bredden först lösning. Tydlighet kring hur barnen genereras i text eller bild. Att redan besökta matriser inte undersöks igen. Något sätt att få reda på den efterfrågade knapptryckningssekvensen t.ex. via parentpekare eller en knapptryckningslista som byggs på.