Övningsuppgifter. Uppgifter föreslagna från vår kursbok markeras med avsnitt och sedan: SC Self Check, P Programing, PP Programing Projects.

Storlek: px
Starta visningen från sidan:

Download "Övningsuppgifter. Uppgifter föreslagna från vår kursbok markeras med avsnitt och sedan: SC Self Check, P Programing, PP Programing Projects."

Transkript

1 Övningsuppgifter Till varje föreläsning hör ett antal uppgifter. Förutom dessa bör man programmera när man går igenom föreläsningarna och när man läser boken. Vissa uppgifter kommer från gamla tentor. Dessa är med för att du ska få en bra bild av vad du förväntas kunna lösa självständigt när kursen är klar och på tentan. Dessa kan du också hitta lösningar på vid respektive tentamen på respektive års sida på kth-social. Där hittar du också eventuella hjälpfiler man fick tillgång till på tentan. Gör du inte de flesta av övningsuppgifterna kommer du med största sannolikhet inte att klara tentan. Uppgifter föreslagna från vår kursbok markeras med avsnitt och sedan: SC Self Check, P Programing, PP Programing Projects. För den som läser en kurs baklänges, dvs genom att först se vad som examineras och sedan studera utifrån detta har jag sammanställt hur tentamensuppgifterna har fördelat sig på de fyra tentamen som gått VT14 och VT15: F1: 1, F2: 1, F3: 1, F4: 1, F5: 7, F6: 4, F7: 3, F8: 1, F9: 3, F10: 1, F11: 1, F12: 2, F13: 2 Som man kan se så har det kommit uppgifter på alla områden. Värt att notera är att hela 11 uppgifter berört rekursion. Notera också att de två sista avsnitten tillsammans har fått fyra frågor. Det beror bland annat på att de inte testats av momentet LAB.

2 Föreläsning 1 Avsnitt 2.1: SC 1, P 1, 2 NB 1 På sidan 70 i KW diskuteras en Phone Directory applikation. Där diskuteras hur man kan använda indexof för att hitta telefonnumret till ett visst namn. På KTH-social kan du hitta ett Phone Directory projekt där man först får lägga in namn och telefonnummer och sedan kan söka upp telefonnummer. Det enda som saknas är metoden equals i DirectoryEntry-klassen. Lägg till denna så att applikationen fungerar. Avsnitt 2.3: SC 1 NB 2 När vi använder de färdiga klasserna för lista för att lagra t.ex. heltal tappar vi lite i effektivitet. Om detta är viktigt får man skapa en egen lista specifikt för heltal. Skapa en klass IntList som implementerar en lista som lagrar heltal mha en array. Den skall alltså inte använda någon av klasserna i JCF utan endast en array. Den ska implementera metoderna: IntList(int initialcapacity) add(int element) add(int index, int element) get(int index) indexof(int element) remove(int index) set(int index, int element) size() och kommer precis som vår lista behöva en del hjälpmetoder såsom reallocate. Skriv också en kort main-klass som testar alla metoder. Avsnitt 2.4: SC 1, 2, 3

3 TEN Uppgift 2 Implementera en lista för Object med hjälp av en array som inre datastruktur. Kalla klassen för List. Du får inte använda några andra datastrukturer än en vanlig array från java s API. Med hjälp av konstruktorn ska man kunna sätta storleken som ska vara fix. Implementera metoderna size(), get(index) och add(index, object). Listan ska följa normala konventioner för en lista med nedanstående specifikationer. get(index) Index 0 motsvarar första elementet. Anropar man get med ett index mindre än noll eller om listan är tom skall get returnera null. Anropar man get med ett index större än högsta index ska get returnera elementet med störst index. add(index, object) Försöker man lägga till ett element i en full lista eller på ett index mindre än noll skall add lämna listan orörd och returnera false. Annars skall add infoga elementet på rätt plats och returnera true. Om index är ett värde högre än listans högsta index skall elementet infogas efter sista elementet. I W:\AoD\Uppgift2 hittar du ett skal som bör gå att köra med din lista. (3p)

4 Föreläsning 2 Avsnitt 2.5: SC 1 NB 3 I den här uppgiften ska du träna på att programmera en länkad lista. Skapa en klass Node: public class Node{ } public String data; public Node next; Skriv en main-klass där du direkt i main utan hjälp av funktioner skriver kod som skapar en länkad lista med datat: Gilgamesh -> löper -> på -> stäppen mha klassen Node. Skriv sedan en whileloop som går igenom listan och skriver ut innehållet i denna till standard out. Avsluta med att lägga till kod som tar bort på innan listan skrivs ut. Fortsätt gärna att leka med din ihopsatta lista. Gör två listor och sätt ihop dem. Klipp av listan halvvägs. Skriv ut listan med en while-loop för att se att resultatet blev som du tänkt dig. Testas av TEN Uppgift 1 se föreläsning 5

5 Föreläsning 3 Avsnitt 3.1: SC 1, 2, 3 NB 4 På sid 156 börjar ett Case där man skall kontrollera att parenteser är balanserade i ett uttryck. Läs igenom Problem, analys och Design avsnitten och gör sedan en egen implementation. Titta på bokens lösning om du kör fast men försök att klara dig utan att titta. NB 5 Implementera en stack med en ArrayList som inre datastruktur (ärv inte). Klassen skall implementera interfacet från föreläsningen. Skriv också en main som testar att klassens alla funktioner verkar fungera. NB 6 Lägg till funktionen size(), peek(n) och flush() till ArrayStack från föreläsningen. size() returnerar antal element på stacken peek(n) returnerar det n:te elementet på stacken utan att påverka stacken flush() som tömmer stacken och returnerar det sista elementet på stacken Skriv också en main som testar funktionerna. OBS att peek(n) ej bör finnas i en stack då den bryter mot en stacks interface. Den är här med endast som övning. NB 7 Lägg till funktionen size(), peek(n), och flush() till LinkedStack från föreläsningen. size() returnerar antal element på stacken stacken (använd helst inte en lokal variabel utan gå igenom listan vid varje anrop) peek(n) returnerar det n:te elementet på stacken utan att påverka flush() som tömmer stacken och returnerar det sista elementet på stacken Skriv också en main som testar funktionerna. OBS att peek(n) ej bör finnas i en stack då den bryter mot en stacks interface. Den är här med endast som övning. Avsnitt 3.4: Case Study: Infix to postfix (sid 176) Converting expressions with parenthesis (sid 185) Chapter Review: PP 7

6 TEN Uppgift 2 Implementera en stack för data av typen char med hjälp av en enkellänkad lista som inre datastruktur. Du får inte använda någon datastruktur från Java s API (du får naturligtvis skapa klasser). Den ska förutom konstruktorn endast ha två publika metoderna pop och push som ska utföra det man förväntar sig att dessa metoder gör på en stack. Om man använder pop på en tom stack skall pop returnera 0. Skriv nu ett program som använder din stack för kontrollera om ett inläst ord från användaren är ett palindrom (ett ord som blir samma ord om det läses baklänges, tex: naturrutan). Du kan utgå ifrån att ordet skrivs med endast små bokstäver och utan blanksteg. Utgå ifrån skalet som finns i W:\AoD\Uppgift2. (4p)

