Sudokulösare: Jämförelse av körtider för backtracking och mänskliga strategier

Storlek: px
Starta visningen från sidan:

Download "Sudokulösare: Jämförelse av körtider för backtracking och mänskliga strategier"

Transkript

1 DEGREE PROJECT, IN COMPUTER SCIENCE, SECOND LEVEL STOCKHOLM, SWEDEN 2015 Sudokulösare: Jämförelse av körtider för backtracking och mänskliga strategier SAMIUL A, MARK W KTH ROYAL INSTITUTE OF TECHNOLOGY CSC SCHOOL

2 Sudokulösare: Jämförelse av körtider för backtracking och mänskliga strategier SAMIUL ALAM MARK WONG Degree Project in Computer Science, DD143X Handledare: Jens Lagergren Examinator: Örjan Ekeberg CSC, KTH,

3 Sammanfattning Sudokulösare av alla typer är vida undersökta inom forskningsvärlden. Denna rapport undersöker skillnader i körtid och tidskomplexitet mellan backtracking strategin och mänskliga strategier för Sudokupussel indelade i klasser med ledtrådar. Backtracking jämförs med vår egen implementation av mänskliga strategier med testdata som innehåller 99 Sudokupussel för varje klass. Studien visar att både körtid och tidskomplexitet är mindre för mänskliga strategier än backtracking för varje klass. Slutsatsen visar att det alltid är lönsamt att implementera de mänskliga strategier som rapporten har undersökt. 2

4 Abstract Sudoku solvers are a widely researched topic among mathematicians and computer scientists. This report investigates the differences in execution time and time complexity between backtracking and human strategies for classes with clues. Backtracking is compared to our implementation of human strategies with test data that contains 99 Sudoku puzzles for each class. The study shows that the execution time and time complexity is improved for human strategies compared to backtracking for each class. The conclusion shows that it is always favorable to implement the human strategies investigated in the report. 3

5 Innehåll 1 Terminologi 5 2 Introduktion 6 3 Bakgrund Tidigare forskning Backtracking Villkorsprogrammering Mänskliga strategier Syfte Problemformulering Avgränsningar Metod Programmeringsspråk Sudokulösare med backtracking Sudokulösare med mänskliga strategier och backtracking Testdata Resultat Backtracking Mänskliga strategier Jämförelse av körtid Analys & Diskussion Metodkritik Slutsats 18 4

6 1 Terminologi Nyckelord som används i uppsatsen: rutnät - Spelplanen som består av 9x9 celler. zon - En kvadratisk enhet som består av 3x3 celler. Zonerna är fördelade så att det finns tre zoner på varje rad. cell - En kvadratisk ruta som kan innehålla inget eller en siffra mellan 1-9. ledtråd - Antalet ifyllda celler i ett rutnät vid en given probleminstans. latinsk kvadrat - En matris där elementen är ordnade så att varje rad och varje kolumn innehåller element av olika typ. kandidat - tillåtet värde i en cell. 5

7 2 Introduktion Sudoku är ett pussel som går ut på att fylla ett rutnät med siffror. Rutnätet för ett standard Sudoku är 9x9 rutor stort och indelat i nio zoner på 3x3 rutor var. Varje probleminstans består av ett rutnät med ett antal från början kända siffror sådant att det finns en unik lösning. Det är problemlösarens uppgift att från detta utgångsläge färdigställa probleminstansen genom att fylla i resten av cellerna. En giltig lösning har hittats då varje rad, kolumn samt zon innehåller siffrorna 1-9 endast en gång. Detta är alltså precis som konstruktionen av en latinsk kvadrat. Figur 1: Probleminstans med giltig lösning. 6

8 3 Bakgrund 3.1 Tidigare forskning Sudoku är ett väl undersökt ämne inom forskningsvärlden mycket på grund av dess popularitet och matematiska egenskaper. McGuire et al. (2013) har visat att det finns olika Sudoku. Vidare bevisade McGuire att det inte finns någon giltig Sudoku som innehåller färre än 17 ledtrådar. Kovacs (2012) har beskrivit olika typer av brute-force algoritmer och skillnaderna mellan dessa. Dessa algoritmer behöver i värsta fall testa alla möjliga lösningar tills en giltig lösning är funnen. Crook (2009) har undersökt en algoritm som är inspirerad av mänskliga strategier. Denna algoritm skiljer sig avsevärt från brute-force algoritmen eftersom den är kapabel till att göra smartare insättningar genom att utesluta otillåtna insättningar. Ett exempel är en probleminstans där en zon endast saknar en siffra. Brute-force algoritmen testar i värsta fall alla siffror från 1-9 medan denna algoritm utesluter de siffror som redan finns i zonen Backtracking En av brute-force algoritmerna som Kovacs har beskrivit går systematiskt igenom alla tomma celler från vänster till höger och uppifrån ned. I den första tomma cellen sätter algoritmen in en etta. Om insättningen inte strider mot spelreglerna går algoritmen vidare till nästa tomma cell och sätter in en etta. Om detta leder till en konflikt ökar vi siffran för den senaste insättningen. Vid fallet då alla möjliga siffror leder till en konflikt backar algoritmen till den senaste fungerande insättningen och ökar dess värde med ett. Algoritmen fortsätter tills en lösning är hittad. Denna algoritm kallas för backtracking. Till skillnad från en totalsökningsalgoritm utvärderar inte denna alla möjliga, inklusive felaktiga, lösningsförslag utan letar sig sakta men säkert till den korrekta. Algoritmens värsta-falls-komplexitet är O(n m ) där n är antal alternativ för en cell och m är antalet tomma celler i probleminstansen. Mer specifikt blir tidskomplexiteten för ett standard Sudokupussel i värsta fallet O(9 m ). Detta eftersom varje tom cell innebär nio alternativ till lösningsförslag. I och med att en given ledtråd i en probleminstans innebär en tom cell mindre att fylla i växer körtiden för denna algoritm exponentiellt när antalet ledtrådar minskar Villkorsprogrammering Villkorsprogrammering är ett programmeringsparadigm i vilket ett antal variabler med givna domäner skall tilldelas värden i enlighet med ett antal villkor. Sudoku kan angripas med villkorsprogrammering där villkor dessutom liknar mänskliga strategier. Simonis (2005) har undersökt och redogjort för denna strategi. 7

