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



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

Tildatenta Lösningsskiss

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

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.

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Fredag 10 juni 2016 kl 8 12

Hashtabeller! (& kanske lite sortering)

DAI2 (TIDAL) + I2 (TKIEK)

Träd Hierarkiska strukturer

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

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

Programkonstruktion och. Datastrukturer

Tentamen kl Uppgift 4. Uppgift 5

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

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

Tentamen, Algoritmer och datastrukturer

729G04: Inlämningsuppgift Diskret matematik

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

Övning 6 - Tillämpad datalogi 2012

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

Lösningar Datastrukturer TDA

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

Tentamen TEN1 HI

Föreläsning 13. Träd

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

Grundläggande Datalogi för F

Magnus Nielsen, IDA, Linköpings universitet

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

Föreläsning 9 Datastrukturer (DAT037)

Vad har vi pratat om i kursen?

Lösningsförslag DD1320/DD

Grundläggande Datalogi för F

Föreläsning 9 Innehåll

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

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

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

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

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

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

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

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

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

Föreläsning Datastrukturer (DAT036)

Trädstrukturer och grafer

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

Tentamen TEN1 HI

Teoretisk del. Facit Tentamen TDDC (6)

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Föreläsning 13 och 14: Binära träd

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

Föreläsning 4 Datastrukturer (DAT037)

Datalogi, grundkurs 1

Tentamen Datastrukturer, DAT037 (DAT036)

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

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

Hashing Bakom kulisserna på Pythons dictionary

Föreläsning 5 TDDC91,TDDE22,725G97: DALG. Föreläsning i Datastrukturer och algoritmer 18 september 2018

Facit Tentamen TDDC (7)

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

Föreläsning Datastrukturer (DAT037)

Grundfrågor för kryptosystem

Programkonstruktion och. Datastrukturer

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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

Föreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Programmering II (ID1019) :00-17:00

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Tenta i Grundläggande programmering DD klockan

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

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

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

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

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Föreläsning 6. Sökträd: AVL-träd, Multi-Way -sökträd, B-träd TDDC70/91: DALG. Innehåll. Innehåll. 1 AVL-träd

::= HIHI HIHIHI ::= HAHA HAHAHA

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

Föreläsning Datastrukturer (DAT036)

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen TEN1 HI

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

Algoritmer, datastrukturer och komplexitet

Tentamen Datastrukturer D DAT 035/INN960

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

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

Tentamen Datastrukturer (DAT037)

Övning 6. Komprimering, kryptering, dokumentering & testning

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Sätt att skriva ut binärträd

Datastrukturer. föreläsning 10. Maps 1

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

Föreläsning 2. AVL-träd, Multi-Way -sökträd, B-träd TDDD71: DALG. Innehåll. Innehåll. 1 Binära sökträd

Tentamen Datastrukturer D DAT 035/INN960

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Programkonstruktion och Datastrukturer

Transkript:

DD1320 Tillämpad datalogi Lösnings-skiss till tentamen 2010-10-18

1. Mormors mobil 10p M O R M O R S M O B I L M O R M O R S M O B I L i 1 2 3 4 5 6 7 8 9 10 11 12 next[i] 0 1 1 0 1 1 4 0 1 3 1 1 Bakåtpilarna/next-värde för i=7 och i=10 är värda mest poäng vid rättningen.

2. Mobiler av mobiler a) 4p 80 b) 4p Preorder: roten, vänster delträd, höger delträd 80 70 60 65 75 90 85 Inorder: vänster delträd, roten, höger delträd 60 65 70 75 80 85 90 70 90 Postorder: vänster delträd, höger delträd, roten 65 60 75 70 85 90 80 60 75 85 65 Inorder ger 2p (1p om man gjort fel men upptäckt det), preorder och postorder 1p vardera.

2. Mobiler av mobiler c) 4p Basfall: Ett tomt träd (inga noder) har vikten 0 Rekursiv tanke: Totala vikten = Totala vikten av vänster delträd + vikten i rotnoden + Totala vikten av höger delträd 80 70 90 60 75 85 None None 65 None None None None None None En lösning utan rekursiv tanke ger 0 poäng.