7 Föreläsning 4 Från och med föreläsning 4 listar jag oftast inte uppgifter I boken utan du behöver själv ta ansvar för att göra bra uppgifter från boken. NB 8 I en applikation där kön någon enstaka gång växer sig mycket större än normalt skulle det kunna vara intressant att en array-kö också kan krympa när så är möjligt. Utgå från vår kö på föreläsningen och lägg funktionalitet som halverar storleken på arrayen om den bara använder en fjärdedel av den nuvarande arrayen. Glöm inte att skriva testkod. Fundera också på om detta påverkar någon av operationerna så att de inte längre är O(1). NB 9 Implementera en kö med en enkellänkad lista med en pekare till varje ända av listan så att alla operationer blir O(1). Använd bara bokens exempel om du kör fast. NB 10 Implementera en Dequeue som en dubbellänkad lista (obs använd ej klasser från Java s API utan gör en egen dubbellänkad lista i klassen). En dequeue är en kö där man kan sätta in och ta bort element i båda ändar. Den behöver inte implementera något interface och ska endast ha följande operationer: pollfirst, polllast, offerfirst, offerlast och empty. Se avsnitt 4.4 om du undrar över vad de ska göra. Skriv också testkod. TEN Uppgift 2 Implementera en kö för strängar med hjälp av en array som inre datastruktur. Använd arrayen som en cirkulär array för att få en effektiv implementering. Kalla klassen för Queue. Med hjälp av konstruktorn ska man kunna sätta storleken som ska vara fix. Den skall endast ha två publika metoder: enqueue (för att köa) och dequeue (för att avköa). Försöker man köa en sträng i en full kö ska den returnera false annars true. Försöker man avköa en tom kö ska den returnera en tom sträng ( ). I W:\AoD\Uppgift2 hittar du ett skal som bör gå att köra med din kö. (3p)

8 Föreläsning 5 NB 11 Skriv en rekursiv static metod som hittar största värdet i en array av ints. NB12 Skriv en rekursiv static metod som beräknar x n där n är ett positivt heltal. Skriv en iterativ metod som löser samma uppgift. NB13 Skriv en metod som beräknar roten ur ett tal större eller lika med 1 med tre decimalers noggrannhet med hjälp av den rekursiva algoritmen nedan. e styr noggrannheten och a kan sättas till 1 initialt. a om a ROT( n, a, e) 2 a n ROT( n,, e) 2a 2 n e annars NB 14 Myntmaskinen En maskin har en display på vilken den visar uppnådd poäng. Från början visar displayen 1 poäng. Genom att stoppa mynt i maskinen kan poängen förändras: Genom en 10-öring multipliceras poängen på displayen med 3 Genom en 5-öring adderas 4 till poängen på displayen. Skriv ett program som tar emot den poäng som ska uppnås. Programmet ska sedan beräkna lägsta belopp som krävs för att uppnå poängen. Observera att man inte kan nå målet för alla slutpoäng. En exempelkörning: Vilken poäng ska uppnås: 109 Poängen kan nås med 45 öre Tips: Försök inte lösa uppgiften baklänges för det är svårare. Räkna istället upp poängen mot det givna målet. NB 15 Skriv en rekursiv statisk metod som tar en textsträng med ett tal i binär form och returnerar motsvarande heltal. Använd en wrapper-metod om det behövs. Exempel: 1011 ska returnera 11. Skriv också en metod som tar en int och returnerar en sträng med det binära talet. Även här behöver du antagligen en wrapper-metod.

9 TEN Uppgift 1 I den här uppgiften utgår vi ifrån vår enkellänkade lista från föreläsningen (något nedbantad). Använd filerna i W:\AoD\Uppgift1. Glöm inte bort specialfallet att vi har en tom lista när du programmerar. a) Skriv om tostring-metoden så att den utför samma uppdrag som nu (att skriva ut listans alla element i rätt ordning) med hjälp av rekursion istället för iteration. Du får använda en wrappermetod men inga medlemsvariabler utöver de som redan finns (head och size). (1p) b) Skriv om getnode-metoden så att den utför samma uppdrag som nu med hjälp av rekursion istället för iteration. Du får använda en wrappermetod men ändra hellre i anropet till metoden. Denna metod är ju privat. (1p) c) Ibland om det är viktigt att en lista tar minsta möjliga plats kan det vara bättre att klara sig utan medlemsvariabeln size. Ta bort medlemsvariabeln size och introducera inga nya medlemsvariabler. Ändra befintliga metoder så att de fungerar precis som innan men nu utan medlemsvariablen size. Spara de gamla funktionerna bortkommenterade ifall du inte lyckas med denna uppgift. (1p) TEN Uppgift 1 a) I den här uppgiften skall du skriva en statisk metod som tar en array av heltal och ett sökt heltal och returnerar index för den plats där det sökta heltalet finns om det finns och returnerar -1 om det sökta talet saknas. Om det sökta talet finns på flera platser i arrayen returnerar metoden index för en av dessa platser. Det spelar ingen roll vilken. Algoritmen skall vara rekursiv (du får använda hjälpmetoder). Använd filen i W:\AoD\Uppgift1. (1p) b) Skriv nu en ny metod som löser samma uppgift med samma resultat men utgår ifrån att arrayen är sorterad i stigande ordning och därmed kan göra en binär sökning för att effektivisera sökningen. Också denna metod ska använda en rekursiv algoritm (och får använda hjälpmetoder). Effektiviteten bör bli O(log n). (2p) TEN Uppgift 3 En plattsättare ska lägga en rad av plattor. Han har plattor som är 1 dm, 2 dm och 3 dm. Du ska här skriva en metod som utifrån hur lång raden ska vara beräknar hur många olika sätt han kan lägga raden på. Om han t.ex ska lägga en rad som ska vara 4 dm så finns det 7 olika sätt att lägga raden. Ett skal finns i W:\AoD\Uppgift4. (2p)

10 Testas av TEN Uppgift 3, TEN Uppgift 1 se föreläsning 7 Testas av TEN Uppgift 4 se föreläsning 9 Testas av TEN Uppgift 1a se föreläsning 13

11 Föreläsning 6 NB 16 Skriv en ny lösning till myntmaskinen NB 14 som löser problemet med bredden först istället för djupet först. Varför är det egentligen inte nödvändigt för det här problemet? NB 17 Skriv om några funktioner till vår länkade lista så att de blir rekursiva. Hjälp finns i boken men försök själv. NB 18 Åtta damer Skriv ett program som löser åtta damer problemet och presenterar alla lösningar Skriv en ny version av programmet som löser n-damer problemet. Hur ställer man n damer på ett n*n bräde så att ingen står på samma rad, kolumn eller diagonal. Användaren ska få ange n och sedan få veta hur många lösningar det finns och hur de ser ut. NB 19 I ett enkelt brickspel ligger svarta och vita brickor enligt fig 1. Målet är att få brickorna enligt fig 2. Tillåtna drag är att flytta en bricka ett steg till en tom ruta eller hoppa över en bricka till en tom ruta (fig 3). Skriv ett program som beräknar dragföljden för att lyckas på 15 drag och presenterar den såsom: 3->4, 5->3 osv NB 20 Om vi formulerar om myntmaskinen något kan vi lösa det med backtracking. Istället för att hitta bästa lösningen ska vi nu hitta en lösning. Istället för att svara med kostnaden ska programmet nu presentera lösningen såsom: 10->5->5->5->