9 3.1.3 Mänskliga strategier Davis (2012) har beskrivit strategier som människor använder när de löser Sudoku. Dessa strategier är grundade i människans förmåga att se mönster och utesluta alternativ. Vidare har Davis rangordnat dessa strategier efter hur svåra de är att applicera för en människa. Nedan följer de första fyra av Davis mänskliga strategier. Unik frånvarande kandidat: I fallet då en rad, kolumn eller zon innehåller åtta siffror återstår endast en möjlig kandidat och placeras därmed i den enda tomma cellen. Naken singel: I fallet då en specifik kandidat enbart kan placeras i en cell tillhörande en rad, kolumn eller zon placeras den i den cellen. Gömd singel: En gömd singel uppstår när en siffra endast finns som kandidat för en cell i en rad, kolumn eller zon. Det som skiljer en gömd singel från en naken singel är att cellen med den gömda singeln kan inneha flera kandidater. Låst kandidat: Det kan hända att det finns en zon i vilken en kandidat endast kan placeras i celler som faller inom en av de tre möjliga raderna eller kolumnerna. I och med att kandidaten måste finnas just i denna zon kan den uteslutas som kandidat från resten av raden eller kolumnen. I värsta fallet har en probleminstans från början varken någon unik frånvarande singel, naken singel, gömd singel eller låst kandidat. Om man då väljer att från detta stadie lösa probleminstansen med backtracking blir värsta-falls-komplexiteten även för denna algoritm O(9 m ). 3.2 Syfte Uppsatsen undersöker skillnader mellan två olika typer av Sudokulösare. Mer specifikt jämför uppsatsen förändringar i körtiden för dessa Sudokulösare med avseende på antalet ledtrådar i probleminstansen. Den första algoritmen tillämpar endast backtracking. Den andra algoritmen inleder med mänskliga strategier. När algoritmen inte kan gå vidare med mänskliga strategier använder den backtracking för att komplettera probleminstansen. Det finns inga belägg för att svårighetsgraden på en probleminstans ökar för människor när antalet ledtrådar minskar. Däremot tar det längre tid för backtracking algoritmen att lösa en probleminstans med färre ledtrådar eftersom det finns fler tomma celler att behandla. Uppsatsen undersöker därför om mänskliga strategier underlättar för en dator när antalet ledtrådar minskar. Denna insikt 8

10 skapar förutsättningar för att framtida problemlösare ska göra strategiska val när de skapar sin egen Sudokulösare. 3.3 Problemformulering Hur jämför sig körtiden för backtracking algoritmen mot körtiden för backtracking med mänskliga strategier i Sudokuproblemet med avseende på antalet ledtrådar? Avgränsningar Vi kommer endast implementera tre av de beskrivna mänskliga strategierna. 1. Unik frånvarande singel 2. Naken singel 3. Gömd singel Probleminstanserna delas upp i 5 klasser där varje klass innehåller 99 probleminstanser. Testklasserna innehåller 17, 18, 19, 20 och 21 ledtrådar. 9

11 4 Metod 4.1 Programmeringsspråk Vi har valt att implementera algortimerna i Java som är ett objektorienterat högnivåsspråk. Även om Java inte presterar lika bra som ett kompilerat lågnivåsspråk som C eller C++ med avseende på körtid ger båda språken samma insikt eftersom det är förhållandet mellan körtiderna för de olika algoritmerna vi vill undersöka. Vidare är Java plattformsoberoende vilket underlättar replikation av vår undersökning. Vidare beräknas den genomsnittliga körtiden för respektive algoritm och resultaten sammanställs för analys. För att beräkna körtid används Javas inbyggda metod System.nanoTime(). Enligt Java-dokumentationen (2015) ger detta den mest precisa tidsmätningen. 4.2 Sudokulösare med backtracking 1 SudokuSolver(Matrix m): 2 Börja i det övre vänstra hörnet.; 3 foreach tom cell c i M do 4 for i 1:9 do 5 if i är en tillåten insättning then 6 c i 7 if SudokuSolver(M) is true then 8 return true; 9 else 10 c 0; 11 end 12 end 13 end 14 return false; 15 end 16 return true; Figur 2: Pseudokod för backtracking algoritmen Backtracking algoritmen för Sudokuproblem har gjorts och publicerats tidigare (Stanford, 2008). Eftersom teorin bakom backtracking är trivial kan vi med fördel återanvända en befintlig implementation och därmed undvika att återuppfinna hjulet. Se pseudokoden från Stanford i figur 2. Backtracking algoritmen börjar i det övre vänstra hörnet och identifierar den första tomma cellen. Algoritmen undersöker här om en etta är en tillåten insättning. I fallet då insättningen inte är tillåten provar den istället nästa tal upp till 10

