Datastrukturer och algoritmer



Relevanta dokument
Datastrukturer och algoritmer

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

Datastrukturer och algoritmer

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

Föreläsning 4: Giriga algoritmer. Giriga algoritmer

Tentamen: Programutveckling ht 2015

Tentamen Datastrukturer D DAT 036/DIT960

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

Sätt att skriva ut binärträd

Innehåll. Inblandade personer. ÿkurspresentation Inblandade personer Administration Målsättning Förkunskaper Kursutvärdering Upplägg Översikt

Magnus Nielsen, IDA, Linköpings universitet

Datastrukturer och algoritmer

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

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

Föreläsning 6: Introduktion av listor

Föreläsning 11. Giriga algoritmer

Dugga Datastrukturer (DAT036)

Föreläsning 10. ADT:er och datastrukturer

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

UMEÅ UNIVERSITET 26 april 2002 Instutionen för datavetenskap. Grafproblem. Laboration 4, Datastrukturer och Algoritmer VT02

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

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

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

Tommy Färnqvist, IDA, Linköpings universitet

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

Tentamen TEN1 HI

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

Tentamen Datastrukturer D DAT 036/INN960

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

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

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15-13:15

Föreläsning 4: Kombinatorisk sökning

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

Föreläsning Datastrukturer (DAT037)

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

SORTERING OCH SÖKNING

Föreläsning 13 Datastrukturer (DAT037)

Tentamen kl Uppgift 4. Uppgift 5

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 13 Datastrukturer (DAT037)

Tentaupplägg denna gång

Rekursion. Rekursiv lösningsstrategi. Algoritmkonstruktion. Exempelproblem Hitta största elementet i en sekvens v i där i 1... n.

Föreläsning 2 Datastrukturer (DAT037)

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Tentamen Datastrukturer, DAT037 (DAT036)

Datastrukturer och algoritmer

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

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation

Grafer. 1 Grafer. Grunder i matematik och logik (2015) 1.1 Oriktade grafer. Marco Kuhlmann

Föreläsning 1. Introduktion. Vad är en algoritm?

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

Datastrukturer. föreläsning 6. Maps 1

Tentamen Datastrukturer för D2 DAT 035

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

Tentamen Datastrukturer (DAT037)

Fortsättningskurs i programmering F 2. Algoritmer i Programutveckling Hugo Quisbert Problemexempel 1

Tentamen Datastrukturer D DAT 035/INN960

Objektorienterad programmering D2

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

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Grundläggande programmering med C# 7,5 högskolepoäng

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen Datastrukturer D DAT 036/INN960

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

Grunderna i stegkodsprogrammering

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

Föreläsning 11 Datastrukturer (DAT037)

Föreläsning 8: Intro till Komplexitetsteori

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

Föreläsning 5 Innehåll

Föreläsning 1 Datastrukturer (DAT037)

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

Exempeltenta GruDat 2002/2003

Tentamen Datastrukturer (DAT036)

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

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 27 maj 2008

TDP Regler

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret Lektion 3

Algoritmer, datastrukturer och komplexitet

Aditro HR Portalen - logga in och byta lösenord

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

Tentamen i Realtidsprogrammering

Föreläsning Datastrukturer (DAT037)

Kommunikationsmöjligheter i Mondo

Föreläsning 12. Söndra och härska

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 09:00 14:00

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

Lösningar Datastrukturer TDA

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

Föreläsning 5: Dynamisk programmering

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Föreläsning 3.1: Datastrukturer, en översikt

Introduktionsmöte Innehåll

Algoritmer, datastrukturer och komplexitet

Vad har vi pratat om i kursen?

Transkript:

Datastrukturer och algoritmer Föreläsning 16 2 Innehåll Snabbrepetition Exempeltentamen Kursutvärdering Mina målsättningar Kursens mål: 3 Rolig och viktig kurs Bli en bättre programmerare och inse att man blivit det Känna till kända lösningar på typiska problem Konstruera robusta och korrekta program Konstruera och beskriva algoritmer och datatyper Planera sitt arbete så att projekt blir klar i tid Förstå komplexitetsbegreppet Tid och rum Bli bättre på att kommunicera resultat skriftligt 4 Kursdeltagarna ska förvärva förtrogenhet med grundläggande element och konstruktioner/tekniker för att organisera data och lösa problem. Detta inbegriper formell och informell beskrivning av grundläggande abstrakta datatyper, grundläggande algoritmer och effektivitetsanalys paradigmer/tekniker för algoritmkonstruktion. Kursens mål FSR: Innehållsöversikt 5 Efter avslutad kurs ska studenten kunna: känna till grundläggande begrepp relaterade till datastrukturer och algoritmer känna till grundläggande abstrakta datatyper såsom lista, stack, kö, träd, mängd, graf och tabell välja datatyper för ett givet problem välja implementation av datatyper känna till grundläggande algoritmer, deras komplexitet och karakteristiska egenskaper för typiska problem analysera algoritmer praktiskt och teoretiskt med avseende på prestanda använda sig av grundläggande problemlösningsstrategier, som till exempel divide and conquer, brute force, greedy, dynamisk programmering, på nya problem tillämpa den objektorienteringsparadigmen på ett större programmeringsprojekt strukturerat dokumentera algoritmer och datatyper 6 Algoritmer Tids- och rumsfrågor Designprinciper Abstrakta datatyper Sökning Sortering