12 TEN Uppgift 4 I den här uppgiften ska man börja på ovansidan och ta sig till undersidan. Man får börja på vilken ruta på ovansidan man vill och man får ta vilken väg man vill. Man får inte gå diagonalt. Skriv en algoritm som hittar den väg som ger minst summa om man summerar värdet på alla rutor man passerar. Negativa värden kan ej förekomma i rutorna. Ex: I exemplet ovan är vägen man ska hitta: Algoritmen ska naturligvis klara andra matriser också. Skriv en metod som tar en matris som inparameter och returnerar värdet för den billigaste vägen (i exemplet ovan 16). Utgå från skalet som du hittar i W:\AoD\Uppgift4. Du får om du vill använda medlemsvariabler och behöver inte skapa några klasser. (3p)

13 TEN Uppgift 5 I följande pussel ska man få siffrorna i nummerordning genom att rotera de fyra i övre vänstra hörnet, övre högra hörnet, nedre vänstra hörnet eller nedre högra hörnet enligt bilden: Varje 2*2 ruta kan alltså roteras medurs eller moturs 90 grader. Ett drag består då av en sådan rotation. a) Skriv ett program som löser problemet för godtycklig startuppställning och berättar hur många drag som krävs. Programmet behöver alltså inte presentera dragen. Du får utgå ifrån att ingen startuppställning kräver mer är 9 drag (egentligen kräver en del uppställningar 11 drag). (2p) Exempel: 1,2,3,4,5,6,8,9,7 6 drag 1,2,3,4,5,6,9,8,7 7 drag b) Skriv en ny version (spara den gamla) som inte behöver veta antalet maximala drag genom att genomsöka möjligheterna med bredden först. Dvs den testar först alla möjliga första drag. Sedan testar den alla möjliga två drag och så vidare till den hittar lösningen. Den här lösningen kommer antagligen äta minne så du kan nöja dig med att testa den på exempel som löses på få drag. (1p) Exempel: 1,2,3,4,9,8,7,6,5 2 drag 1,2,3,4,5,7,6,9,8 4 drag

14 TEN Uppgift 5 I ett Sudoku ska man fylla i siffrorna 1-9 på de tomma platserna. Så att varje siffra förekommer endast en gång i varje rad, kolumn och 3*3 ruta. Skriv en metod som tar en 2D-array med vissa siffror ifyllda och nollor på de platser som är tomma och fyller i de tomma rutorna med siffror så att de uppfyller reglerna ovan. Utgå från skalet som du hittar i W:\AoD\Uppgift5. För full poäng skall du använda backtracking eller en algoritm med liknande effektivitet. (3p)

15 TEN Uppgift 2 I den här uppgiften gäller det att ta sig från toppen av en sifferpyramid till botten på ett sådant sätt att man passerat varje siffra precis en gång. I varje steg får man bara gå vänster eller höger på sin väg nedåt. För full poäng skall man använda sig av backtracking. Programmet skall presentera ordningen på de siffror man passerat på väg nedåt. Det skall klara en godtycklig triangel innehållande endast siffrorna 0-9 med tio nivåer. Om det finns flera lösningar räcker det att programmet hittar en lösning. Saknas lösning skall programmet ange det. I W:\AoD\Uppgift2 hittar ni ett skal med pyramiden nedan hårdkodad. För denna bör utskriften bli: 5, 1, 7, 8, 3, 6, 0, 9, 2, 4. (3p)

16 Föreläsning 7 Utgå från föreläsningens implementering av ett binärt sökträd när du löser nedanstående uppgifter. Skriv också testkod så att du vet att de fungerar korrekt. NB 21 Skriv en main som läser in sju ord från användaren och placerar dessa i ett BST. Kör programmet och skriv in 7 ord så att trädet får minsta möjliga höjd. Kör programmet och skriv in 7 ord så att trädet får maximal höjd. NB 22 Skriv funktioner som traverserar trädet med preorder och postorder. NB 23 Skriv två funktioner numberofleaves och numberofnodes till vår implementation från föreläsningen. Obs de ska bestämma antalet utifrån trädet och inte använda privata medlemsvariabler. TEN Uppgift 3 I den här uppgiften utgår vi ifrån vårt binära sökträd från föreläsningen. Utgå ifrån filerna i W:\AoD\Uppgift3. a) Skriv en metod som returnerar största värdet lagrat i det binära sökträdet. Trädet får inte påverkas av metoden. (2p) b) Skriv en metod som returnerar antalet noder som har exakt två barn. Trädet får inte påverkas av metoden. (2p) TEN Uppgift 1 I den här uppgiften utgår vi ifrån vårt binära sökträd från föreläsningen. Utgå ifrån filerna i W:\AoD\Uppgift3. Ändra inget i befintliga metoder utan skriv endast egna. a) Skriv en rekursiv metod som beräknar och returnerar antalet noder i det binära sökträdet. Troligen använder du en wrapper-metod som i sin tur anropar den metod som sedan anropar sig själv rekursivt. Du får inte använda medlemsvariabler. (2p) b) Skriv en rekursiv metod som beräknar och returnerar det binära sökträdets höjd. Troligen använder du en wrapper-metod som i sin tur anropar den metod som sedan anropar sig själv rekursivt. Du får inte använda medlemsvariabler. (1p)

17 TEN Uppgift 4 I denna uppgift utgår vi från vårt binära sökträd från föreläsningen i en nedbantad version. Använd filerna i W:\AoD\Uppgift4. Lös uppgifterna nedan utan att skapa nya medlemsvariabler. Du får gärna använda privata hjälpmetoder vid behov. Sökträdet får inte påverkas av anrop till metoderna du skapar enligt nedan. a) Skriv metoden find. För den som inte minns så ska den returnerar datat från den nod vars data är lika med parametern target enligt metoden target.compareto. Om datat saknas i trädet skall metoden returnera null. (2p) b) För att kunna studera att en implementation av ett binärt sökträd faktiskt fungerar korrekt kan det vara bra att kunna skriva ut hur trädet faktiskt ser ut. Skriv metoden printtree som skriver ut ett träd till standard ut. Den ska skriva ut trädet med en nivå per rad. För varje nivå skriver den ut barnen till alla noder som fanns i nivån ovanför även om dessa är tomma (då skriver den null). På så sätt kan man entydigt se strukturen hos trädet. Trädet man får om man adderar H, B, N, A, E, C, F, D i given ordning skrivs då ut: H B N A E null null null null C F null D null null null null (2p)