12 och med nio tills det går. I en probleminstans kan det finnas flera tillåtna insättningar i en tom cell. Givet en giltig probleminstans kommer ett av dessa tal garanterat vara en korrekt insättning. I fallet då insättningen i en tom cell är tillåten går algoritmen vidare och itererar samma process i nästa tomma cell. Här är det inte garanterat att någon av de nio siffrorna är korrekta eftersom den föregående insättningen kan vara tillåten men inte korrekt. I det fallet backar algoritmen till den föregående insättningen och inkrementerar den. Algoritmen fortsätter tills den har fyllt alla tomma celler med den korrekta insättningen. Denna algoritm är den som anses vara den mest primitiva algoritmen efter totalsökningsalgoritmen. Det är därför lämpligt att använda backtracking algoritmens körtid och komplexitet som referensvärde vid utvärdering av mänskliga strategier. 4.3 Sudokulösare med mänskliga strategier och backtracking 1 HumanWithBacktracking(Matrix m): 2 Skapa en kandidatlista för varje tom cell; 3 while Det finns celler med endast en kandidat i kandidatlistan do 4 Insättning av kandidat i cellen; 5 Borttagning av kandidat från kandidatlistorna i cellerna på raden; 6 Borttagning av kandidat från kandidatlistorna i cellerna på kolumnen; 7 Borttagning av kandidat från kandidatlistorna i cellerna på zonen; 8 end 9 Börja i det övre vänstra hörnet; 10 foreach tom cell c i M do 11 for i in kandidatlista do 12 if i är en tillåten insättning then 13 c i 14 if SudokuSolver(M) is true then 15 return true; 16 else 17 c 0; 18 end 19 end 20 end 21 return false; 22 end 23 return true; Figur 3: Pseudokod för mänskliga strategier med backtracking 11

13 Algoritmen med mänskliga strategier implementerar tre av Davis (2012) strategier: unik frånvarande singel, naken singel och gömd singel. Algoritmen skapar en kandidatlista för varje tom cell i probleminstansen. Sedan söker den efter de tomma celler vars kandidatlistor endast innehåller en kandidat. Den kandidaten sätts in i cellen. Sedan tas detta värde bort från kandidatlistorna för de tomma cellerna i samma rad, kolumn och zon. Som konsekvens kan detta leda till att fler celler härefter endast har en kandidat. Dessa fylls i på samma sätt. Denna process itereras tills inga fler celler har endast en kandidat. Därefter löses resten av probleminstansen med backtracking. Dessa strategier är de mest grundläggande ur ett implementationsperspektiv. Att undersöka dessa ger en inblick i hur mänskliga strategier påverkar körtiden. 4.4 Testdata För att besvara frågeställningen körs båda algoritmerna med samma testfall. För att ta hänsyn till anomalier bland probleminstanser behövs en stor mängd testdata för respektive grupp av pussel. Eftersom det inte finns probleminstanser med färre än 17 ledtrådar innehåller första klassen probleminstanser med 17 ledtrådar. För att se hur körtiderna förändras i takt med att antalet ledtrådar ökar undersöks även körtider för probleminstanser med 18 till 21 ledtrådar. Båda algoritmerna kräver en giltig probleminstans för att returnera en unik lösning. Alla testfall genereras därför med hjälp av Ericsons (2015) Sudokugenerator som beskriver en probleminstans med hjälp av siffror. Symbolerna - och! används som avskiljare för radslut och zonslut. Ericsons (2015) probleminstanser konverteras sedan till 2D vektorer i Java enligt formatet i figur 4. Figur 4: Indata för ett Sudokupussel med 17 ledtrådar. 12

14 5 Resultat 5.1 Backtracking Figur 5 visar den genomsnittliga körtiden för backtracking i nanosekunder för en probleminstans i respektive probleminstansklass. Ledtrådar Körtid ( ns) Figur 5: Genomsnittlig körtid per probleminstans för Sudokulösare med mänskliga strategier. 5.2 Mänskliga strategier Figur 6 visar den genomsnittliga körtiden för mänskliga strategier i nanosekunder för en probleminstans i respektive probleminstansklass. Figur 7 visar det högsta antalet singlar i en probleminstans och det genomsnittliga antalet singlar per probleminstans för varje klass. Figur 8 visar det genomsnittliga antalet kandidater som varje tom cell innehöll efter initialiseringen av probeminstansens kanddiatlistor. Ledtrådar Körtid ( ns) Figur 6: Genomsnittlig körtid per probleminstans för Sudokulösare med backtracking. Ledtrådar Högsta antalet singlar Singlar per probleminstans Figur 7: Genomsnittlig fördelning av singlar över 99 probleminstanser för varje klass. 13

15 Ledtrådar Kandidater per ruta Figur 8: Genomsnittligt antal kandidater per tom ruta efter mänskliga strategier. 5.3 Jämförelse av körtid Figur 9 visar förhållandet mellan de genomsnittliga körtiderna för backtracking och mänskliga strategier. De blå staplarna visar körtider för backtracking. De gula staplarna visar körtider för mänskliga strategier. Figur 10 visar den procentuella minskningen av körtid för mänskliga strategier jämfört med backtracking. Figur 9: Körtider backtracking (blå) jämfört med mänskliga strategier (gul) 14

16 Figur 10: Procentuell minskning av körtid med mänskliga strategier. 15

