© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 16
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Innehåll Snabbrepetition Exempeltentamen Kursutvärdering
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Mina målsättningar 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
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Kursens mål: Kursdeltagarna ska förvärva förtrogenhet med grundläggande element och konstruk- tioner/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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Kursens mål FSR: 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
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Innehållsöversikt Algoritmer Tids- och rumsfrågor Designprinciper Abstrakta datatyper Sökning Sortering
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Innehållsöversikt – Algoritmer Tids och rumsfrågor Exekvering, implementering, underhåll Tid vs rumskomplexitet Analys av exekveringstider oOlika sätt, vad de står för och +/- –Experimentell –Asymptotisk oT(n) för en alg => O(n) –Primitiva operationer –Okulärbesiktning oAtt beskriva algoritmer
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Innehållsöversikt – Algoritmer Designprinciper Idéer till 4 olika algoritmtyper oBrute force, D&C, Greedy och dynamisk programmering oExempel på varje o+/- oTypiska användningar
DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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
DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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?
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Innehållsöversikt – Sortering 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
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Tentan 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
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Exempeltenta 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).
DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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).
DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Uppgift p ( ) 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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Uppgift p ( ) 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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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
DoA VT -07 © Anders Broberg, Lena Kallin Westin, b) Föreslå och beskriv en datatyp Även här ges poäng efter vad och vilka saker man tar upp Modell Organisation Implementation Gränsytan oKorrekta metoder oKorrekta parametrar oBeskrivning 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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, c) Motivera val av implementation 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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, d) Ge en algoritmbeskrivning Här finns det två tydliga krav: algoritmen ska skrivas i pseudokod man ska använda sig av gränsyteoperationerna från b)
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Uppgift 3 - 9p (3+1+5) 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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Uppgift 3 - 9p (3+1+5) 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 (divide- and-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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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
DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Uppgift 4 – 8p (4+1+3) 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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, a) och b) 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
DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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.)
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Uppgift 5 - 7p (4+2+1) 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?
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Sluten hashing: 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
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Öppen hashing: 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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Uppgift 6 – 3 p 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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Uppgift 6 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.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, Kursutvärdering