18 Föreläsning 8 NB 24 Skriv en tostring-metod och en remove-metod till vår hashtabell från föreläsningen. Skriv tostringmetoden med fokus på att den ska kunna hjälpa till vid testning av klassen. NB 25 Lägg också till att den dubblar storleken på tabellen när antalet entries (key, value par) överstiger 75% av tabellens storlek. Kom ihåg att du måste sätta in alla entries igen eftersom de kommer att få ett annat index. NB 26 Skriv testkod för vår hashtabell från föreläsningen. Fundera på vad den behöver testa. Inspiration kan du hämta på sid 394 i boken. TEN Uppgift 3 I denna uppgift skall du implementera en egen Hash-tabell med öppen adressering för lagring av strängar. Du skall använda en array för lagring av strängarna och får inte använda någon mera avancerad datastruktur från java s api. I en hash-tabell lagras elementen på det index som elementets hash-kod ger. Om platsen där ett element skall lagras redan är upptagen så ökas index med ett (öppen adressering). På motsvarande sätt när vi letar efter ett element så måste vi ta hänsyn till att om platsen inte är tom kan elementet ligga längre ned i arrayen. Den förenklade hash-tabellen vi här ska implementera behöver inte kunna växa dynamiskt utan storleken sätts vi skapandet. Den skall ha endast två metoder: put(string s) och exist(string s). Metoden put placerar strängen på rätt plats i vår array med hjälp av java s inbyggda hashkod för strängar. Metoden exist returnerar true om strängen redan finns i vår hash-tabell och false om den inte finns. Ingen av metoderna behöver hantera problematiken vi får om tabellen är full. Däremot skall de hantera att vi kan behöva öka index flera gånger för att hitta en tom plats och ibland då kommer till arrayens sista plats och måste börja leta i början. Observera att vår hashtabell skall använda det effektiva sätt att sätta in i och hitta i en hashtabell som om man undviker krockar ger O(1). I W:\AoD\Uppgift3 hittar du ett skal som bör gå att köra med din hashtabell. (3p)

19 Föreläsning 9 NB 27 Skapa en klass Car som innehåller bilmärke, årsmodell och antal körda mil. Klassen ska implementera Comparable<Car> och därmed ha en metod compareto som ska jämföra bilmärke som sträng mellan bilar. a) Skriv ett program som läser in bilar från en textfil till en array och sorterar dessa med hjälp av Java API utifrån metoden compareto. Skriv sedan ut dessa till en ny textfilen. b) Skapa nu en klass CompareCar som implementerar Comparator<Car> och använd denna för att sortera bilarna efter årsmodell istället. Skriv även ut denna ordning men till en annan fil. NB 28 Implementera urvalssortering och instickssortering för en array av int. NB 29 Implementera Mergesort för en array av int. Utgå från algoritmerna på föreläsningen. Använd inte kod från boken eller från nätet. NB 30 Implementera Shellsort och Heapsort för en array av int. Utgå från algoritmerna på föreläsningen. Försök att inte använda kod från boken eller från nätet. NB 31 Implementera Quicksort för en array av int. Titta inte på någon kod utan utgå från algoritmen i boken. TEN Uppgift 4 Implementera en static metod som sorterar en array med heltal med hjälp av mergesort. Du får alltså inte använda någon färdig sorteringsalgoritm i javas api utan skall skriva en egen. Utgå från skalet du hittar i W:\AoD\Uppgift4. (2p) Mergesort - kort påminnelse: Dela upp en array i två arrayer Sortera vänster array Sortera höger array Sammanfoga de sorterade arrayerna

20 TEN Uppgift 5 I denna uppgift ska du implementera quicksort för en array av heltal. Implementeringen ska göra sorteringen in-place (dvs minneskraven förutom arrayen skall vara oberoende av arrayens storlek) och vara effektiv (ingen del av implementeringen får förstöra dess möjlighet att vara O(n log n)). Implementeringen skall som pivotelement välja det sista elementet i arrayen. Utgå ifrån skalet som finns i W:\AoD\Uppgift5. (3p) Tips: Algoritm för quicksort: 1. Välj ett element - kallas pivotelementet 2. Flytta element så att alla element som är mindre eller lika med pivotelementet kommer före och så att alla element som är större än pivotelementet kommer efter detta. 3. Sortera rekursivt med hjälp av quicksort de två del-arrayerna på var sin sida om pivotelementet TEN Uppgift 3 Implementera en heap för heltal med en array som inre datastruktur. Du får inte använda några andra datastrukturer från java s api. Du behöver bara implementera insättning och inte borttagning. Heapen ska ha plats för 1000 heltal och behöver inte kunna växa när den blir full. Metoden insert skall returnera true om den lyckas sätta in och false om arrayen är full. I W:\AoD\Uppgift3 hittar du en main som bör fungera med din heap. Där ser du att du också ska implementera en tostring. Denna ska bara skriva ut alla element på en rad i den ordning de ligger i arrayen. (3p) Tips: En heap är ett komplett binärt träd där rotens nyckel är minsta nyckeln i trädet och varje icke tomt subträd är en heap. Insättning: 1. Sätt in ny nod på första lediga plats. 2. Medans noden inte är rot och nodens nyckel är mindre än förälderns nyckel: byt plats på förälder och nod Om man lagrar en heap i en array kan man börja med roten och lägga elementen nivå efter nivå från vänster till höger och då gäller: en nod med index p har vänster barn med index 2p+1, höger barn med index 2p+2 och sin förälder med index (p-1)/2.

21 Föreläsning 10 NB 32 Skriv en klass som använder en förbindelselista för att representera en viktad graf. Konstruktorn tar ett filnamn på en textfil och skapar utifrån denna en förbindelselista. Du väljer själv hur du organiserar textfilen för att representera grafen. Det ska dock vara relativt enkelt att skriva en textfil för att representera en godtycklig graf. Skriv tostring som skriver ut en nod per rad följt av noderna som denne har bågar till med vikter. Skriv en metod som returnera närmsta vägen mellan två noder. Skapa en textfil som representerar grafen från föreläsningen och testkör. NB 33 Skriv en static metod som hittar det minsta uppspända trädet för en graf representerad med en förbindelsematris med hjälp av Prims algoritm. Funktionen skall ta en förbindelsematris som input och returnera en int-array p, där p[v] anger den nod som noden v anslöts till enligt algoritmen. Skriv också en main där du använder den hårdkodade matrisen från föreläsningen och anropar din funktion (funktionen skall fungera för godtycklig förbindelsematris av godtycklig dimension). Skriv ut resultatet i main på formatet: Node A var startnod Nod F anslöts till A Nod D anslöts till F Nod B anslöts till A Nod C anslöts till B Nod H anslöts till C Nod E anslöts till C Nod G anslöts till F TotalVikt: 15 (obs att det finns fler korrekta lösningar med avseende på hur man ansluter noderna) TEN Uppgift 3 I denna uppgift ska du skriva en metod som hittar det minsta uppspännande trädet till en sammanhängande viktad graf. Metoden skall ta en förbindelsematris och returnera totalvikten för bågarna i det minsta uppspännande trädet. Vikterna representeras av heltal. Utgå ifrån skalet som finns i W:\AoD\Uppgift3. Din lösning behöver inte vara optimal ur effektivitetssynpunkt. (3p) Tips: En girig algoritm fungerar här perfekt.