17 6 Analys & Diskussion Körtiderna för båda algoritmerna minskar när antalet ledtrådar ökar. Detta beror på att båda algoritmerna har färre tomma celler att behandla. I figur 9 och 10 ser vi att mänskliga strategier ger en förbättrad körtid för varje probleminstansklass. Detta innebär att vår implementation av Davis (2012) första tre mänskliga strategier har varit gynnsamma. I figur 8 ser vi att det genomsnittliga antalet kandidater per ruta minskar när antalet ledtrådar ökar. Mer intressant är att antalet kandidater per ruta halveras när mänskliga strategier har eliminerat de alternativ som leder till konflikt. Antalet kandidater per ruta för samtliga probleminstansklasser ligger inom intervallet (4,5). Mänskliga strategier algoritmen går därefter vidare med backtracking och har då i snitt 4-5 kandidater att prova. Detta ger en genomsnittlig tidskomplexitet på nära O(4 m ) för probleminstanser med 21 ledtrådar och en genomsnittlig tidskomplexitet på närmare O(5 m ) när antalet ledtrådar går mot 17. Det är en av orsakerna till den förbättring av körtid som uppstår när mänskliga strategier används jämfört med backtracking som alltid har en tidskomplexitet på O(9 m ). Den markanta skillnaden mellan algoritmernas tidskomplexitet översätts dock inte direkt till exponentiellt bättre körtid. Det tar tid för algoritmen med mänskliga strategier att förminska antalet tomma celler i indatat innan den påbörjar backtracking. Se hur algoritmen itererar över alla celler i probleminstansen och skapar en kandidatlista i kodavsnittet nedan. Den modifierade backtracking som algoritmen med mänskliga strategier använder är dessutom långsammare än enbart backtracking. Detta beror på att algoritmen itererar över alla tomma celler i probleminstansen och söker efter celler som endast har en kandidat. När den kandidaten fylls i itererar algoritmen över alla tomma celler i samma rad, kolumn och zon som den ifyllda cellen och tar bort den ifyllda siffran ifall den finns i de andra cellenrnas kandidatlista. Se även detta i kodavsnittet nedan. Det är många operationer som backtracking algoritmen inte gör. Däremot behöver algoritmen med mänskliga strategier endast iterera över kandidater för varje tom cell jämfört med backtracking algoritmen som itererar över alla tal från ett till nio. Som konsekvens blir körtiden bättre med mänskliga strategier. 1 /** 2 * Creates a candidatelist for every empty cell in the grid. 3 * Then calls removecandidates to remove conflicting 4 * candidates. 5 */ 6 public void initcandidates(int[][] grid) { 7 for(int j = 0; j<9; j++) { 8 for(int i = 0; i<9; i++) { 9 if(grid[i][j] == 0) { 10 cmatrix[i][j] = new Candidates(); 11 removecandidates(grid,i,j); 16

18 } /** 16 * Finds cells with only one candidate and fills them in. 17 * Consequently removes conflicting canidates in other cells. 18 */ 19 public void findhiddensingles(int[][] grid) { 20 for (int row = 0; row < grid.length; row++) { 21 for (int col = 0; col < grid.length; col++) { 22 if (grid[row][col] == 0) { 23 if(cmatrix[row][col].candidatelist.size() == 1) { 24 int num = cmatrix[row][col].candidatelist.get(0); 25 grid[row][col] = num; 26 removeinsertedcandidate(grid, row, col, num); } I figur 9 och 10 ser vi att körtidstrenden för båda algoritmerna går mot kortare körtider. Störst förbättring mellan algoritmerna sker vid problemsinstanser med 19 ledtrådar. Mänskliga algoritmer ger där en körtid som är 49% bättre än backtracking. Det kan bero på att vår testdata innehåller olika jämn spridning av ledtrådar i de olika testklasserna eller innehåller olika många probleminstanser som går att lösa snabbt. För att få svar på varför skillnaden är störst vid probleminstanser med 19 ledtrådar rekommenderar vi en undersökning av hur spridningen av ledtrådar påverkar körtiden för båda algoritmerna. Alternativt kan fler testfall användas för att jämna ut skillnaden mellan enskilda probleminstanser och därmed minska variansen. 6.1 Metodkritik För att potentiellt förbättra körtiden kan fler av Davis mänskliga strategier implementeras. Det är dock viktigt att väga tidskostnaderna för de nya strategierna mot resultatet. En ineffektiv implementation kan leda till högre tidskomplexitet och därmed försämrad körtid. Metoden kan också utvidgas till att undersöka probleminstansklasser med fler ledtrådar. Det är nödvändigt att undersöka om körtidstrenden fortsätter när antalet ledtrådar ökar eller om det finns en punkt då tidsvinsten är försumbar. I det senare fallet vore det till exempel mer ekonomiskt med avseende på minne att använda backtracking algoritmen. I denna undersökning används enbart 99 testfall för varje probleminstansklass. Det är en liten andel av antalet probleminstanser som existerar för Sudokuproblemet. För att öka trovärdigheten i resultaten bör därför fler testfall användas när Sudokulösare undersöks. 17

19 7 Slutsats Körtiden för mänskliga strategier är avsevärt bättre än backtracking för alla probleminstansklasser som rapporten undersökt. Detta beror på att tidskomplexiteten för mänskliga strategier blir mindre än för backtracking. Störst skillnad mellan algoritmerna uppstår vid probleminstanser med 19 ledtrådar. För probleminstanser med 20 och 21 ledtrådar blir den absoluta tidsskillnaden mindre men den procentuella förbättringen är fortfarande betydande. Undersökningen har därmed visat att det lönar sig att implementera de mänskliga strategier som rapporten undersökt mot att endast använda backtracking vid konstruktion av en Sudokulösare. 18

20 Referenser [1] JF Crook. A pencil-and-paper algorithm for solving sudoku puzzles. Notices of the AMS, 56(4): , [2] Tom Davis. The mathematics of sudoku, [3] Kjell Ericson. Generate and solve sudoku [4] Tim Kovacs. Artificial intelligence through search: Solving sudoku puzzles [5] Gary McGuire, Bastian Tugemann, and Gilles Civario. There is no 16- clue sudoku: Solving the sudoku minimum number of clues problem. arxiv preprint arxiv: , [6] Helmut Simonis. Sudoku as a constraint problem. In CP Workshop on modeling and reformulating Constraint Satisfaction Problems, volume 12, pages Citeseer, [7] Julie Zelenski. Lecture 11: Programming abstractions. University Lecture, Stanford University,

21

Handledare: Mikael Goldmann

Handledare: Mikael Goldmann 2012-02- 23 Jacob Rydh Robert Hedin Sudoku Solver Projektspecifikation Handledare: Mikael Goldmann Introduktion Vi ska studera och utforma olika algoritmer för att lösa Sudoku puzzel. Vi kommer testa olika

Läs mer

Lösning av Sudoku med mänskliga strategier

Lösning av Sudoku med mänskliga strategier Lösning av Sudoku med mänskliga strategier DD143X, Examensarbete i datalogi om 15 högskolepoäng vid Programmet för datateknik 300 högskolepoäng JOHAN BRODIN, JBRODI@KTH.SE JONATHAN PELLBY, JONATHP@KTH.SE

Läs mer

Datastrukturer. föreläsning 3. Stacks 1

Datastrukturer. föreläsning 3. Stacks 1 Datastrukturer föreläsning 3 Stacks 1 Abstrakta datatyper Stackar - stacks Köer - queues Dubbeländade köer - deques Vektorer vectors (array lists) All är listor men ger tillgång till olika operationer

Läs mer

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: 2:a september 200, klockan 8:30-12:30. Plats: V Ansvarig lärare: Katarina Blom, tel 772 10 0. Läraren besöker tentamen kl 9:30

Läs mer

Lösningsförslag tentamen FYTA11 Java

Lösningsförslag tentamen FYTA11 Java Lunds universitet FYTA11 Institutionen för Teoretisk fysik HT 10 Lösningsförslag tentamen FYTA11 Java Måndag 10:e januari 2011, 09:00 13:00 Instruktioner Hjälpmedel: enkla ritverktyg och Javadoc-genererade

Läs mer

Dugga Datastrukturer (DAT036)

Dugga Datastrukturer (DAT036) Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

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

Algoritm för Sudokulösning med mänskliga strategier. ROBERT HEDIN och JACOB RYDH

Algoritm för Sudokulösning med mänskliga strategier. ROBERT HEDIN och JACOB RYDH Algoritm för Sudokulösning med mänskliga strategier ROBERT HEDIN och JACOB RYDH Examensarbete Stockholm, Sverige 2012 Algoritm för Sudokulösning med mänskliga strategier ROBERT HEDIN och JACOB RYDH DD143X,

Läs mer

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer. Föreläsning 9 Innehåll Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering backtracking Orientering om versionshantering med git Söndra och härska Divide and conquer teknik för att konstruera

Läs mer

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004 Lösningsförslag Programmeringsmetodik, KV: Java och OOP 17 januari 2004 Examinator: Johan Karlsson Skrivtid: 9-15 Hjälpmedel: En av följande böcker: Barnes & Kölling: Objects First With Java a practical

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 9 oktober 2015 Anton Grensjö ADK Övning 6 9 oktober 2015 1 / 23 Översikt Kursplanering Ö5: Grafalgoritmer och undre

Läs mer

Föreläsning 4: Kombinatorisk sökning

Föreläsning 4: Kombinatorisk sökning DD2458, Problemlösning och programmering under press Föreläsning 4: Kombinatorisk sökning Datum: 2009-09-25 Skribent(er): Kristina Nylander, Dennis Ekblom, Marcus Öman Föreläsare: Fredrik Niemelä 1 Introduktion

Läs mer

Algoritm för Sudokulösning med mänskliga strategier

Algoritm för Sudokulösning med mänskliga strategier Kungliga Tekniska Högskolan Algoritm för Sudokulösning med mänskliga strategier Jacob Rydh Hornsgatan 98 118 21 Stockholm 076-309 43 10 jacobry@kth.se Robert Hedin Sandhamnsgatan 58 115 28 Stockholm 076-107

Läs mer

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Kursinformation Imperativa delen av

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

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 4 oktober 2017 1 Idag Algoritmkonstruktion (lite blandat) Redovisning och inlämning av labbteori 3 2 Uppgifter Uppgift

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

Grundläggande datalogi - Övning 4

Grundläggande datalogi - Övning 4 Grundläggande datalogi - Övning 4 Björn Terelius November 21, 2008 Definitioner Olika mått på komplexitet Definition En funktion f sägs vara O(g) om det existerar konstanter c, N så att f (n) < cg(n) för

Läs mer

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-20 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får

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

Objektsamlingar i Java

Objektsamlingar i Java 1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och

Läs mer

Sökning och sortering

Sökning och sortering Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling

Läs mer

Föreläsning 8: Exempel och problemlösning

Föreläsning 8: Exempel och problemlösning TDA 545: Objektorienterad programmering Föreläsning 8: Exempel och problemlösning Magnus Myréen Chalmers, läsperiod 1, 2015-2016 De tre senaste föreläsningarna Läsanvisning: kap 2 & 13 meddelanden och

Läs mer

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

Programmering för språkteknologer II, HT2014. Rum Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Sökalgoritmer

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 7 Anton Grensjö grensjo@csc.kth.se 14 oktober 2015 Anton Grensjö ADK Övning 7 14 oktober 2015 1 / 28 Översikt Kursplanering Ö6: Algoritmkonstruktion F19:

Läs mer

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

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning. Programmering för Språkteknologer II Markus Saers markus.saers@lingfil.uu.se Rum -040 stp.lingfil.uu.se/~markuss/ht0/pst Innehåll Associativa datastrukturer Hashtabeller Sökträd Implementationsdetaljer

Läs mer

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

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1 Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

En studie om styrkor och svagheter hos sudokulösande algoritmer

En studie om styrkor och svagheter hos sudokulösande algoritmer En studie om styrkor och svagheter hos sudokulösande algoritmer Emanuel Yifter Lindgren Emanuel Yifter Lindgren VT 2014 Examensarbete, 15 hp Handledare: Marie Nordström Examinator: Pedher Johansson Kandidatprogrammet

Läs mer

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4 Grafer, traversering Koffman & Wolfgang kapitel 1, avsnitt 4 1 Traversering av grafer De flesta grafalgoritmer innebär att besöka varje nod i någon systematisk ordning precis som med träd så finns det

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 10 Anton Grensjö grensjo@csc.kth.se 9 november 2017 1 Idag En konstruktionsreduktion Fler bevis av NP-fullständighet 2 Teori Repetition Ett problem tillhör

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

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006 Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006 Detta lösningsförslag är skrivet i stor hast, så det är möjligt att det innehåller en del slarvfel jag ber i så fall om ursäkt för

Läs mer

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

TDDI16 Datastrukturer och algoritmer. Algoritmanalys TDDI16 Datastrukturer och algoritmer Algoritmanalys 2017-08-28 2 Översikt Skäl för att analysera algoritmer Olika fall att tänka på Medelfall Bästa Värsta Metoder för analys 2017-08-28 3 Skäl till att

Läs mer

Datastrukturer och algoritmer

Datastrukturer och algoritmer Datastrukturer och algoritmer Föreläsning 5 Algoritmer & Analys av Algoritmer Algoritmer Vad är det? Innehåll Mer formellt om algoritmer beräkningsbarhet Att beskriva algoritmer Analysera algoritmer Exekveringstid,

Läs mer

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 202-0-25 Skrivtid: 400-700 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2012-08-24, 8:30 12:30. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 9:30 och ca

Läs mer

Deklarativ programmering

Deklarativ programmering Kursens mål Deklarativ programmering Peter Dalenius petda@ida.liu.se Institutionen för datavetenskap Linköpings universitet 2008-02-26 redogöra för och använda reguljära uttryck använda XML för att definera

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2 Institutionen för Data- och informationsteknik JSk TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING Övningstentamen 2 TID: 4 timmar Ansvarig: Betygsgränser: Hjälpmedel: Jan Skansholm Sammanlagt maximalt

Läs mer

I Skuggan av Spotify

I Skuggan av Spotify DEGREE PROJECT, IN MEDIA TECHNOLOGY, FIRST LEVEL STOCKHOLM, SWEDEN 2015 I Skuggan av Spotify HAR STREAMING AV MUSIK FÖRÄNDRAT SYNEN PÅ ARTISTEN? BEATRICE HALLMARK, DAVID NYLANDER KTH ROYAL INSTITUTE OF

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Algoritmanalys Tidskomplexitet, Rumskomplexitet

Läs mer

Blockkedjor. en introduktion för datavetare. Rikard Hjort, 24 maj 2019

Blockkedjor. en introduktion för datavetare. Rikard Hjort, 24 maj 2019 Blockkedjor en introduktion för datavetare Vem är jag? Varför ska ni lära er om blockkedjor? Alla ska gå härifrån och kunna... förklara Bitcoin är uppbyggt bygga en egen blockkedja läsa på själva om blockkedjeprojekt

Läs mer

Graphs (chapter 14) 1

Graphs (chapter 14) 1 Graphs (chapter ) Terminologi En graf är en datastruktur som består av en mängd noder (vertices) och en mängd bågar (edges) en båge är ett par (a, b) av två noder en båge kan vara cyklisk peka på sig själv

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

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

Läs mer

Exempeltenta GruDat 2002/2003

Exempeltenta GruDat 2002/2003 Exempeltenta GruDat 2002/2003 Endast ett svarsalternativ på varje fråga är korrekt. Felaktigt svar eller felaktigt antal ikryssade svarsalternativ ger noll poäng på uppgiften. Obs: Den riktiga tentan kommer

Läs mer

Programmeringsuppgift Game of Life

Programmeringsuppgift Game of Life CTH/GU STUDIO TMV06a - 0/0 Matematiska vetenskaper Programmeringsuppgift Game of Life Analys och Linär Algebra, del A, K/Kf/Bt Inledning En cellulär automat är en dynamisk metod som beskriver hur komplicerade

Läs mer

Utvärdering av sudokulösare baserade på mänskliga lösningstekniker

Utvärdering av sudokulösare baserade på mänskliga lösningstekniker Utvärdering av sudokulösare baserade på mänskliga lösningstekniker En jämförelse med Dancing links som referensalgoritm ERICA BRONGE JAKOB SUNDH Kandidatexamensrapport vid CSC, DD143X Handledare: Alexander

Läs mer

Datastrukturer och Algoritmer D0041D

Datastrukturer och Algoritmer D0041D Luleå Tekniska Universitet 19 mars 2014 Laborationsrapport Laboration 3 Datastrukturer och Algoritmer D0041D Primms Algoritm Namn E-mail Magnus Björk magbjr-3@ltu.student.se Handledare Felix Hansson Primms

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

Lösningsförslag till exempeltenta 1

Lösningsförslag till exempeltenta 1 Lösningsförslag till exempeltenta 1 1 1. Beskriv hur binärsökning fungerar. Beskriv dess pseudokod och förklara så klart som möjligt hur den fungerar. 2 Uppgift 1 - Lösning Huvudidé: - Titta på datan i

Läs mer

1. Compute the following matrix: (2 p) 2. Compute the determinant of the following matrix: (2 p)

1. Compute the following matrix: (2 p) 2. Compute the determinant of the following matrix: (2 p) UMEÅ UNIVERSITY Department of Mathematics and Mathematical Statistics Pre-exam in mathematics Linear algebra 2012-02-07 1. Compute the following matrix: (2 p 3 1 2 3 2 2 7 ( 4 3 5 2 2. Compute the determinant

Läs mer

Föreläsning 8 Innehåll

Föreläsning 8 Innehåll Föreläsning 8 Innehåll Orientering om samarbete om Eclipse-projekt med git Orientering om konstruktion av användargränssnitt i Android Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering

Läs mer

Tentamen, EDAA10 Programmering i Java

Tentamen, EDAA10 Programmering i Java LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDAA10 Programmering i Java 2017 04 20, 14.00 19.00 Anvisningar: Preliminärt ger uppgifterna 4 + 6 + 13 + 7 + 15 = 45 poäng. För godkänt

Läs mer

13 Prioritetsköer, heapar

13 Prioritetsköer, heapar Prioritetsköer, heapar 31 13 Prioritetsköer, heapar U 101. En prioritetskö är en samling element där varje element har en prioritet (som används för att jämföra elementen med). Elementen plockas ut i prioritetsordning

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

Semantic and Physical Modeling and Simulation of Multi-Domain Energy Systems: Gas Turbines and Electrical Power Networks

Semantic and Physical Modeling and Simulation of Multi-Domain Energy Systems: Gas Turbines and Electrical Power Networks DEGREE PROJECT IN ELECTRICAL ENGINEERING, SECOND CYCLE, 30 CREDITS STOCKHOLM, SWEDEN 2017 Semantic and Physical Modeling and Simulation of Multi-Domain Energy Systems: Gas Turbines and Electrical Power

Läs mer

8 < x 1 + x 2 x 3 = 1, x 1 +2x 2 + x 4 = 0, x 1 +2x 3 + x 4 = 2. x 1 2x 12 1A är inverterbar, och bestäm i så fall dess invers.

8 < x 1 + x 2 x 3 = 1, x 1 +2x 2 + x 4 = 0, x 1 +2x 3 + x 4 = 2. x 1 2x 12 1A är inverterbar, och bestäm i så fall dess invers. MÄLARDALENS HÖGSKOLA Akademin för utbildning, kultur och kommunikation Avdelningen för tillämpad matematik Examinator: Erik Darpö TENTAMEN I MATEMATIK MAA150 Vektoralgebra TEN1 Datum: 9januari2015 Skrivtid:

Läs mer

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING Institutionen för Data- och informationsteknik TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING OBS! Det kan finnas kurser med samma eller liknande namn på olika utbildningslinjer. Denna tentamen gäller

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Det här är inte originaltesen. Uppgift 6 var felaktigt formulerad, och har rättats till. Datum och tid för tentamen: 2011-12-16, 8:30 12:30. Ansvarig: Nils Anders Danielsson.

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

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer. Föreläsning 9 Innehåll Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering backtracking Orientering om versionshantering med git Söndra och härska Divide and conquer teknik för att konstruera

Läs mer

Datastrukturer och algoritmer

Datastrukturer och algoritmer Innehåll Föreläsning 5 Algoritmer Experimentell komplexitetsanalys Kapitel 2.1-2.2, Kapitel 12.1-12.4 Algoritmer Algoritm Definition: Algoritm är en noggrann plan, en metod för att stegvis utföra något

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

Tentamen på kursen DA7351, Programmering 1. 051102, kl 08.15-12.15. Malmö högskola Teknik och samhälle. DA7351, Programmering 1 1 051102

Tentamen på kursen DA7351, Programmering 1. 051102, kl 08.15-12.15. Malmö högskola Teknik och samhälle. DA7351, Programmering 1 1 051102 Tentamen på kursen DA7351, Programmering 1 051102, kl 08.15-12.15 Tillåtna hjälpmedel: Valfri bok om Java. Vid bedömning av lösningarna tas hänsyn till om dessa uppfyller de krav på programkvalitet (strukturering,

Läs mer

Konvexa höljet Laboration 6 GruDat, DD1344

Konvexa höljet Laboration 6 GruDat, DD1344 Konvexa höljet Laboration 6 GruDat, DD1344 Örjan Ekeberg 10 december 2008 Målsättning Denna laboration ska ge dig övning i att implementera en algoritm utgående från en beskrivning av algoritmen. Du ska

Läs mer

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } } Rekursion 25 7 Rekursion Tema: Rekursiva algoritmer. Litteratur: Avsnitt 5.1 5.5 (7.1 7.5 i gamla upplagan) samt i bilderna från föreläsning 6. U 59. Man kan definiera potensfunktionen x n (n heltal 0)

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2012-11-13 Idag Mer om grafer: Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. Floyd-Warshall. Topologisk sortering

Läs mer

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna! Tentamen Programmeringsteknik II 2014-01-09 Skrivtid: 0800-1300 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-13 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får

Läs mer

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00 1 ( 7) Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00 Tillåtna hjälpmedel: Dator, penna, papper, linjal, suddgummi, godkänd(a) bok/böcker/kompendier (ej anteckningar,

Läs mer

Att lösa Sudoku. Metoden Solve (börjar nedtill på sid 3)

Att lösa Sudoku. Metoden Solve (börjar nedtill på sid 3) Att lösa Sudoku Problem av matematisk natur kan ofta snabbt lösas med dator och lite programmering. Därför har sällan matematiska pussel som Sudoku lockat att lösa för hand, men jag har länge tänkt att

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2014-04-25, 14:00 18:00. Författare: Nils Anders Danielsson. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker

Läs mer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer

Läs mer

Tentamen , Introduktion till Java, dtaa98, dtea53

Tentamen , Introduktion till Java, dtaa98, dtea53 Mittuniversitetet 2007-09-01 Institutionen för informationsteknologi och medier Sid:1(3) dtaa98, dtea53 Martin Kjellqvist; Linda Karlsson, Ulf Reiman Lösningsansatser Tentamen 2007-09-01, Introduktion

Läs mer

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

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00 TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B03 170117 kl. 14:00-19:00 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Inga. Algoritmerna finns i de respektive uppgifterna eller i bilagarna. *** OBS *** Betygsgräns:

Läs mer

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- Abstrakt datatyp Datatyp för en variabel Betecknar i ett programmeringsspråk den mängd värden variabeln får anta. T ex kan en variabel av typ boolean anta värdena true och

Läs mer

Datastrukturer. föreläsning 8. Lecture 6 1

Datastrukturer. föreläsning 8. Lecture 6 1 atastrukturer föreläsning 8 Lecture 6 1 jupet-först sökning (S) och bredden-först sökning (S) Två metoder att genomsöka en graf; två grafiteratorer! Kan även användas för att avgöra om två noder är sammanbundna.

Läs mer

Föreläsning 7: Syntaxanalys

Föreläsning 7: Syntaxanalys DD2458, Problemlösning och programmering under press Föreläsning 7: Syntaxanalys Datum: 2007-10-30 Skribent(er): Erik Hammar, Jesper Särnesjö Föreläsare: Mikael Goldmann Denna föreläsning behandlade syntaxanalys.

Läs mer

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen Programmeringsteknik II Inledning. Anmälningskod: Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

Läs mer

Tentamen FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering Lunds universitet FYTA11 Institutionen för Teoretisk fysik HT 10 Tentamen FYTA11 Javaprogrammering Måndag 10:e januari 2011, 09:00 13:00 Instruktioner Hjälpmedel: enkla ritverktyg och Javadoc-genererade

Läs mer

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

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö Datastrukturer och algoritmer Föreläsning 4 Test, Stack och Kö 1 Innehåll Test Datatyperna Stack och kö Specifikation och Gränssnitt Konstruktion Tillämpning 2 Testa VIKTIGT! Test går att göra under många

Läs mer

Laboration: Whitebox- och blackboxtesting

Laboration: Whitebox- och blackboxtesting Tilda11 höstterminen 2011 Laboration: Whitebox- och blackboxtesting Mål med laborationen Du ska lära dig begreppen white-box testing och black-box testing Du ska öva dig på att konstruera testfall Du ska

Läs mer

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

Lösningsförslag för tentamen i Datastrukturer (DAT037) från Lösningsförslag för tentamen i Datastrukturer (DAT7) från --9 Nils Anders Danielsson. Träd- och köoperationerna har alla tidskomplexiteten O(log s), där s är antalet element i trädet/kön (notera att jämförelser

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

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg 2013 12 19 1. a) En samling element där insättning och borttagning

Läs mer

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-6, TDA540 Dag: 207-0-24, Tid: 4.00-.00 Uppgift a) En abstrakt klass kan inte instansieras,

Läs mer

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer D DAT 035/INN960 Tentamen Datastrukturer D DAT 035/INN960 21 december 2007 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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Lösningsförslag till tentamen Datastrukturer, DAT037, Lösningsförslag till tentamen Datastrukturer, DAT037, 2018-01-10 1. Båda looparna upprepas n gånger. s.pop() tar O(1), eventuellt amorterat. t.add() tar O(log i) för i:te iterationen av första loopen.

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

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

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15 OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B03 140818 kl. 08:15 13:15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Inga. Algoritmerna finns i de respektive uppgifterna. Betygsgräns: *** OBS *** Kurs:

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

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer F6 Observera att när man utvecklar program så är inte alla lösningar på vägen korrekta. Speciellt den här gången så finns många OH med program som inte fungerar eftersom det är just det vi skall se på

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

Deklarativ programmering

Deklarativ programmering Deklarativ programmering TDP007 Konstruktion av datorspråk Föreläsning 7 Peter Dalenius Institutionen för datavetenskap 2014-03-03 Deklarativ programmering Program skrivet i ett deklarativt språk logikspråk,

Läs mer

Rekursion. Koffman & Wolfgang kapitel 5

Rekursion. Koffman & Wolfgang kapitel 5 Rekursion Koffman & Wolfgang kapitel 5 1 Rekursivt tänkande Rekursion reducerar ett problem till en eller flera enklare versioner av samma problem. med enklare menas att underproblemen måste vara mindre,

Läs mer

Föreläsning 1 Datastrukturer (DAT037)

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

Läs mer