Innehållsöversikt Algoritmer Innehållsöversikt Algoritmer 7 Tids och rumsfrågor Exekvering, implementering, underhåll Tid vs rumskomplexitet Analys av exekveringstider o Olika sätt, vad de står för och +/- Experimentell Asymptotisk o T(n) för en alg => O(n) Primitiva operationer Okulärbesiktning o Att beskriva algoritmer 8 Designprinciper Idéer till 4 olika algoritmtyper o Brute force, D&C, Greedy och dynamisk programmering o Exempel på varje o +/- o Typiska användningar 9 Innehållsöversikt Abstrakta Datatyper (ADT) Stack, Kö, Listor, Träd, Graf, Prioritetskö, Heap, Tabell, Sträng, Mängd, Sökträd, Tries, mm Beskrivningssätt Organisation, Modell, Gränsytan (formell, informell) Grundbegrepp Vad är en organisation, sorterad ADT, mm Primär vs. sekundär struktur Absolut vs. relativ komplexitet Sätt att implementera +/-, när var hur Komplexitet för de viktigaste operationerna Vart hittar vi ADT typiskt Hur olika ADT hänger ihop med varandra Algoritmer på ADT 10 Innehållsöversikt Sökning (traversering) Vad är traversering Olika metoder för sökning i sekvenser Linjär & Binär +/- Ställer de några krav på implementationen av ADTn? Innehållsöversikt Sortering Tentan 11 Varför sorterar vi? Sorterad ADT vs sortering av data Sökningen blir snabbare ibland Hur kan vi sortera (olika former) +/- När passar dom? Stabil sortering 5-6 olika algoritmer, analys 12 Ska kontrollera att de förväntade studieresultaten uppfyllts. Definitionsfrågor Begrepp Definiera, beskriv, ge exempel,... Förståelsefrågor Visa hur en algoritm fungerar Vilken datatyp passar bäst för detta problem, varför? Jämför, analysera, förklara,... Resultaten kommer att skickas via mail (@cs.umu.se)

Exempeltenta 030321 13 Enbart skissartade svar dessa svar skulle inte ge full poäng på en tentamen! Tanken är att man ska få en hum vad som krävs och se hur vi tänkte när vi rättade. Utöver kriterierna för varje uppgift gör man som rättare alltid en helhetsbedömning (av varje enskild uppgift och tentan i stort). 14 Uppgift 1. (20 p) (0.5 p/ begrepp) Förklara 40 stycken av följande begrepp med avseende på kursinnehållet. Använd bifogad tabell (sist i tentan), (fler än 40 förklaringar räknas som gardering och de första 40 kommer att rättas). (Det krävs att man har minst 15 poäng på denna uppgift för att kunna bli godkänd på tentan). 15 Uppgift 1. (20 p) (0.5 p/ begrepp) Typisk definitions/fakta fråga Ges/gavs inga lösningsförslag på detta. Varje definition kunde få upp till 4/8 p Kommer INTE att vara med på årets tentor Däremot kan naturligtvis frågor om enstaka begrepp finnas med. Uppgift 2-13p (4+6+1+2) 16 Du arbetar på ett företag som skall konstruera ett system på uppdrag av SMHI. SMHI samlar dagligen in fakta från alla världens väderstationer till en stor databas som innehåller följande: namn (på väderstationen), temperatur, luftfuktighet och vindstyrka samt longitud och latitud (för platsen). Meteorologerna vill kunna sortera datat på godtyckligt fält i databasen. Det är extremt viktigt att programmet är snabbt för att man ska kunna göra en tillförlitlig prognos. Samtidigt är applikationen tänkt att köras på handdatorer därför är minnesutrymmet begränsat. Uppgift 2-13p (4+6+1+2) 17 a) Föreslå en lämplig sorteringsalgoritm som klarar av kraven på bästa sätt, motivera och redovisa ditt val. (Om du måste ge avkall på något av kraven för att kunna leverera systemet i tid så motivera varför). b) Föreslå en lämplig standarddatatyp, beskriv datatypen med modell, organisation, informell gränsyta samt implementation. c) Motivera ditt val av implementation. d) Skriv en algoritmbeskrivning (pseudokod) för den valda sorteringen, där du utnyttjar gränsyteoperationerna. 18 a) Föreslå sorteringsalgoritm Denna del får poäng efter hur mycket man har med i sin beskrivning: Nämna en algoritm överhuvutaget Nämna rätt algoritm (i detta fall in-place quicksort eller ev. radix exchange sort) Diskutera minnesåtgång för vald algoritm Diskutera snabbhet för vald algoritm Nämna minst en annan algoritm som jämförelse och nämna dess minnesåtgång och snabbhet

