Övning 7 - Tillämpad datalogi DD1320, TENTAMEN I TILLÄMPAD DATALOGI Tisdagen den 12 januari 2010 kl 14 18

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

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

Fredag 10 juni 2016 kl 8 12

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.

Tildatenta Lösningsskiss

Hashtabeller! (& kanske lite sortering)

Tentamen TEN1 HI

Grundläggande Datalogi för F

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

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

Tentamen i Algoritmer & Datastrukturer i Java

Övning 6 - Tillämpad datalogi 2012

Tentamen Datastrukturer D DAT 035/INN960

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

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

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

Tentamen kl Uppgift 4. Uppgift 5

Tentamen, Algoritmer och datastrukturer

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

Lösningsförslag DD1320/DD

Tentamen Datastrukturer (DAT037)

Dekomposition och dynamisk programmering

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

Lösningar Datastrukturer TDA

Tentamen Datastrukturer D DAT 036/INN960

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

Tentamen Datastrukturer för D2 DAT 035

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Tentamen Datastrukturer D DAT 036/INN960

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

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

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

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.

::= HIHI HIHIHI ::= HAHA HAHAHA

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

Algoritmer, datastrukturer och komplexitet

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

Grundläggande Datalogi för F

Programkonstruktion och. Datastrukturer

Sökning och sortering

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

Programkonstruktion och Datastrukturer

Tentamen Datastrukturer, DAT037 (DAT036)

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

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 med lösningsförslag Datastrukturer för D2 DAT 035

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

Uppgift 1 ( Betyg 3 uppgift )

Tentamen TEN1 HI

Datalogi, grundkurs 1

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.

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

Tentamen Datastrukturer, DAT037 (DAT036)

Övning 5 - Tillämpad datalogi 2013

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

TDP Regler

Tentamen Datastrukturer (DAT036)

Föreläsning 4 Datastrukturer (DAT037)

Algoritmer, datastrukturer och komplexitet

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

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Tenta i Grundläggande programmering DD klockan

DAI2 (TIDAL) + I2 (TKIEK)

Övning 3 - Tillämpad datalogi 2012

Datalogiövning 31/7 2007

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Tentamen TEN1 HI

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

Programmering II (ID1019) :00-17:00

Algoritmer, datastrukturer och komplexitet

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

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Magnus Nielsen, IDA, Linköpings universitet

Övning 4 - Tillämpad datalogi 2013

Seminarium 13 Innehåll

Föreläsning 8 Innehåll

Dynamisk programmering

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

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

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

Chalmers tekniska högskola Datum: kl Telefonvakt: Linnea Hietala MVE480 Linjär algebra S

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

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

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Exempeltenta GruDat 2002/2003

Övning 6. Komprimering, kryptering, dokumentering & testning

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

kl Tentaupplägg

Grafer MST Top. sortering Starkt samm. komponenter Kortaste avstånd. Grafalgoritmer 1. Douglas Wikström KTH Stockholm

Föreläsning 9 Innehåll

Laboration 0: Del 2. Benjamin Kjellson Introduktion till matriser, vektorer, och ekvationssystem

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

Tentamen Datastrukturer D DAT 035/INN960

kl Tentaupplägg

Föreläsning 13 Innehåll

Datastrukturer och algoritmer. Innehåll. Trie. Informell specifikation. Organisation av Trie. Föreläsning 13 Trie och Sökträd.

Programmering II (ID1019) :00-11:00

Transkript:

/afs/nada.kth.se/home/w/uyxbcfw/teaching/dd/exercise/exercise.py October 4, KTH, CSC/CB, Mikael Lindahl Övning - Tillämpad datalogi Sammanfattning Idag räknade vi igenom en tentamen från januari. OBS i många uppgifter kan man svara på olika sätt. Det viktiga är att visa att man förstått. DD, TENTAMEN I TILLÄMPAD DATALOGI Tisdagen den januari kl 4 8 Maxpoäng =. 5 poäng ger E, men den som fått 4-49 poäng kan få komplettera. Gränserna för högre betyg är 6,, 8, och 9 poäng. Skriv upp antal bonuspoäng från labbar respektive hemtal på tentaomslaget. Tentorna beräknas vara rättade om två veckor och kan sedan hämtas på studentexpeditionen. Hjälpmedel: En algoritmbok och ditt handskrivna formelblad. Lämna in formelbladet tillsammans med tentan.. Spelautomat (p) Konstruera och rita upp en KMP-automat som söker efter Farmvilles läskigare efterträdare VILEVILLE. Ange även next-vektorn! i= V? I? L? E? V? I? L? L? E? i= i= i= i=4 i=5 i=6 i= i=8 i=9 i= Klar Ja: i=i+ Nej i=next(i) i 4 5 6 8 9 next(i) 4

/afs/nada.kth.se/home/w/uyxbcfw/teaching/dd/exercise/exercise.py October 4,. Spelsökning Speljätten Cawr Games har 4 84 olika spel i sin databas. Hittills har man använt binärträd för att få snabb sökning, men man vill byta till hashning, med en hashtabell som rymmer en miljon objekt. (p) a. Vilken krockhanteringsmetod skulle du använda? Motivera ditt val, och rita en bild som visar hur det går till. (p) b. Hur snabb skulle hashsökningen bli jämfört med binärsökningen? Anta att antalet jämförelser bestämmer tiden ) Krockhanteringsmetod Vi har runt en miljard element som vi vill lagra i en hashtabell med en miljon platser. För linjär eller kvadratisk probning som krockhantering behöver vi ha en hashtabell som är minst lika stor som antalet element som ska in. Det har vi inte och och därför bör vi istället välja krockhantering med listor. Vi kommer då dynamiskt bygga ut tabellen med listor för varje position när krockar uppstår. Så här kan vi illustrera en hashtabell med krocklistor: 6 ) Prestanda Om vi har en bra hashfuntkion som sprider värdena jämt i tabellen skulle vi i snitt få omkring krockar per position i hashvektorn (en miljard delat på en miljon). Tiden för en hash sökning skulle i genomsnitt ta / = 5 jämförelser. Med ett binärträd skulle vi istället få log (484) = jämförelser. Oturligt nog skulle hashtabellen bli 5/=6 gånger långsammare än binärträdet.

/afs/nada.kth.se/home/w/uyxbcfw/teaching/dd/exercise/exercise.py October 4,. Rekursivt spel (p) I spelet Hex ska kryssaren bygga en väg mellan övre vänsterkant och nedre högerkant och ringaren bygga en väg mellan övre högerkant och nedre vänsterkant. Båda kan inte lyckas (inser du varför?) men i exemplet har ringaren just vunnit (ser du hur?) Formulera en rekursiv tanke som kontrollerar om det finns en vinnande väg. (4p) Föreslå en datastruktur för att representera spelplanen, kryssen och ringarna. ) Rekursiv tanke Bilden nedan illustrerar var respektive spelare startar och slutar samt en vinnande väg för ringaren. Start kryssaren Start ringaren Mål ringaren Mål kryssaren För en position i spelplanen (se figure nedan) kan vi se att det finns tre rikningar som vi bör kolla vidare. Antingen till vänster, höger eller rakt fram. Positionerna snett bakåtvvänster och snett bakåt höger har redan besökts i steget innan och vi behöver därför inte gå dit. I bilden nedan kollar vi om den den rekursiva tanken "kolla rakt fram, vänster, höger" håller för kryssaren och ringaren. Vi ser att för ringaren hittar vi en lösning medan för kryssaren gör vi det inte. Rakt fram Vänster Höger Startposition ringaren 4 5 6 Behöver inte kolla snett bakåt vänster/höger för de gjordes i steget innan Klar 6 5 Startposition kryssaren 4 Vår rekursiva tanke blir:. Kolla nod rakt fram. Kolla nod vänster. Kolla nod höger Basfall: Om nod inte är spelarens tecken stanna, returera False, Om nod är målnod, returnera True Kolla för alla startnoder.