22 Föreläsning 11 NB34 Lös växlingsproblemet med en girig algoritm. Skriv en metod som tar växlingssumman och en intarray med de olika tillgängliga valutorna I fallande ordning och returnerar en int-array med antalet av varje valuta. Ex. Man vill veta växeln för 789 kr I vår valuta. Man anropar då: change(789,new int[] {1000,500,100,50,20,10,5,1}) som då returnerar: {0,1,2,1,1,1,1,4}. NB35 Lös det obegränsade kappsäcksproblemet med en girig algoritm i en funktion där man kan skicka in storleken på kappsäcken och varornas vikt och värde på ett bra sätt. Funktionen ska då på ett bra sätt returnera hur kappsäcken ska packas. Skriv också en main som tillåter en användare att ange indata till algoritmen och sedan presenterar lösningen för denna. NB36 Skriv en schemaläggningsfunktion enligt föreläsningen. NB37 a) Skriv ett program som läser in en karta från en textfil. Textfilen innehåller först antal länder och sedan antal gränser och därefter följer på varje rad två tal som representerar att dessa länder har en gräns. Ex: Därefter ska programmet med hjälp av algoritmen från föreläsningen presentera vilken färg varje land ska färgläggas i så att man använder få färger men angränsande länder aldrig har samma färg. b) Förbättra nu programmet så att algoritmen hela tiden väljer ett av de länder som angränsar till flest redan valda länder. NB38 Skriv ett program som läser in en avståndstabell för ett antal städer från fil och sedan använder en girig algoritm för att försöka hitta en kort rutt för att besöka alla städer. Låt användaren få ange startstad så att man kan prova olika startstäder. Programmet ska sedan presentera rutten.

23 NB39 Vid en fabrik finns n i stycken aktiviteter som behöver utföras under en dag. Varje aktivitet har en starttid s i och en sluttid m i. Under denna tid måste en person jobba med aktiviteten. Designa en girig algoritm som beräknar minsta antalet personer som krävs för att lösa uppgiften. Implementera sedan algoritmen i ett program som läser data från en fil för att sedan presentera minsta antalet som krävs. Designa ett antal kniviga fall och kontrollera att algoritmen verkligen når det minimala antalet personer. NB40 Givet n punkter på den reella tallinjen. Hitta det minsta antal intervall med längden 2,0 som tillsammans täcker alla punkter. Designa och implementera en girig algoritm. Låt programmet slumpa fram ett antal punkter. Försök verifiera att din algoritm fungerar med ett resonemang. Skriv även ner ditt resonemang i din redovisning. Testas av TEN Uppgift 3 se föreläsning 10

24 Föreläsning 12 NB41 Skriv ett program som slumpar n stycken heltal mellan och Användaren anger n. Programmet beräknar sedan den maximala delsekvenssumman med hjälp av ett funktionsanrop av en funktion som använder en söndra och härska algoritm. Den skriver sedan ut vad summan blev och hur många anrop till funktionen som behövdes. NB42 Skriv en funktion som tar en array med punkter (använd en klass för att representera en 2D-punkt med float för koordinaterna) och returnerar det kortaste avståndet mellan två punkter. Funktionen ska använda en effektiv söndra och härska algoritm enligt föreläsningen (dvs inte jämföra onödiga punkter över mittlinjen). Skriv också en main som slumpar fram n punkter som ligger i intervallet: - 1<x<1 och -1<y<1 med lika stor sannolikhet för alla värden. Anropa din funktion med de framslumpade punkterna. NB43 Skriv ett program som löser det generella växlingsproblemet. Användaren får först ange hur många olika valutor det finns och sedan valören på dessa. Därefter får denne ange vilket belopp som skall växlas och programmet svarar med minsta antalet mynt och sedlar som behövs. Lägg till att programmet också skriver ut växeln. NB44 Skriv en funktion som löser Skyline-problemet. Skriv sedan ett program som slumpar fram n st hus (n anges av användaren) och ritar upp dessa och deras skyline. NB45 Av n element skall vi ta reda på om det finns mer än n/2 av något och i så fall vilket. Utgå från att elementen kan testas för likhet men inte rangordnas (equal men inte compare). Om du vill kan du skriva metoden för en array av heltal men kom i så fall ihåg att du inte får utnyttja att de går att sortera. Designa en söndra och härska algoritm som hittar ett sådant elementet i en array om ett sådant finns. Skriv sedan en funktion och en main med några hårdkodade exempel. Sträva efter att få algoritmen så effektiv som möjligt (O(nlogn) blir resultatet av en bra söndra och härska). Man kan hitta en lösning som är O(n). Testas av TEN Uppgift 4 se föreläsning 9 Testas av TEN Uppgift 5 se föreläsning 9

25 Föreläsning 13 NB46 Skriv en funktion som beräknar högsta summan man kan få genom att lägga ihop talen längs valfri väg från toppen av en taltriangel till botten. a) Lös problemet med enkel rekursion b) Förbättra effektiviteten genom att tabulera värden du räknat ut (dynamisk programmering topdown). Jämför antalet anrop med a) för en 30-tal hög triangel. c) Skriv en funktion som bygger upp lösningen nerifrån och upp (dynamisk programmering bottom up) NB47 Skriv en funktion som löser det generella myntväxlingsproblemet med hjälp av dynamisk programmering. Skriv först en top-down lösning och sedan en bottom-up lösning. NB48 Implementera Floyd-Warshall. NB49 Implementera ett program som löser kappsäcksproblemet enligt föreläsningen. Skriv också ett enkelt gränssnitt. NB50 Hur många unika vägar finns det från övre högra hörnet till nedre vänstra hörnet om vi bara får gå väst och syd? Förbättra vår lösning med hjälp av dynamisk programmering. Hur många funktionsanrop blir det för (12,6)? Jämför med vår gamla algoritm utan tabulering.

26 NB51 I en följd av heltal ska vi försöka hitta den längden hos den längsta sekvensen stigande tal. Alla stigande sekvenser i talföljden 5, 2, 8, 6, 3, 6, 9, 7 är markerade ovan. Den längsta blir då 4 lång och är 2, 3, 6, 9 eller 2, 3, 6, 7. a) Skriv en funktion som löser problemet ovan. Tänk fritt. b) Börja längst till vänster. Varje nytt tal ger två alternativ: Talet är större än föregående tal i vår sekvens: 1. Ta med talet 2. Hoppa över talet Talet är inte större än föregående tal i vår sekvens: 1. Påbörja ny sekvens 2. Hoppa över talet Skriv en rekursiv lösning som använder detta. c) Effektivisera den rekursiva lösningen med tabulering av beräknade delresultat. Försök också gärna att göra en bottom-up lösning. NB52 svår, helt ok att hoppa över Implementera en dynamisk algoritm som löser handelsresandeproblemet

27 TEN Uppgift 1 Taltriangel Vilken är den högsta summan man kan få genom summera talen längs valfri väg från toppen till botten i en taltriangel? Vid varje steg kan man alltså endast välja på att gå vänster eller höger. Utgå ifrån att alla tal är heltal större än eller lika med noll. Dina funktioner skall klara valfri storlek med godtyckliga siffror. Använd skalet ni hittar i W:\AoD\Uppgift1. a) Skriv en rekursiv funktion som beräknar högsta möjliga summan för en taltriangel. Troligen använder du en wrapper-funktion som i sin tur anropar den funktion som du sedan anropar rekursivt. (2p) b) Förbättra effektiviteten genom att tabulera värden du räknat ut (dynamisk programmering topdown). (1p) Tips: Om man vill lagra en triangel såsom ovan gör man det enklast i en array: 7 * * * * 3 8 * * * * * * Om man då står på rad n och kolumn m och vill gå vänster ska man gå till rad n+1 och kolumn m. Vill man gå till höger ska man gå till rad n+1 och kolumn m+1. TEN Uppgift 5 Här ska vi titta på det allmänna myntväxlingsproblemet. Vi ska alltså skriva ett program som givet valörerna i en valuta och givet mängden växel som skall ges beräknar minsta antalet mynt/sedlar som vi kan lämna ut. Om valörerna är 1kr, 10kr och 11kr och vi ska ge 30kr i växel ska programmet alltså svara 3 (dvs 3 tiokronor). Programmet behöver alltså inte svara hur växeln skall ges utan bara antalet mynt/sedlar. Dock problemet skall i denna uppgift lösas med dynamisk programmering bottom-up. Om du löser problemet med dynamisk programmering top-down (rekursion med tabulerade värden) eller bara rekursion så får man noll poäng. För full poäng skall lösningen dessutom vara effektiv. (2p)