2. Mobiler av mobiler d) 4p I ett binärt sökträd är: - alla noder i vänster delträd mindre än roten - alla noder i höger delträd större än roten - vänster och höger delträd också sökträd rot rot rot rot rot None 85 60 90 70 None NoneNone 65 85 None 60 75 Basfall: Ett tomt träd är ett sökträd Rekursiv tanke: Ett träd är ett sökträd om vänsterträdet är tomt eller är ett sökträd vars rotvärde är mindre än trädets rotvärde och högerträdet är tomt eller är ett sökträd vars rotvärde är större än trädets rotvärde Även här ger en lösning utan rekursiv tanke 0 poäng.

3. Mobilkod a) 4p * Snabb sökning, det går lika snabbt oavsett hur många nummer man har i registret * Det är lätt att skapa registret. * Det är enkelt att lägga till nya nummer. * Jämför med alternativen: Linjärsökning är för långsamt, lika många jämförelser som antal nummer. Binärsökning är snabbare, men inte lika snabb (över 20 jämförelser för sex miljoner nummer), och innebär extra arbete för att hålla datastrukturen i ordning. Här gäller det att ha övertygande argument. De tekniska detaljerna är mindre intressanta det kommer i nästa deluppgift.

3. Mobilkod b) 6p Hashfunktion: Hashfunktionen är en funktion av nyckeln, som är IMEI-koden T ex f = IMEI modulo n, där n är hashtabellens storlek Krockhantering: Vi använder kvadratisk probning: vid krock på plats i tittar vi vidare på plats i+1, i+2², i+3², i+4² osv. Hashtabellens storlek: Vid kvadratisk probning måste hashtabellen vara dubbelt så stor (50% luft) och ett primtal (för att vi inte ska hamna i en oändlig slinga vid probning). Här har vi sex miljoner abonnenter, så tabellens storlek ska vara ett primtal större än 12 000 000. Skapa tabellen: Innan hashtabellen kan användas måste alla abonnenter hashas in med IMEIkoden som nyckel. Sökning: För att söka i registret anger man en IMEI-kod. Hashfunktionen värde anger det index där abonnentens data ligger. Bara teori duger inte - här måste man ge konkreta förslag med hänsyn till just detta problem.

3. Mobilkod d) 4p * Ett Bloomfilter innehåller bara True/False men det är OK eftersom vi bara vill veta om telefonen är svartlistad eller inte. Tabellen kan innehålla False på alla platser till att börja med, och True får ange att telefonen är svartlistad * Varje nummer hashas in i tabellen så här: Vi använder flera olika hashfunktioner och stoppar in True på alla index vi får fram. * Vid sökning kollar vi samma hashfunktioner igen om det står True på alla platser är numret svartlistat. * Ingen krockhantering. Det innebär att ett nummer kan råka se svartlistat ut trots att det inte är det, vilket är en katastrof! * Om en telefon har blivit svartlistad av misstag går det inte att ta bort den, man kan inte återställa till False eftersom man inte vet vilka andra nummer som påverkas. Detta är också katastrofalt. Slutsats: Det går inte att använda Blommfilter till svartlistningen.

4. Mobilfråga a) (5p) Dekryptera AIEBNDRIDESARLYNOLM Kan det vara Caesarchiffer? Prova att skifta vanligaste bokstaven till E 2A, 1B, 2D, 2E, 2I, 2L, 1M, 2N, 1O, 2R, 1S, 1Y Det finns sju vanliga bokstäver (två av varje) och fem lite mindre vanliga. Prova A->E (flytta fyra steg framåt) EMIFRHVMHIWEVPCRSPQ Det var uppenbarligen inte rätt. Innan vi provar övriga sex testar vi Transpositionschiffer: Prova att lägga in radbyten efter 2, 3, bokstäver och läs kolumnvis: AI EB ND RI DE SA RL YN OL M AIE BND RID ESA RLY NOL M AENRDSRYOMIBDIEALNL ABRERNMINISLOEDDAYL AIEB NDRI DESA RLYN OLM ANDROIDELLERSYMBIAN Strukturerade knäckningsförsök kan ge delpoäng även om man inte når målet!

4. b (3 p) Transpositionschiffer RSA är bättre för att: * Det är i praktiken oknäckbart för att knäcka det måste vi faktorisera ett stort tal (produkten av två stora primtal) och det tar för lång tid (går inte att göra i polynomisk tid). * Systemet med en publik och en privat nyckel gör det lätt att visa för andra hur dom ska kryptera (man behöver inte vara rädd för att nån tjuvlyssnar).