/afs/nada.kth.se/home/w/uyxbcfw/teaching/dd/exercise/exercise.py October 4, 4 ) Datastruktur Om vi vrider spelplanen 45 grader ser vi att vi kan representera den som en matris. Ring får ta värdet och kryss. Matrix 6x6 4 5 O= X= 4 Vrid 45 5 4. Teori (p) Nedan finns fem frågor om algoritmer och datastrukturer. Varje fråga kan ge upp till fyra poäng. Motivering krävs! a. Under vilka förhållanden kan sortering gå i tid O(n)? b. Kommer en postorder-utskrift av noderna i ett binärträd att ge noderna i omvänd ordning mot en preorderutskrift? c. Visa hur heapsort fungerar med följande data: 8 6 d. Hur många nivåer kan Huffmanträdet ha som mest vid kodning av alfabetets 9 bokstäver? e. En text är krypterad med transpositionschiffer eller Caesarchiffer. Hur ser du vilket det är? a) Sortering Räknesortering (distribution count) kan ge O(n). Räknesortering går att använda om man vet att det finns få nyckelvärden i förhållande till antal data som ska sorteras. Med räknesortering behöver man endast gå igenom filen gånger för att sortera vilket ger O(n) i komplexitet. b) Pre- och postordning Nej, så här blir det för ett träd med talen 4 6 5 : 4 Preordning noden-vänster-höger 4,,,,6,5, 6 5 Postordning vänster-höger-noden,,,5,,6,4

/afs/nada.kth.se/home/w/uyxbcfw/teaching/dd/exercise/exercise.py October 4, 5 c) Heapsort Talen 8 6 sorteras genom att först sätta in dem i en max-heap och sedan ta ut dem ur den. 8 Insättning Insättning + ett byte 6 8 8 ut, bubbla ner 6 ut, bubbla ner ut, bubbla ner ut 6 8 Insättning x 6 6 ut, bubbla ner Insättning max n*log(n) Uttagning ur heap n*log(n) d) Huffmanträd 8 om vi har riktigt otur. Detta sker om sannolikheten för varje delträd som byggs summerar till mindre eller samma sannolikhet för det tecken med minst sannolikhet. Detta träd kan vi till exempel få om sannolikheten för bokstäverna är distribuerade på följande sätt: Givet Fibonaccis tal följd. fib()= fib()= fib(n)=fib(n-)+fib(n-) Får vi sannolikheterna: p i = f ib(i)/ 9 i= f ib(i) p p a,,p 6 p z, Så här blir Huffmanträdet: etc r p~ p~44 p~ s p~ t p~8 proportionellt mot p~ p~ u p~5 v p~ p~ x p~ p~4 p~ y z p~ p~ e) Transposition eller Ceasar? Vi testar först om det är krypterat med Ceasar Det tar max 8 iterationer. Om det inte stämmer kan vi sluta oss till att meddelandet är kodat med transpositionschiffer

/afs/nada.kth.se/home/w/uyxbcfw/teaching/dd/exercise/exercise.py October 4, 6 5. Spelkomprimering (p) Vi vill komprimera ett konsolspel (t ex Super Mario Bros.). Vilka komprimerings- algoritmer kan komma ifråga? Motivera ditt svar! Vi har lärt oss om tre komprimeringsalgoritmer:. Huffmankodning. Lempel-Ziv (LZW). Run-Length-Encoding (RLE) Dataspelet Super Mario Bros är lagrat i binärkod. Därför passar inte huffman eftersom den algoritmen har som mål att skapa binärkod. LZW och RLE kan vi använda. LZW fungerar bra om vi har många kombinationer av ettor och nollor som upprepar sig och med RLE fungera bra om vi har långa repetitioner av ettor eller nollor. 6. Spelsyntax (p) Du vill skriva ett textbaserat äventyrsspel till mobilen. Den som spelar ska kunna skriva kommandon av typen: GÅ ÖSTER TA SVÄRDET KASTA SVÄRDET PÅ PUMAN Skriv en BNF-grammatik för sådana kommandon. Visa också med de tre exemplen ovan hur din syntax fungerar. BNF-grammatik: Med exempel: <meddelande> ::= Gå <riktning> Ta <vapen> Kasta <vapen> på <fiende> <riktning> ::= öster väster nord söder <vapen> ::= svärdet yxan spjutet <fiende> ::= puman lejonet kobran <meddelande> Gå söder <meddelande> Ta yxan <meddelande> Kasta spjutet på kobran Gå <riktning> söder Ta <vapen> yxan Kasta <vapen> på spjutet <fiende> kobran söder yxan spjutet kobran