Uppgifter föreslagna från vår kursbok markeras med avsnitt och sedan: SC Self Check, P Programing, PP Programing Projects.

Uppgifter föreslagna från vår kursbok markeras med avsnitt och sedan: SC Self Check, P Programing, PP Programing Projects. Övningsuppgifter Till varje föreläsning hör ett antal uppgifter. Förutom dessa bör man programmera när man går igenom föreläsningarna och när man läser boken. Vissa uppgifter kommer från gamla tentor.

Läs mer

Tentamen TEN1 HI

Tentamen TEN1 HI Tentamen TEN1 HI1029 2015-03-17 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

Tentamen TEN1 HI

Tentamen TEN1 HI Tentamen TEN1 HI1029 2014-03-14 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

Tentamen TEN1 HI1029 2014-05-22

Tentamen TEN1 HI1029 2014-05-22 Tentamen TEN1 HI1029 2014-05-22 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

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

Föreläsning 12. Söndra och härska Föreläsning 12 Söndra och härska Föreläsning 12 Söndra och härska Maximal delsekvens Skyline Closest pair Växel Uppgifter Söndra och härska (Divide and conquer) Vi stötte på dessa algoritmer när vi tittade

Läs mer

Föreläsning 13. Dynamisk programmering

Föreläsning 13. Dynamisk programmering Föreläsning 13 Dynamisk programmering Föreläsning 13 Dynamisk programmering Fibonacci Myntväxling Floyd-Warshall Kappsäck Handelsresandeproblemet Uppgifter Dynamisk programmering Dynamisk programmering

Läs mer

Föreläsning 9. Sortering

Föreläsning 9. Sortering Föreläsning 9 Sortering Föreläsning 9 Sortering Sortering och Java API Urvalssortering Instickssortering Söndra och härska Shellsort Mergesort Heapsort Quicksort Bucketsort Radixsort Läsanvisningar och

Läs mer

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim Föreläsning 10 Grafer, Dijkstra och Prim Föreläsning 10 Grafer Representation av grafer Dijkstras algoritm Implementation av Dijkstras algoritm Minimium spanning tree Läsanvisning och uppgifter Broarna

Läs mer

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim Föreläsning 10 Grafer, Dijkstra och Prim Föreläsning 10 Grafer Representation av grafer Dijkstras algoritm Implementation av Dijkstras algoritm Minimium spanning tree Läsanvisning och uppgifter Broarna

Läs mer

Föreläsning 3. Stack

Föreläsning 3. Stack Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista Evaluate postfix expressions Läsanvisningar

Läs mer

Föreläsning 11. Giriga algoritmer

Föreläsning 11. Giriga algoritmer Föreläsning 11 Giriga algoritmer Föreläsning 11 Giriga algoritmer Användning Växelproblemet Kappsäcksproblemet Schemaläggning Färgläggning Handelsresandeproblemet Uppgifter Giriga algoritmer (Greedy algorithms)

Läs mer

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

Föreläsning 7. Träd och binära sökträd Föreläsning 7 Träd och binära sökträd Föreläsning 7 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 Läsanvisningar och

Läs mer

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö Kö (ADT) En kö fungerar som en kö. Man fyller på den längst bak och tömmer den längst fram

Läs mer

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter Föreläsning 4 Kö Föreläsning 4 ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter ADT Kö Grundprinciper: En kö fungerar som en kö. Man

Läs mer

Tentamen Datastrukturer för D2 DAT 035

Tentamen Datastrukturer för D2 DAT 035 Tentamen Datastrukturer för D2 DAT 035 17 december 2005 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.) Betygsgränser:

Läs mer

Föreläsning 5. Rekursion

Föreläsning 5. Rekursion Föreläsning 5 Rekursion Föreläsning 5 Algoritm Rekursion Rekursionsträd Funktionsanrop på stacken Binär sökning Problemlösning (möjliga vägar) Läsanvisningar och uppgifter Algoritm En algoritm är ett begränsat

Läs mer

Föreläsning 2. Länkad lista och iterator

Föreläsning 2. Länkad lista och iterator Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF

Läs mer

Lösningar Datastrukturer TDA

Lösningar Datastrukturer TDA Lösningar Datastrukturer TDA416 2016 12 21 roblem 1. roblem 2. a) Falskt. Urvalssortering gör alltid samma mängd av jobb. b) Sant. Genom att ha en referens till sista och första elementet, kan man nå både

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2008-05-27 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:

Läs mer

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen Datastrukturer (DAT036/DAT037/DIT960) Tentamen Datastrukturer (DAT036/DAT037/DIT960) Datum och tid för tentamen: 2016-04-07, 14:00 18:00. Författare: Nils Anders Danielsson. (Tack till Per Hallgren och Nick Smallbone för feedback.) Ansvarig:

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Prioritetskö Heap Representation som

Läs mer

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

Föreläsning 7. Träd och binära sökträd Föreläsning 7 Träd och binära sökträd Föreläsning 7 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 Det är extra mycket

Läs mer

Teoretisk del. Facit Tentamen TDDC (6)

Teoretisk del. Facit Tentamen TDDC (6) Facit Tentamen TDDC30 2014-08-29 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är skillnaden mellan synligheterna public, private och protected? (1p) Svar:public: Nåbar för

Läs mer

Tentamen Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037) Tentamen Datastrukturer (DAT07) Datum och tid för tentamen: 2016-01-09, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och ca

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2010-03-16 Skrivtid: 4 timmar Kontaktperson: Nicolina Månsson Poäng / Betyg: Max 44 poäng

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037) Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet

Läs mer

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

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd Föreläsning 8 Innehåll Datastrukturer i kursen Träd, speciellt binära träd egenskaper användningsområden implementering Undervisningsmoment: föreläsning 8, övningsuppgifter 8, lab 4 Avsnitt i läroboken:

Läs mer

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition Seminarium 4 Köer och Stackar Innehåll ADT:erna Kö och Stack Definitioner Operationer Exempel på användning Givna klasser i Java Interfacet Queue Klassen Stack Klassen LinkedList Klassen PriorityQueue

Läs mer

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

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.' Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.' Skrivtid: 08.30 13.30 Hjälpmedel: Inga Lärare: Betygsgränser DVA104' Akademin)för)innovation,)design)och)teknik) Onsdag)2014:01:15) Caroline

Läs mer

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.

