Prov i DAT 312: Algoritmer och datastrukturer för systemvetare Jacek Malec Datavetenskap, LU 11 april 2003 Datum 11 april 2003 Tid 14 19 Ansvarig lärare Jacek Malec (tel. 03 9890431) Hjälpmedel inga Antal frågor 8 Maximalt antal poäng 80 Anvisningar Läs igenom hela skrivningen och notera eventuella oklarheter innan du börjar lösa uppgifterna. Skriv tydligt och klart. Lösningar som inte går att läsa kan naturligtvis inte ge några poäng, och oklara formuleringar kommer förmodligen att misstolkas. Antaganden utöver de som står i uppgiften måste anges. Dessa antaganden får förstås inte förändra den givna uppgiften. För godkänt krävs 50% av maxpoäng. 1
Uppgift 1 (10 p) Terminologi 1. (1.5p) Vad menas med att ett problem tillhör klassen P? Ge åtminstone ett par exempel på sådana problem. 2. (1.5p) Vad är en trie? Ge (rita) ett exempel. 3. (1.5p) Vad är en sammanhängande graf (eng. connected)? Ge ett exempel. 4. (1.5p) Vad är en topologisk ordning? Ge ett exempel. 5. (4p) Vad är en algoritm? Berätta hur en sådan är uppbyggd. Uppgift 2 (10 p) Sortering 1. Beskriv med några rader i naturligt språk algoritmen snabbsortering (Quick-sort). 2. Diskutera dess egenskaper jämfört med andra tänkbara sorteringsmetoder. 3. Visa hur den kommer att fungera för följande sekvens av tal: 45 15 32 6 1 48 22 12 33 20. Anta att det alltid är det näst sista talet i sekvensen som lottas fram som pivot. Uppgift 3 (10 p) Implementation 1. Beskriv åtminstone ett par typiska sätt att i en dator representera prioritetsköer. Diskutera egenskaper hos olika implementationer. Vilka är fördelarna respektive nackdelarna med varje metod? 2. Hur kan en prioritetskö användas för att sortera tal? Beskriv de metoder som motsvarar dina tidigare implementationer. Finns det några fördelar med att sortera mha en prioritetskö? Vilka i så fall? 2
Uppgift 4 (10 p) Abstrakta datatyper 1. Vad menas med en abstrakt datatyp (ADT) och varför är just det namnet rimligt? 2. Ange en möjlig specifikation av en lexikon-adt. 3. Föreslå åtminstone två tänkbara, skilda metoder att implementera lexikon-adtn. Uppgift 5 (10 p) Analys 1. För varje algoritm nedan, ange dess tidskomplexitet i termer av O(.)-notationen. Motiviera ditt svar. (a) Inordning-genomgång av ett binärt träd med 24z noder. Anta att varje nodbesök tar konstant tid. (b) Snabbsortering (Quick-sort) av en sekvens av storlek m, med antagande att pivot-elementet alltid hamnar sist i sekvensen. (c) MST beräkning mha Kruskals algoritm av en graf med k noder och m kanter (bågar). 2. Vad gör följande kod: Algoritm Hemlig(int a) // a är ett positivt heltal int z <- 0 int b <- 1 z <- a while (z > 0) z <- z - 1 b <- b * 2 z <- 0 while (a > 0) z <- z + b a <- a - 1 return z Analysera algoritmens komplexitet utförligt. Konstanter är viktiga här! 3
Uppgift 6 (10 p) Grafer - minimala uppspännande träd Betrakta följande graf G: B 1 C 11 D 4 14 5 6 A G 9 H 9 E 3 J 10 F 1. Hitta det minimala uppspännande trädet (MST) mha Prim-Jarniks algoritm (med ett litet poängavdrag får du använda Kruskals algoritm). Illustrera varje steg som algoritmen utför(helst med en bild). 2. Förklara varför denna algoritm är girig. Uppgift (10 p) Hashtabeller 1. Anta att man sätter in heltal i en hashtabell med länkade listor för kolliderande element. Låt tabellen vara av storleken 5 och ha en hashfunktion h 1 (n) =n mod5. Visa hur tabellen ser ut efter insättning av: 5, 18, 1, 6, 9, 20, 13,, 4, 28, 3, 8, 12, 38. 2. Utför samma uppgift som ovan (med samma datasekvens), men anta att hashfunktionen är h 2 (n) =n mod1, att tabellen har 1 platser och att istället för länkade listor använder man linjär provning (eng. linear probing) för att hantera kolliderande element. 3. Anta att hashtabellen har storlek N. Hur mycket tid tar det att söka ett element k i tabellen, om vi använder länkade listor för kolliderande element. Betrakta både genomsnittfallet och det värsta fallet. Motivera ditt svar. Hur skulle ditt svar ändras om vi använde linjär provning? 4
Uppgift 8 (10 p) Varia 1. Hur skulle Huffman-kodning se ut för bokstäverna i följande text: dogs do not spot hot pots or either cats or bats. Betrakta mellanslag som en separat bokstav. Motivera. 2. Hur skulle ett AVL-träd se ut om man började sätta in element i ett tomt träd och elementen kom i följandeordning:1,2,3,4,5,6,? Lycka till! 5