/afs/nada.kth.se/home/w/uyxbcfw/teaching/dd/exercise/exercise.py October 4,. Patiens (6p) I patiensen "Rutan" använder man bara ess, kungar, damer och knektar, alltså sexton kort. Det gäller att lägga ut korten i en 4x4-matris så att två kort av samma färg eller valör aldrig finns i samma rad, kolumn eller någon av de båda diagonalerna. Man vill att ett program ska skriva ut alla lösningar till patiensen på nedanstående sätt. hj E sp D kl Kn ru K kl K ru Kn hj D sp E ru D kl E sp K hj Kn sp Kn hj K ru E kl D Du behöver inte skriva programkod, men du ska rita och förklara algoritmen utförligt samt beskriva datastrukturer, metoder och klasser. Hm, vi ska alltså komma på en algoritm som hittar alla lösningar. Låt oss börja med att läga in ett kort i matrisen. Sen får vi försöka komma på regler för hur vi kan lägga in fler kort i matrisen. Vi kan tolka vara ny matris som barn till den ursprungsmatrisen. Då går det att tolka det hela som ett problemträd där lösningarna kommer finnas i löven. För att komma på reglerna för hur nya barn i problemträdet skapas kan vi kan vi först strukturera om matrisen till en vektor genom att lägga raderna efter varandra. För att sen få ett hum om hur vår algoritm bör se ut kan vi studera ett par exempel. Vi ritar därför upp två scenarion, ett där vi bara har sista positionen kvar att fylla in och ett där vi ska fylla fjärde sista. Utifrån dessa två scenarion bör vi kunna komma upp med reglerna för hur vi ska kolla bakåt i vektorn för att lägga in ett kort på position i. Scenario index 4 5 6 8 9 4 5 Scenario index 4 5 6 8 9 4 5 Lodrätt: kolla bakåt i=i-4 tills i< Vågrätt: om i mod 4= > kolla bakåt ett steg i taget tills i mod 4= Diagonalt:. om i mod 4= kolla bakåt i=i- tills i<. om i mod 4= kolla bakåt i=i-5 tills i< Vi kan rita upp följande problemträd:

/afs/nada.kth.se/home/w/uyxbcfw/teaching/dd/exercise/exercise.py October 4, 8 Tom hj Kn hj D hj K sp D sp K sp E hj Kn, ru D hj Kn, spe hj Kn, ru D, kl K hj Kn, ru D, sp E hj Kn, ru D, kl K, spe etc. Datastrukturer: ) Lista för korten. ) Lista för lösningarna. Algortimen: Djupetförst sökning i problemträdet. En rekursiv funktion som får referens till i och sen kollar för varje kort i leken om kortfärg och kortvalör skiljer sig på 9 #4 position : \\. lodrätt: i=i-4 tills i<. vågrätt: i=i- tills i mod 4 =. diagonalt: om i mod = kolla i=i- tills i< om i mod 5 = kolla i=i-5 tills i< Basfall: Om vi funnit en lösning eller, eller inte är uppfyllt för nått kort. När vi finner en lösning spara undan den. Metoder: skapa_matris(i, vektor, losningar) - rekursiv funktion för att söka igenom problemträdet Klasser LankadLista Nod