Läs mer

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037) Föreläsning 4 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-10 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 Förra

Läs mer

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

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet Föreläsning 13 Innehåll Algoritm 1: Sortera Exempel på problem där materialet i kursen används Histogramproblemet Schemaläggning Abstrakta datatyper Datastrukturer Att jämföra objekt Om tentamen Skriftlig

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Träd, speciellt binära träd egenskaper användningsområden implementering Datavetenskap (LTH) Föreläsning 9 HT 2017 1 / 31 Inlämningsuppgiften De föreläsningar som inlämningsuppgiften

Läs mer

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

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035 Tentamen med lösningsförslag Datastrukturer för D2 DAT 035 17 december 2005 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.)

Läs mer

Föreläsning 11. Giriga algoritmer

Föreläsning 11. Giriga algoritmer Föreläsning 11 Giriga algoritmer Föreläsning 11 Giriga algoritmer Användning Växelproblemet Kappsäcksproblemet Schemaläggning Färgläggning Handelsresandeproblemet Giriga algoritmer (Greedy algorithms)

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning, implementering effektivitet balanserade binära sökträd, AVL-träd Abstrakta datatyperna mängd (eng. Set) och lexikon

Läs mer

Föreläsning 6. Rekursion och backtracking

Föreläsning 6. Rekursion och backtracking Föreläsning 6 Rekursion och backtracking Föreläsning 6 Bredden först med hjälp av kö Lista rekursivt Tornet i Hanoi Backtracking Läsanvisningar och uppgifter Hissen i lustiga huset Huset har n antal våningar

Läs mer

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt Binära träd (forts) Ett binärt träd kan lagras i ett enda sammanhängande minne Roten har index 1 Vänster barn till nod i har index 2*i Höger barn till nod i har index 2*i + 1 Föräldern till nod i har index

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-25 Idag Starkt sammanhängande komponenter Duggaresultat Sökträd Starkt sammanhängande komponenter Uppspännande skog Graf, och en möjlig

Läs mer

Tentamen, Algoritmer och datastrukturer

Tentamen, Algoritmer och datastrukturer UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och

Läs mer

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

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen Föreläsning 9 Innehåll Inlämningsuppgiften De föreläsningar som inlämningsuppgiften bygger på är nu klara. Det är alltså dags att börja arbeta med inlämningsuppgiften. Träd, speciellt binära träd egenskaper

Läs mer

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer Tentamen i... TDDC30/725G63 Objektorienterad programmering i Java, datastrukturer och algoritmer Datum 2011-12-19 Tid 14-18 Provkod DAT1 Institution Institutionen för Datavetenskap (IDA) Jour Johan Janzén

Läs mer

Föreläsning 8. Mängd, Avbildning, Hashtabell

Föreläsning 8. Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd (Set) Avbildning (Map) Hashtabeller Hashkoder Öppen adressering Länkning Effektivitet och minneskrav Implementering Läsanvisning och uppgifter

Läs mer

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga. Tentamen Programmeringsteknik II 2014-0-27 Skrivtid: 0800 100 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036) Tentamen Datastrukturer, DAT037 (DAT036) Datum, tid och plats för tentamen: 2017-08-17, 8:30 12:30, M. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 9:30 och ca 11:00.

Läs mer

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

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande: Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp

Läs mer

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

Föreläsning 12. Söndra och härska Föreläsning 12 Söndra och härska Föreläsning 12 Söndra och härska Maximal delsekvens Skyline Closest pair Växel Söndra och härska (Divide and conquer) Vi stötte på dessa algoritmer när vi tittade på sortering.

Läs mer

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

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5 Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5? FORTSÄTTNING TRÄD RECAP (förra föreläsningen) RECAP (förra föreläsningen) Träd är icke-linjära datastrukturer som ofta

Läs mer

Algoritmer och datastrukturer. HI1029 8,0 hp Föreläsning 1

Algoritmer och datastrukturer. HI1029 8,0 hp Föreläsning 1 Algoritmer och datastrukturer HI1029 8,0 hp Föreläsning 1 Föreläsning 1 Välkomna! - Presentation av kursen (Kurs-PM) Datastrukturer Abstrakta DataTyper ADT Lista Lista och Java Collections Framework (ArrayList)

Läs mer

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036) Tentamen Datastrukturer, DAT037 (DAT036) Datum och tid för tentamen: 2017-01-11, 14:00 18:00. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 15:00 och ca 17:00. Godkända

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2007-03-13 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:

Läs mer

Fredag 10 juni 2016 kl 8 12

Fredag 10 juni 2016 kl 8 12 KTH CSC, Alexander Baltatzis DD1320/1321 Lösningsförslag Fredag 10 juni 2016 kl 8 12 Hjälpmedel: En algoritmbok (ej pythonkramaren) och ditt eget formelblad. För betyg E krävs att alla E-uppgifter är godkända,

Läs mer

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

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 Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

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

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) Snabba frågor Alla svar motiveras väl. Facit Tentamen TDDC30 2015-08-28 kl 08-12 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är syftet med ett interface? (1p) Svar:Att ange vilka metoder som ska finnas, utan

Läs mer

Algoritmer och datastrukturer 2012, fo rela sning 8

Algoritmer och datastrukturer 2012, fo rela sning 8 lgoritmer och datastrukturer 01, fo rela sning 8 Komplexitet för binära sökträd De viktigaste operationerna på binära sökträd är insert, find och remove Tiden det tar att utföra en operation bestäms till

Läs mer

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

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag) Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag) 21 december 2007 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng

Läs mer

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

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen Datastrukturer och algoritmer Föreläsning 15 Inför tentamen 1 Innehåll Kursvärdering Vi behöver granskare! Repetition Genomgång av gammal tenta 2 Första föreläsningen: målsättningar Alla ska höja sig ett

Läs mer

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

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6 Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6? DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar

Läs mer

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer D DAT 035/INN960 Tentamen Datastrukturer D DAT 035/INN960 22 december 2006 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.) Betygsgränser,

Läs mer

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

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn Träd allmänt Träd allmänt Ett generellt träd är Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn där t1,..., tn i sin tur är träd och kallas subträd, vars rotnoder kallas

Läs mer

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna Föreläsning Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util Implementering med lista ar Implementering av prioritetskö med heap Sortering

Läs mer

Tentamen kl Uppgift 4. Uppgift 5

Tentamen kl Uppgift 4. Uppgift 5 2D344 Grundläggande Datalogi för F Tentamen 2003-03-0 kl 4.00 9.00 Inga hjälpmedel. Endast ett svarsalternativ på varje fråga är korrekt. Felaktigt svar eller felaktigt antal ikryssade svarsalternativ

Läs mer

Föreläsning 2. Länkad lista och iterator

Föreläsning 2. Länkad lista och iterator Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF

Läs mer

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser

Läs mer

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim Föreläsning 10 Grafer, Dijkstra och Prim Föreläsning 10 Grafer Representation av grafer Dijkstras algoritm Implementation av Dijkstras algoritm Minimium spanning tree Broarna i Königsberg, Euler, 17 Grafer

Läs mer

Föreläsning 14 Innehåll