b) Föreslå och beskriv en datatyp c) Motivera val av implementation 19 Även här ges poäng efter vad och vilka saker man tar upp Modell Organisation Implementation Gränsytan o Korrekta metoder o Korrekta parametrar o Beskrivning av metoderna De vanligaste (och bästa) valen är lista eller fält. Väljer man tabell får man avdrag eftersom man inte kan sortera en tabell. I gränsytan behöver man inte ange exakt rätt namn på metoderna Blandar man ihop metoder och tar tabellmetoder i listan eller tvärtom så ger det avdrag. Likaså om man inte har med alla parametrar eller inte beskriver vad metoden ska göra. Med implementation avses hur man väljer att realisera sin datatyp. Tex Lista kan man välja att implementera som array eller länkad lista. 20 Här ska man motivera sitt val av implementation och förklara varför man tex valt en array och inte en lista. Om man i a) har sagt att databasen varierar i storlek bör man motivera en dynamisk datatyp här. d) Ge en algoritmbeskrivning Uppgift 3-9p (3+1+5) 21 Här finns det två tydliga krav: algoritmen ska skrivas i pseudokod man ska använda sig av gränsyteoperationerna från b) 22 I ett kassasystem vill vi kunna ge tillbaka växel till en kund. Mynten vi har att tillgå är på 1, 5, 10 respektive 25 enheter. Problemet är nu att för ett godtyckligt växelbelopp välja ett antal mynt av de olika valörerna så att: myntens sammanlagda värde exakt uppgår till det eftersökta växelbeloppet ett så litet antal mynt som möjligt används. Vi antar att det finns tillräckligt många mynt av varje valör. Uppgift 3-9p (3+1+5) 23 a) Använd pseudokod för att ge en utförlig beskrivning av en girig algoritm som löser ovanstående problem. b) Antag att vi förutom valörerna ovan också har mynt som är värda 12 enheter. På vilket sätt påverkar det din giriga lösning från a)? c) Har vi situationen som beskrivs i b) är det bättre att försöka lösa växlingsproblemet m.h.a. söndra och härska (divideand-conquer). Använd pseudokod för att ge en utförlig beskrivning av en algoritm som löser växlingsproblemet med denna teknik. Ledning: Tänk rekursivt! Antingen så kan vi växla hela beloppet med endast ett mynt eller så kan vi (på något lämpligt sätt) dela upp växelbeloppet, växla delbeloppen med minimalt antal mynt rekursivt och sedan konstruera en fullständig lösning från dellösningarna. 24 a) Girig algoritm i pseudokod (Finns många varianter!!) Algoritm Greedy(v, amount) amount beloppet som ska ges tillbaka med minimalt antal mynt. v = [cn,cn-1,...,c0] vektor med de olika myntslagen i vårt fall v = [25,10,5,1] rest = amount for i = 0 to length(v) do begin // hur många mynt av valör(i) ryms i // beloppet? change[i] = rest div v[i] // hur mycket finns kvar sen? rest = rest mod v[i] end return change