5. Teori (4p per deluppgift) a) Räknesortering lönar sig när ett stort antal element ska sorteras med avseende på ett mycket mindre antal nyckelvärden. Exempel: Sortera Sveriges befolkning (9 miljoner) på födelseår (110 olika). b) Ja, man måste lagra även nyckeln i en hashtabell, för att man ska kunna hitta rätt bland krockande element (oavsett krockhanteringsmetod). c) Frekvenstabeller kan användas: 1. Inom kryptering för att knäcka Caesarchiffrerad text genom att ta reda på vilka bokstäver som är vanligast i den chiffrerade texten och jämföra med frekvenserna i naturligt språk. 2. Inom komprimering genom att ge vanliga tecken kortare koder, t ex i Huffmankodning. d) Ett binärträd är rekursivt uppbyggt i vänster delträd, rot och höger delträd: e) Med abstraktion döljer vi implementationen datatypen används via ett gränssnitt. Det gör det enklare att använda datatypen: man behöver inte förstå implementationen och ev ändringar av implementationen påverkar inte användningen.

6. Mobilladdning a) (4p) Anta att vi har m mobiler och n laddare, där n >= m Om vi för varje mobil provar igenom laddare får vi i värsta fallet: mobil nr antal jämförelser 1 n-1 2 n-2...... m dvs n-1 + n-2 + + n-m = n*m (1+2+... +m) = m(2n-m-1)/2 Om vi för varje laddare provar igenom mobilerna får vi istället: laddare nr n-m 1 m-1 2 m-2...... n antal jämförelser m-n dvs m-1 + m-2 + + m-n = m*n (1+2+...+n) = n(2m-n-1)/2 Samma formel => bägge varianterna är lika bra. I a)-uppgiften räcker det egentligen med att visa med några exempel!

6. b (4p) Med m=8 mobiler och n=8 laddare tar det m(2n-m-1)/2 = 8(2*8-8-1)/2 = 28 jämförelser och 28*10 sekunder = 280 sekunder, dvs knappt 5 minuter. 6. c (6p) Hoppsan, det här gjorde jag visst redan i uppgift a; se ovan!

7. Syntax för SMS (10p) sms:+46070432215?body=var är du sms:+46070974293,+46070974295?body=på Q frågetecken saknas, komma mellan flera nummer saknas, siffor blandas med +, det ska vara elva siffror i ett nummer, letter innehåller bara gemena Förbättrad version: <sms-uri> ::= <scheme> ":" <sms-hier-part> <sms-field> <scheme> ::= "sms" <sms-hier-part> ::= <sms-recipient> <sms-recipient>, <sms-hier-part> <sms-recipient> ::= "+" <number>"ö" <number> ::= <n><n><n><n><n><n><n><n><n><n><n> <n> ::= "0"..."9" <sms-field> ::= "body=" <?body> <body> ::= <letter> <letter> <body> <letter> ::= "a"... "z" "å" "ä" "ö" "A"... "Z" "Å" "Ä" "Ö" 2p per fixat fel, blott 1p per fel som hittats men inte fixats!

8. Mobilappsabstraktion (10p) Mobiltelefonen har ett ett gränssnitt till operativsystemet, med funktioner som man kan anropa för att t ex kolla gps-koordinater, spela musik etc. För app-utvecklaren fungerar det här gränssnittet som en abstraktion av mobilen, man slipper försöka lista ut hur mobilens hårdvara egentligen fungerar så det blir enklare att programmera. Och när operativsystemet uppdateras ska gränssnittet bevaras (det är bara innehållet i funktionerna som ändrats) så appen går fortfarande att köra. Samma sak gäller om vi vill flytta appen till en annan mobilmodell så länge den har samma typ av operativsystem går det bra. Exempel: Min mobil är en Nokia med Symbian. Det finns ett gränssnitt för Python så jag kan t ex skriva en Python-app för att hitta gympapass. Då kan jag anropa funktioner för att läsa från en webbsida (med info om dagens pass), funktioner för att kolla vad klockan är (vilket pass hinner jag till?) och funktioner för att kolla gps-koordinater (vilken gympa-lokal ligger närmast?). Min app kan sen användas av andra som har Symbian-mobiler, och kommer fortfarande att fungera efter uppdateringar. Här måste man anknyta till mobiler, allmänt prat om abstraktion duger inte!