Föreläsning 14 Innehåll Föreläsning 14 Innehåll Abstrakta datatyper, datastrukturer Att jämföra objekt övriga moment i kursen Om tentamen Skriftlig tentamen både programmeringsuppgifter och teoriuppgifter Hitta fel i fingerade

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2 Objektorienterad programmering E Algoritmer Linjär sökning Binär sökning Tidsuppskattningar Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk; dess syntax och semantik, bibliotek

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2013-12-16, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och

Läs mer

Föreläsning 8. Mängd, Avbildning, Hashtabell

Föreläsning 8. Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd (Set) Avbildning (Map) Hashtabeller Hashkoder Öppen adressering Länkning Implementering Mängd En mängd är en samling som inte innehåller

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Seminarium 13 Innehåll

Seminarium 13 Innehåll Seminarium 13 Innehåll Prioritetsköer och heapar Prioritetsköer ADTn Klassen PriorityQueue i java.util Implementering med lista Heapar ADTn För implementering av prioritetskö För sortering Efter seminariet

Läs mer

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

Försättsblad till skriftlig tentamen vid Linköpings Universitet Försättsblad till skriftlig tentamen vid Linköpings Universitet Datum för tentamen 2013-03-27 Sal Tid 08:00 12:00 Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter som ingår i tentamen Antal

Läs mer

Rekursion och induktion för algoritmkonstruktion

Rekursion och induktion för algoritmkonstruktion Informationsteknologi Tom Smedsaas, Malin Källén 20 mars 2016 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av

Läs mer

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN: Algoritmer och datastrukturer. Läs detta! 1 (6) TENTAMEN: Algoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att vi

Läs mer

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. 1 (8) TENTMEN: lgoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. örja varje uppgift på ett nytt blad. Skriv inga lösningar i tesen. Skriv ditt idnummer

Läs mer

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen, EDA501/EDAA20 Programmering M MD W BK L LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDA501/EDAA20 Programmering M MD W BK L 2017 05 31, 8.00 13.00 Anvisningar: Preliminärt ger uppgifterna 9 + 12 + 10 + 9 = 40 poäng.

Läs mer

DAI2 (TIDAL) + I2 (TKIEK)

DAI2 (TIDAL) + I2 (TKIEK) TNTMN KURSNMN PROGRM: KURSTKNING XMINTOR lgoritmer och datastrukturer I2 (TIL) + I2 (TKIK) 2017/2018, lp 4 LT75 Uno Holmer TI ÖR TNTMN redagen den 1/8 2018, 08.0-12.0 HJÄLPML NSVRIG LÄRR atastrukturer

Läs mer

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037) Föreläsning 13 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-12-14 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Sammanfattning

Läs mer

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

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar Föreläsning 1 Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util Heapar Implementering av prioritetskö med heap Sortering med hjälp av heap

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings

Läs mer

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT07) Fredrik Lindblad 27 november 207 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/20/course/dat07 Innehåll 2

Läs mer

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

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) Snabba frågor Alla svar motiveras väl. Facit Tentamen TDDC30 2015-03-19 kl 08-12 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Varför väljer man ofta synligheten private hellre än public för medlemsvariabler i en klass?

Läs mer

Föreläsning 6. Rekursion och backtracking

Föreläsning 6. Rekursion och backtracking Föreläsning 6 Rekursion och backtracking Föreläsning 6 Bredden först med hjälp av kö Lista rekursivt Tornet i Hanoi Backtracking Hissen i lustiga huset Huset har n antal våningar (bottenvåningen som räknas

Läs mer

Länkade strukturer, parametriserade typer och undantag

Länkade strukturer, parametriserade typer och undantag Länkade strukturer, parametriserade typer och undantag Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Parametriserade typer Listor och länkade strukturer Komplexitet i länkade strukturer

Läs mer

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-12-14 Idag Frågor? Är något oklart inför tentan? Sammanfattning Exempel från föreläsning 1 Dåligt val av datastruktur public class Bits {

Läs mer

Teoretisk del. Facit Tentamen TDDC (6)

Teoretisk del. Facit Tentamen TDDC (6) Facit Tentamen TDDC30 2013-06-05 1 (6) Teoretisk del 1. (3p) "Snabba frågor" Alla svar motiveras väl. a) Vad skiljer en statisk metod från en icke-statisk? (0.5p) Svar:En statisk metod är associerad till

Läs mer

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1) Binära träd Algoritmer och Datastrukturer Markus Saers markus.saers@lingfil.uu.se Upplägg Binära träd (9) Binära sökträd (0.) Träd Många botaniska termer Träd, rot, löv, gren, Trädets rot kan ha ett antal

Läs mer

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

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 Översikt Linjär sökning Sökning Binär sökning Hashtabeller Programmering tillämpningar och datastrukturer 2 Linjär sökning Binärt sökträd Undersök ett element i taget tills du hittar det sökta Komplexitet

Läs mer

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037) Föreläsning 4 Datastrukturer (DAT07) Fredrik Lindblad 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat07 1 Innehåll

Läs mer

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer Tentamen i.. TDDC30/725G63 Objektorienterad programmering i Java, datastrukturer och algoritmer Datum 2012-12-21 Tid 14-18 Provkod DAT1 Institution Institutionen för Datavetenskap (IDA) Jour Johan Janzén

Läs mer

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Föreläsning 1. Abstrakta datatyper, listor och effektivitet Föreläsning 1 Abstrakta datatyper, listor och effektivitet Föreläsning 1 Datastrukturer Abstrakta DataTyper ADT Lista Lista och Java Collections Framework (ArrayList) Lista implementerad med en array Analys

Läs mer

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 Avbildningar och hashtabeller Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 1 2 Mängder i Java 3 Mängd-gränssnittet Set vs. List Mängder får endast innehålla unika element: Metoden.add(E) returnerar

Läs mer

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ö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ö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 Terminologi - träd Ett träd i datalogi består av en rotnod

Läs mer

Föreläsning 5. Rekursion

Föreläsning 5. Rekursion Föreläsning 5 Rekursion Föreläsning 5 Algoritm Rekursion Rekursionsträd Funktionsanrop på stacken Binär sökning Problemlösning (möjliga vägar) Algoritm En algoritm är ett begränsat antal instruktioner/steg

Läs mer

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN: Algoritmer och datastrukturer. Läs detta! (6) TENTAMEN: Algoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att vi inte

Läs mer

Datastrukturer. föreläsning 6. Maps 1

Datastrukturer. föreläsning 6. Maps 1 Datastrukturer föreläsning 6 Maps 1 Avbildningar och lexika Maps 2 Vad är ett lexikon? Namn Telefonnummer Peter 031-405937 Peter 0736-341482 Paul 031-405937 Paul 0737-305459 Hannah 031-405937 Hannah 0730-732100

Läs mer

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 3 Datastrukturer (DAT037) Föreläsning 3 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-07 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 Förra

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-18 Idag Mer om grafer: Minsta uppspännande träd (för oriktade grafer). Prims algoritm. Kruskals algoritm. Djupet först-sökning. Cykel

Läs mer

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

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011 DD1320 Tillämpad datalogi Lösning (skiss) till tenta 20 okt 2011 1 KMP P I P P I N i 1 2 3 4 5 6 Next[i] 0 1 0 2 1 3 2 Huffmankodning: Algoritmen 1. Sortera tecknen som ska kodas i stigande förekomstordning.

Läs mer