25 b) Vad händer om myntet 12 läggs till? Algoritmen blir inte längre optimal! Om man lägger till myntet 12 och sedan försöker växla 15 kronor så ger algoritmen i a) svaret 1 st 12-krona och 3 st 1-kronor, dvs totalt 4 mynt medan en optimal lösning skulle vara 1 tia och 1 femma. 26 c) Lös växlingsproblemet m.h.a. söndra och härska. Många trodde att det räckte att skriva om a) rekursivt... Förslag på algoritm 1. Om vi kan växla beloppet med exakt ett mynt så gör vi det. 2. Annars delar vi upp problemet i två delproblem som löses var för sig och vars resultat sedan kombineras ihop till en fullständig lösning: För något i beräknar vi det minsta antal växelmynt som behövs för att växla i respektive amount - i och summerar sedan de två delresultaten. För att få en minimal lösning måste vi upprepa detta för varje värde på i och välja det i som minimerar summan. Till ovanstående strategi måste vi lägga en strategi för att generera tänkbara uppdelningar. Enklast är att pröva alla i från 1 till k/2. Här följer en beskrivning av en sådan lösning: // v = [cn, cn-1,..., c0] är en vektor med de olika myntslagen // från största, cn, till minsta, c0. Antag att c0 = 1. makechange(v, amount) // STEG 1 change = [] // Titta efter en exakt lösning med ett enda mynt. i = 0 while (i <= n) if (v[i] equals amount) return v[i] i = i + 1 // STEG 2 Ingen exakt lösning, lös rekursivt. min = amount //Sämsta fallet är lika många mynt som amount j = 1 while (j <= (amount / 2)) c1 = makechange(v, j) c2 = makechange(v, amount - j) if ((length of c1 + length of c2) < min) change = append c2 to the end of c1 min = length of change j = j + 1 return change Uppgift 4 8p (4+1+3) 28 Nu har du (förhoppningsvis) gjort färdigt sorteringsmodulen i uppgift 2, så företaget du jobbar åt har fått ett nytt uppdrag där ni skall skriva en modul som skall användas för att konstruera ett nytt datornät där våra byar i glesbygden skall kopplas upp med hjälp av ett fibernät. Kraven är att alla byar som är med i projektet skall kunna nås från vilken annan by som är med i projektet direkt eller indirekt via någon annan by. Givetvis så är det en kostnad förknippad med att dra fiber mellan två byar som beror dels på avståndet men också på markförhållandena, etc. Beställarna (staten) vill ha den billigaste lösningen för fiberdragningen. a) och b) 29 a) Beskriv en algoritm som löser detta problem. Prims eller Kruskals algoritm b) Går det att härleda problemet till något känt typproblem? Minimalt uppspännande träd 30 c) Visa hur din algoritm från a) fungerar på nedanstående nätverk. (Obs! Även om din algoritm i a) skulle råka vara fel så kan du få poäng på denna om du visar hur den funkar.)

Uppgift 5-7p (4+2+1) Sluten hashing: 31 Sätt in följande tal (i given ordning) i en hashtabell: 3, 4, 29, 16, 42, 6, 55, 0, 13, 2, 26, 130, och 19. a) Använd hashfunktionen h(x)= x mod y, välj ett lämpligt y. Gör detta både för öppen hashing och sluten hashing. För sluten hashing, använd linjär teknik (linear probing) för att hantera kollisioner. Redogör på ett tydligt sätt för alla kollisioner som uppkommer. b) Motivera valet av y i hashfunktionen! c) Hur kan man gå till väga om det var namn på personer (anders, bo, aron, arne, östen, sune, bertil, david, åsa, nisse, karin, berit, ada) som skulle lagras i hashtabellen? Förklara principen, dvs du behöver inte skapa hashtabellen? 32 Fyllnadsgraden ska inte överstiga 75 % och y ska vara ett primtal för att få bättre spridning. Ett lämpligt y kan då i detta fall vara 17. Vid sluten hashing är hashtabellen en cirkulär vektor och när man använder linjär probing vid kollisioner sätter man in elementet på första lediga plats. 3%17 = 3, 4%17 = 4, 29%17 = 12, 16%17 = 16, 42%27 = 8, 6%17 = 6, 55%17 = 4, 0%17 = 0, 13%17 = 13, 2%17 = 2, 26%17 = 9, 130%17 = 11, 19%17 = 2 Öppen hashing: Uppgift 6 3 p Tabellen är en vektor av lista Hashtabellen ska ha max fyllnadsgrad 2*y, där y är storleken på hashtabellen. I detta fall räcker det med y = 7. Under kursen har vi stött på flera olika typer av sökträd: Binärt sökträd, AVL, flervägssökträd (m-tree) och B-träd (2-4 träd). Ge en tumregel till en implementatör som tar hänsyn till för- och nackdelar samt likheter och skillnader mellan de olika typerna av sökträd. 33 34 Uppgift 6 Kursutvärdering 35 Här måste man formulera sitt svar som en tumregel annars blir det avdrag. Viktiga saker att nämna: AVL är den balanserade formen av Binära sökträd och B-träd är den balanserade formen av flervägssökträd. Binära träd har ett värde i varje nod (0-2 barn) och flervägssökträd har flera etiketter i varje nod och kan ha/brukar ha mer än 2 barn. Det tar längre tid inuti noderna i ett flervägssökträd. 36