Cops and Robbers. Forskerspirer Naturvidenskab. Niels Brock. Forfatter: Mathias Theodor Jul Overby

Størrelse: px
Starte visningen fra side:

Download "Cops and Robbers. Forskerspirer Naturvidenskab. Niels Brock. Forfatter: Mathias Theodor Jul Overby"

Transkript

1 Forskerspirer 2018 Naturvidenskab Niels Brock Cops and Robbers Forfatter: Mathias Theodor Jul Overby Forskerkontakter: Mikkel Abrahamsen Søren Eilers 29. oktober 2018

2 Tak til Jeg vil først og fremmest takke Mikkel Abrahamsen og Søren Eilers for at have hjulpet mig med at opstille problemformuleringen og med at realisere projektet. Den faglige sparring hjalp mit projekt meget og generelt blev mine datalogiske evner og forståelse skærpet herigennem. Derudover vil jeg også takke min koordinator for projektet, Robin Højager Olesen, som pressede mig til at gennemføre projektet lige fra starten af. Tak til alle andre, som har bidraget til projektet! Forskerkontakter Mikkel Abrahamsen Adjunkt Datalogisk Institut Københavns Universitet Søren Eilers Professor Institut for Matematisk Fag Københavns Universitet

3 1 Indledning Mathias Theodor Jul Overby I dette projekt ønsker jeg at få en bedre forståelse for, hvordan grafsøgningsalgoritmer og diskret matematik kan bruges på en praktisk problemstilling. Mange matematiske teoretiske problemstillinger kan i dag løses med computerkraft ved numerisk analyse. Efter svaret er fundet, kan der arbejdes på at få en mere teoretisk og matematisk forståelse af, hvorfor svaret er, som det er. Grafer er en matematisk betegnelse for netværk og bruges til at modellere utallige praktiske problemstillinger, såsom vejnetværk på GPS eller tracking af hvem kender hvem på Facebook. I denne opgave laver jeg en praktisk implementering af en teoretisk problemstilling: Cops and Robbers. Min problemstilling undersøger, hvor mange ressourcer der er nødvendige for at gennemsøge en graf. Spørgsmål som dette, om hvordan man afsøger grafer effektivt, har stor videnskabelig bevågenhed. Der er i de seneste år blevet forsket meget i varianter af denne problemstilling med henblik på at få såvel en praktisk som teoretisk forståelse af grafer. 2 Problembeskrivelse Problemet, jeg har sat mig for at løse, er kendt som Cops and Robbers og er et spil, som spilles på en n n ikke-orienteret gitter graf med 2(n 1)n kanter. I et n n gitter forstås krydspunkterne, som talpar (i, j), hvor i, j {1,..., n og hvor (i, j) og (i, j ) er forbudne hvis og kun hvis i i + j j = 1. Hvis eksempelvis n = 3, så findes der 9 krydspunkter, som ses i figur 1. I figurerne bliver et krydspunkt repræsenteret som et felt. Figure 1: Eksempel på et 3 3 gitter graf I spillet gælder det om at fange røveren, som bevæger sig rundt på grafen, med et givent antal betjente til rådighed. I den variant af spillet jeg har 1

4 valgt at fokusere på, bevæger betjente og røvere sig på samme tid i træk og derudover er røveren usynlig. Når en betjent bevæger sig fra krydspunkt a til krydspunkt b, så bliver røveren fanget, hvis han samtidig bevæger sig fra krydspunkt b til a. Røveren bliver også fanget, hvis han befinder sig på samme krydspunkt som en betjent. Det gælder om at finde en strategi for betjenten(e), som altid vil resultere i, at røveren bliver fanget, lige meget hvor røveren starter og efterfølgende rykker. Spillet illustreres i figur 2 nedenfor. I min problemstilling kendes startpositionen af røveren ikke og dermed er alle krydspunkter, hvor der ikke er betjente, mulige placeringer for røveren. Figuren er kun til for at illustrere hvordan røverens muligheder for at være i forskellige positioner øges over tid. Det er i og for sig ligegyldigt hvor røveren er, da det gælder om at fjerne alle mulighederne, hvor røveren kunne være. Røveren er kun fanget, hvis alle muligheder er fjernet. Figure 2: 4 4, 3 træk Her spiller 2 betjente mod en røver. Farven grøn beskriver betjentene og farven rød beskriver mulige steder røveren kan befinde sig. Røveren og betjentene kan hver tur bevæge sig op, ned, til højre, til venstre eller blive, hvor de er. Røveren starter i dette tilfælde i det øverste krydspunkt til højre og betjentene starter i de nederste krydspunkter til højre og venstre. I det første træk bevæger betjentene sig begge op og på samme tid spreder de mulige steder, hvor røveren kan befinde sig. Det vil sige, røveren kunne fra trin 1 til trin 2 rykke sig til venstre, ned eller blive. Derfor er der nu 3 krydspunkter, hvor der er mulighed for, at der er en røver. Hvis en betjent rykker sig hen på et krydspunkt, hvor der er mulighed for at røveren befinder sig, fjernes denne mulighed, som kan ses i trin 2 til 3. Spørgsmålet, der forsøges besvaret, er, hvor mange betjente der skal til for at fange røveren for en graf af størrelse n n. Der er en kendt strategi til 2

5 Figure 3: 3 3. Løsning med n betjente at løse problemet, når antal betjente er lig n, som illustreret i figur 3. Her rykker betjentene systematisk op og udelukker dermed de steder, hvor røveren kunne befinde sig. Det er ligeledes blevet bevist af Brass et al. [6], at det ikke er muligt at fange røveren med mindre end eller lig med n/2 betjente. Intervallet ( n/2 + 1, n) er dog stadigt åbent, og det er det, jeg ønsker at indsnævre. Da det er bevist med n betjente, er det interessant at undersøge om det er muligt med n 1 betjente. Det er hverken bevist eller modbevist, at man kan fange røveren med n 1 betjente. I denne analyse anvendes computersimuleringer til at undersøge dette. I disse simuleringer bliver alle de forskellige træk betjentene kan tage gennemsøgt, for at finde ud af, om der findes en kombination af træk, som fører til, at røveren bliver fanget. Svaret kan variere for de forskellige n, og derfor foretages simulationen med forskellige n (størrelsen på grafen). Bemærk at det er ligegyldigt, hvor betjentene starter, idet de altid kan rykke hen i enhver position, da de ikke har en tidsbegrænsning. Problemstilling I en n n ikke-orienteret gitter graf undersøges om der findes en strategi, som altid resulterer i at en usynlig røver bliver fanget med n 1 betjente til rådighed. Røverens startposition kendes ikke og røveren anses for at være fanget, hvis der ikke er flere steder, hvor røveren kan befinde sig. Dette undersøges for forskellige n. I figuren til højre er n = 3, betjentene er illustreret med grønt og røverens mulige positioner er røde. 3

6 3 Metode Mathias Theodor Jul Overby 3.1 Terminologi Et træk består af, at hver betjent bevæger sig i en retning. Det kan være op, ned, til højre, til venstre eller at blive stående. Betjentene må kun bevæge sig på grafen og kan ikke bevæge sig skråt. Ved tilstanden af en graf menes samtlige krydspunkters situation (befinder der sig en betjent, mulighed for røver eller ingenting). Hvis tilstanden af graf 1 er den samme som graf 2, så betyder det, at de er den samme graf. Der tages højde for rotationer og spejlinger, når der sammenlignes tilstande, som forklares i sektion Logikken bag algoritmen Metoden, til besvarelse af spørgsmålet om det er muligt at fange røveren på en n n graf med n 1 betjente, er, at gennemsøge alle de tilladte træk betjentene må tage. Spørgsmålet er, om der findes en kombination af træk, som fører til at røveren altid bliver fanget. Udfordringen med dette er, at betjentene må foretage vilkårligt mange træk, da der ikke er nogen tidsbegrænsning. Der vil hermed altid være et nyt træk, som betjentene kan foretage sig og dette fortsætter i al uendelighed. Dette kan løses ved, inden hvert træk, at tjekke, om grafen allerede har været i præcis den tilstand før. For hvis grafen allerede har været i den tilstand før, så er der allerede blevet kigget på alle de efterfølgende muligheder af træk ud fra den tilstand. Der findes altså et begrænset antal muligheder for træk, der kan foretages. Flowchartet i figur 4 beskriver den overordnede logik bag ved algoritmen, som er rekursivt opbygget. Der startes med at specificere størrelsen på grafen, n, og antal af betjente. For at besvare denne problembeskrivelse er antal af betjente altid n 1. Derefter placeres alle betjentene på grafens krydspunkter. Det er underordnet, hvor betjentene starter, da alle tilstande gennemsøges. Det tjekkes om der findes et træk, ud fra den oprindelige tilstand, som fører til at grafen findes i en tilstand, som ikke er set før. Hvis der er det, så tjekkes det, om enhver position for røveren er udelukket, hvis ja, så er der fundet en løsning. Ellers tjekker programmet om der findes et træk, som fører til en tilstand, 4

7 Entry Input n og antal betjente Placer alle betjente på grafens krydspunkter Er grafen i dens oprindelige position? nej Findes der et træk, som resulterer i en tilstand der aldrig er set før? ja Bevæg betjentene ifølge det træk ja nej Reverser det tidligere træk nej Er enhver position for røveren udelukket? Ingen løsning Exit ja Løsning fundet Figure 4: Flowchart over algoritmen som ikke er set før, ud fra den nye tilstand, som lige er blevet fundet. Dette fortsætter indtil der ikke findes flere træk, som fører til nye tilstande. Derfra reverseres det seneste træk, og der tjekkes, om der findes et træk, som fører til en ny tilstand ud fra den reverserede tilstand. Dette fortsætter indtil der ikke findes flere mulige træk, som fører til nye tilstande fra den reverserede tilstand. Så reverseres det træk, som førte til den nuværende tilstand. Denne proces fortsætter indtil grafen er i dens oprindelig tilstand og der ikke findes flere træk, som fører til nye tilstande, hvilket betyder at alle træk og deres efterfølgende træk er blevet undersøgt. Dette betyder, at der ikke findes en kombination af træk, som fører til at røveren fanges. Gennemsøgningen af alle de mulige træk er illustreret i figur 5. Hver knude repræsenterer en tilstand og den første knude er den oprindelige tilstand. λ(k) beskriver antallet af mulige træk fra tilstand k, som resulterer i en tilstand aldrig set før ud. Figuren visualiserer algoritmen, der fortsætter indtil der ikke er flere træk, som resulterer i en tilstand aldrig set før. 5

8 k 1,1,1 k 1,1,2 k 1,1. - k 1,1,λ(k1,1) k 1,2,1 k 1 k 1, k 1,λ(k1). - - k 1,(k1,λ(k1 )),λ(k 1,λ(k1 )) Figure 5: Træstruktur Denne gennemgang af træk er en dybde-først søgning. På figur 5 betyder det, at der først gennemgås tilstand k 1, derefter k 1,1 og så k 1,1,1 indtil der ikke er flere tilstande, som fører til nye tilstande ud fra den nuværende tilstand. Derfra reverseres det seneste træk, hvilket er ensbetydende med, at der rykkes en knude tilbage. Hvis k 1,1,1 var den sidste knude, så ville der rykkes tilbage til k 1,1 og derefter ville k 1,1,2 være den næste knude. Processen fortsætter indtil programmet befinder sig i den oprindelige tilstand (k 1 ) og ikke har mulighed for at finde nye tilstande, hvilket er ensbetydende med at alle tilstande, som var mulige ud fra den oprindelige tilstand er gennemsøgt. Hvis programmet når hertil, så betyder det, at der ikke findes en kombination af træk, som fører til at røveren kan fanges med det givne antal betjente. 6

9 3.3 Tilstand af grafen Mathias Theodor Jul Overby Den valgte metode kræver, at alle tidligere graftilstande gemmes for at kunne sammenligne senere grafer med de tidligere graftilstande. For at spare på brug af hukommelse gemmes grafer ikke som multidimensionale arrays, men som to tal, der beskriver henholdsvis positionen af betjentene og de steder, hvor røveren kan befinde sig. Dette kræver, at der findes et unikt tal for hver tænkelig position for betjentene og tilsvarende for mulighederne for røveren. Dette løses ved at give hvert krydspunkt et forskelligt primtal. Betjentenes position identificeres nu ved produktet af de primtal, der associeres med de krydspunkter, hvor betjentene står. Haves et id kan placeringen af betjentene identificeres ved primfaktoropløsning af id et. På tilsvarende måde kan et unikt id for røverens muligheder beregnes. Computeren er altså nu i stand til at repræsentere enhver graf med to tal. Hermed spares en masse hukommelse ift. at gemme de tidligere undersøgte løsninger for mindre n. Dog har det nogle begrænsninger for større n, som bliver præsenteret senere Spejling betjente id: betjente id: betjente id: betjente id: betjente id: betjente id: betjente id: betjente id: Figure 6: Repræsentation af grafer ved hjælp af primtal 7

10 Derudover roteres og spejles grafen på 7 forskellige måder for at finde ud af, om grafen har været i den samme tilstand bare fra en anden vinkel. Figur 6 viser den samme graf, bare roteret og spejlet. En graf er den samme selvom den roteres eksempelvis 90. Hver af disse 8 grafer har muligvis forskellige ids selvom de egentlig svarer til den samme graf. Som tidligere nævnt, beregnes et id ved at tage produktet af alle de primtal, som associeres ved krydspunktet for enten betjente eller røvere. Når der beregnes id for en graf roteres og spejles den på de forskellige måder, og der beregnes betjentenes id for hver af disse grafer. Derfra tages den mindste af disse ids og det tilsvarende røver id beregnes for den rotation med lavest betjente id. Denne proces er illustreret i figur 6. I dette tilfælde er den graf uden rotation den med lavest betjente id. Betjentenes id er i dette tilfælde (= ) og røverens id er Hver gang der findes en ny tilstand foretages denne proces for at tjekke om grafen er blevet set før. Hvis en af de her grafer i eksemplet bliver fundet senere, så foretager programmet samme proces og får samme ids og ved, at grafen er set før. 4 Projektets udførsel 4.1 Indledende resultater Efter at have kodet algoritmen i C++ er den kommet frem til de nedenstående resultater med følgende tider (se koden til algoritmen i Annex). Disse resultater viser, at for n = 2, 3, 4 er der behov for at n betjente for at fange røveren. n Min. antal nødvendige betjente Execution time 2 2 <1sek 3 3 <1sek 4 4 ca. 1.5sek Tabel 1: Resultater 8

11 4.2 Videre forskning Mathias Theodor Jul Overby Algoritmens beregninger viser, at der er behov for n betjente når n = 2, 3, 4. Det er stadig usikkert, hvor mange der skal til når n 5. De indledende resultater tyder derfor på, at der er behov for at n betjente til at kunne fange røveren på grafen for alle n. Det er dog ikke ensbetydende med, at dette er tilfældet. Det er eksempelvis kun nødvendigt at bruge 8 betjente til at fange røveren i en kube, hvilket blev bevist af Berger et al. [5]. Grunden til, at det ikke var muligt at teste algoritmen når n = 5, er, at de ids programmet brugte til at gemme tilstande af grafen for røverens mulige positioner hurtigt blev for store når n 5. Disse enormt store tal kan ikke umiddelbart gemmes i C++. Der findes dog måder at løse dette problem på, og det vil jeg i første omgang fokusere på. Derudover skal algoritmen også optimeres for at kunne fungere mere effektivt, bl.a. er der potentiale til at forbedre på den måde tilstande gemmes ift. rotationer og spejlinger. Når algoritmen har fået resultater for nogle større n, kan der derefter undersøges, hvorfor de resultater er som de er, på et mere teoretisk og matematisk plan. 4.3 Budget Jeg vil undersøge, om det er muligt at låne en supercomputer med mine forskerkontakter Mikkel Abrahamsen og Søren Eilers for at undersøge større n. Når der kodes til supercomputere kræves det, at programmet er opbygget på en specifik måde og dette kan tage lidt tid at implementere. Hvis jeg får nok resultater, vil jeg skrive en artikel og sende den til en konference i algoritmik eller matematik, som f.eks. European Symposium on Algorithm i München september At tage med til konferencen kan også hjælpe mig med at komme videre i projektet ved at få en generelt bedre forståelse for algoritmers opbygning og forbedring af min egen. Forskerspireprisen ville kunne finansiere dette. 9

12 Omkostning Deltagergebyr (studerende 200 EUR) Fly til München Hotel Mad og drikke Ialt Pris kr kr kr kr kr. Tabel 2: Budget 5 Afrunding Gennemførelsen af projektet har givet mig indsigt i problemstillingen Cops and Robbers og en generelt bedre forståelse af grafer. Mine matematiske og datalogiske færdigheder er blevet forbedret ved at arbejde på dette projekt. En del af en problemstillingen er blevet løst, og dette åbner op for muligheden for at arbejde videre med projekt og eventuelt skrive en artikel. Processen har været en spændende introduktion til forskerverdenen og har bekræftet mig i mit valg om at fortsætte i denne retning. 10

13 Litteraturliste Mathias Theodor Jul Overby [1] The complexity of searching a graph, N. Megiddo, S. L. Hakimi, M. R. Garey, D. S. Johnson, C. H. Papadimitriou, Journal of Association for Computing Machinery, Vol. 35, No. 1, January 1988, [2] Reversibility properties of the fire-fighting problem in graphs, Rolf Klein, Elsevier B. V 2017 [3] Offline variants of the lion and man problem, Adrian Dumitrescu, Ichiro Suzuki, Pawel Zyliski, Theoretical Computer Science , [4] Vertex-to-vertex pursuit in a graph, Richard Nowakowski, Peter Winkler, North Holland 1981 [5] How many lions are needed to clear a grid?, Floarian Berger, Alexander Gilbers, Ansgar Grüne, Rolf Klein, Algorithms 2009 [6] Escaping offline seachers and isoperimetric theorems, Peter Brass, Kyue D. Kim, Hyeon-Suk Na, Chan-Su Shin, Elsevier B. V 2008 [7] Computation Geometry Colum 63, Rolf Klein, Elmar Langetepe, Association for Computer Machinery 2016 [8] Introduction to algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, Third Edition, The MIT Press

14 Annex Mathias Theodor Jul Overby Se koden online her: Cops-and-robbers.cpp #include <iostream> #include <typeinfo> #include <string> #include <chrono> #define N 3 #define amountofcops N #include "objects.h" #include "move.h" #include "id.h" #include "previous_ids.h" using namespace std; // Initializing the arrays Fire_obj fire[n][n]; Cop cops[amountofcops]; // Cop cops[amountofcops]; vector<position> previous_positions; // Initial cops is used each time find_new_position is called recursivly (with new initial position) Initial_cop_pos initial_cops[amountofcops]; int primes[n][n]; unsigned long long cop_id; unsigned long long fire_id; bool solutionfound = false; void find_new_position(int i); void print(fire_obj fire[n][n], Cop cops[amountofcops]) { bool cop_pos = false; for (int y=n-1;y>=0;y--) { for (int x=0;x<n;x++) { for (int l=0;l<amountofcops;l++) { if (cops[l].x==x&&cops[l].y==y) { cout << "x" << " "; cop_pos = true; break; 12

15 if (!cop_pos) {cout << fire[x][y].state() << " "; cop_pos=false; cout << endl; cout << endl; void move_and_check() { move(fire, cops, initial_cops); if (!isfire(fire)) {solutionfound=true; print(fire, cops); else { get_id(cops, fire, primes, &cop_id, &fire_id); if (!isseen(previous_positions, cop_id, fire_id)) { find_new_position(0); revert_fire(fire); void find_new_position(int i) { // Sets previous_cops if (!i) { copy_to(cops, initial_cops); // NORTH if (!solutionfound) { if (cops[i].y+1<n) { cops[i].y += 1; if (i+1==amountofcops) { move_and_check(); else {find_new_position(i+1); cops[i].y -= 1; 13

16 // South if (!solutionfound) { if (cops[i].y-1>=0) { cops[i].y -= 1; if (i+1==amountofcops) { move_and_check(); else {find_new_position(i+1); cops[i].y += 1; // EAST if (!solutionfound) { if (cops[i].x+1<n) { cops[i].x += 1; if (i+1==amountofcops) { move_and_check(); else {find_new_position(i+1); cops[i].x -= 1; // WEST if (!solutionfound) { if (cops[i].x-1>=0) { cops[i].x -= 1; if (i+1==amountofcops) { move_and_check(); else {find_new_position(i+1); cops[i].x += 1; // STAY if (!solutionfound) { if (i+1==amountofcops) { move_and_check(); else {find_new_position(i+1); 14

17 if (!i) { for (int k=0;k<amountofcops;k++) {initial_cops[k].revert_coor(); if (solutionfound &&!i) {print(fire, cops); int main() { auto start = std::chrono::high_resolution_clock::now(); set_cops_coordinates(cops); copy_to(cops, initial_cops); fill_initial_fire_array(fire, cops); fill_primes(primes); get_id(cops, fire, primes, &cop_id, &fire_id); isseen(previous_positions, cop_id, fire_id); find_new_position(0); if (!solutionfound) {cout << "No solution found!" << endl; else {cout << "Solution found!" << endl; auto finish = std::chrono::high_resolution_clock::now(); std::chrono::duration<double> elapsed = finish - start; std::cout << "Elapsed time: " << elapsed.count() << " s\n"; return 0; objects.h #ifndef OBJECTS_H #define OBJECTS_H #include <stack> #include <vector> using namespace std; class Fire_obj { stack<bool> stack; bool is_new; public: 15

18 void set_state(bool i) {stack.push(i); void revert_state() {stack.pop(); bool state() {return stack.top(); void set_is_new(bool i) {is_new=i; bool get_is_new() {return is_new; ; class Cop { public: int x, y; ; Mathias Theodor Jul Overby class Initial_cop_pos { stack<int> x; stack<int> y; public: void append_coor(int _x, int _y) {x.push(_x);y.push(_y); int get_x() {return x.top(); int get_y() {return y.top(); void revert_coor() {x.pop(); y.pop(); ; class Position { public: int cop_id; vector<int> fire_ids; Position(int cop_id_num) : cop_id(cop_id_num) { void append_fire_id(int x) {fire_ids.push_back(x); ; #endif move.h #ifndef FUNCTIONS_H #define FUNCTIONS_H #include <iostream> #include "objects.h" 16

19 void estinguish_fire(fire_obj fire[n][n], Cop cops[amountofcops]) { // Sets the places with cops to false for (int i=0; i<amountofcops; i++) { fire[cops[i].x][cops[i].y].revert_state(); fire[cops[i].x][cops[i].y].set_state(false); void fill_initial_fire_array(fire_obj fire[n][n], Cop cops[amountofcops]) { // Sets first item in fire array to true for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { fire[i][j].set_state(true); estinguish_fire(fire, cops); void set_cops_coordinates(cop cops[amountofcops]) { for (int i=0; i<amountofcops; i++) { cops[i].x = i; cops[i].y = 0; bool illegal_move(cop cops[amountofcops], Initial_cop_pos initial_cops[amountofcops], int i, int j, int fire_i, int fire_j) { for (int h=0;h<amountofcops;h++) { if (initial_cops[h].get_x()==i && initial_cops[h].get_y()==j && cops[h].x==fire_i && cops[h].y==fire_j) {return true; return false; void copy_to(cop cops[amountofcops], Initial_cop_pos 17

20 initial_cops[amountofcops]) { for (int i=0;i<amountofcops;i++) { initial_cops[i].append_coor(cops[i].x, cops[i].y); void revert_fire(fire_obj fire[n][n]) { for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { fire[i][j].revert_state(); void move(fire_obj fire[n][n], Cop cops[amountofcops], Initial_cop_pos initial_cops[amountofcops]) { for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { if (fire[i][j].state()) {fire[i][j].set_state(true); else if ( (i+1<n && fire[i+1][j].state() &&!fire[i+1][j].get_is_new() &&!illegal_move(cops, initial_cops, i, j, i+1, j)) (i-1>=0 && fire[i-1][j].state() &&!fire[i-1][j].get_is_new() &&!illegal_move(cops, initial_cops, i, j, i-1, j)) (j+1<n && fire[i][j+1].state() &&!fire[i][j+1].get_is_new() &&!illegal_move(cops, initial_cops, i, j, i, j+1)) (j-1>=0 && fire[i][j-1].state() &&!fire[i][j-1].get_is_new() &&!illegal_move(cops, initial_cops, i, j, i, j-1))) { fire[i][j].set_state(true); fire[i][j].set_is_new(true); else {fire[i][j].set_state(false); for (int i=0;i<n;i++) {for (int j=0;j<n;j++) 18

21 {fire[i][j].set_is_new(false); estinguish_fire(fire, cops); #endif id.h #ifndef ID #define ID #include <iostream> #include <cmath> #include "objects.h" using namespace std; bool isfire(fire_obj fire[n][n]) { for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { if (fire[i][j].state()) {return true; return false; void fill_primes(int primes[n][n]) { int i = 0; int j = 0; int l = 2; bool isprime; while (i<n && j<n) { isprime = true; for (int k=2;k<=((int) sqrt(l))+1;k++) { if (l%k==0 &&!(l==k)) {isprime=false; break; if (isprime) { primes[i][j] = l; if (j==n-1) {i++;j=0; else {j++; l++; 19

22 void rotate90(int* x, int* y) { // Counter-clockwise float _x = *x; float _y = *y; float middle = float (N-1)/2; _x -= middle; _y -= middle; // y' = y*cos(a) + x*sin(a), x' = - y*sin(a) + x*cos(a) float old_x = _x; _x = -_y; _y = old_x; _x += middle; _y += middle; *x = _x; *y = _y; void mirror(int* x) { *x = N *x; void get_id(cop cops[amountofcops], Fire_obj fire[n][n], int primes[n][n], unsigned long long* cop_id, unsigned long long* fire_id) { // COPS unsigned long long id_num = 1; unsigned long long temp_id_num = 1; int rotations = 0; bool mirrorfire = false; // Initial position of the cops for (int i=0;i<amountofcops;i++) {id_num *= primes[cops[i].x][cops[i].y]; // Rotations for (int i=0, j=0;j<(amountofcops)*3;j++) { 20

23 i = j % (amountofcops); rotate90(&cops[i].x, &cops[i].y); temp_id_num *= primes[cops[i].x][cops[i].y]; // If there are no more cops if (i == amountofcops-1) { if (temp_id_num < id_num) {id_num = temp_id_num;rotations=ceil(j/((int) amountofcops))+1;mirrorfire=false; temp_id_num = 1; // Turn it back to initial position for (int i=0;i<amountofcops;i++) { rotate90(&cops[i].x, &cops[i].y); // Mirroring for (int i=0;i<amountofcops;i++) { mirror(&cops[i].x); temp_id_num *= primes[cops[i].x][cops[i].y]; temp_id_num = 1; // Rotations (after mirroring) for (int i=0, j=0;j<(amountofcops)*3;j++) { i = j % (amountofcops); rotate90(&cops[i].x, &cops[i].y); temp_id_num *= primes[cops[i].x][cops[i].y]; // If there are no more cops, check if the prime is less than the current and reset temp id num if (i == amountofcops-1) { if (temp_id_num < id_num) {id_num = temp_id_num;rotations=ceil(j/((int) amountofcops))+1;mirrorfire=true; temp_id_num = 1; // Turn it back to initial position 21

24 for (int i=0;i<amountofcops;i++) { rotate90(&cops[i].x, &cops[i].y); for (int i=0;i<amountofcops;i++) {mirror(&cops[i].x); *cop_id = id_num; // FIRE id_num = 1; for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { // Rotate i and j int _i = i; int _j = j; if (mirrorfire) {mirror(&_i); for (int l=0;l<rotations;l++) {rotate90(&_i, &_j); if (fire[i][j].state()) { id_num *= primes[(int) _i][(int)_j]; *fire_id = id_num; #endif previous_ids.h #ifndef PRE_ID #define PRE_ID #include <iostream> #include "objects.h" using namespace std; bool isseen(vector<position>& previous_positions, int cop_id, int fire_id) { for (auto position = previous_positions.begin(); position!= previous_positions.end(); position++) { if (position->cop_id == cop_id) { for (auto pre_fire_id = position->fire_ids.begin(); pre_fire_id!= position->fire_ids.end(); pre_fire_id++) { 22

25 if (*pre_fire_id == fire_id) { return true; position->append_fire_id(fire_id); return false; Position a(cop_id); a.append_fire_id(fire_id); previous_positions.push_back(a); return false; #endif Mathias Theodor Jul Overby 23

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

Kursusarbejde 2 Grundlæggende Programmering

Kursusarbejde 2 Grundlæggende Programmering Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc...................................................

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Har en hvis lighed med divide-and-conquer: Begge opbygger løsninger til større problemer

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Tirsdag den 27. maj 2003, kl. 9.00 3.00 Opgave (25%) For konstanten π = 3.4592... gælder identiteten π 2 6 =

Læs mere

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Optimeringsproblem: man ønsker at finde bedste den kombinatoriske struktur (struktur opbygget af et endeligt antal enkeltdele) blandt mange mulige. Eksempler:

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Mandag den 27. maj 2002, kl. 9.00 13.00 Opgave 1 (25%) Denne opgave handler om multiplikation af positive heltal.

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 15. marts, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Optimeringsproblem: man ønsker at finde bedste den kombinatoriske struktur blandt mange mulige. Dynamisk programmering Optimeringsproblem: man ønsker at finde

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Onsdag den. august 200, kl. 9.00.00 Opgave (25%) Lad A = A[] A[n] være et array af heltal. Længden af det længste

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af MySQL i C++ Denne artikel bygger ovenpå artiklen "MySQL C API" og forklarer hvordan man kan programmere mere objekt orienteret. Den forudsætter

Læs mere

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Institut for Matematik og Datalogi Syddansk Universitet, Odense Tirsdag den 24. juni 2014, kl. 10:00 14:00 Besvarelsen skal afleveres elektronisk. Se

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, 300473-2919 klasse dm032-1a

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, 300473-2919 klasse dm032-1a Kursusarbejde 1 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 3. oktober 2003 Kode //File Name: kaalhovede.cc //Author: Arne Jørgensen //Email Address: arne@arnested.dk, arnjor@niels.brock.dk

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer Vægtning

Læs mere

Rekursion C#-version

Rekursion C#-version Note til Programmeringsteknologi Akademiuddannn i Informationsteknologi Rekursion C#-version Finn Nordbjerg 1 Rekursion Rekursionsbegrebet bygger på, at man beskriver noget ved "sig selv". Fx. kan tallet

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer Kursus nr. 06. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer Vægtning

Læs mere

Symmetrisk Traveling Salesman Problemet

Symmetrisk Traveling Salesman Problemet Symmetrisk Traveling Salesman Problemet Videregående Algoritmik, Blok 2 2008/2009, Projektopgave 2 Bjørn Petersen 9. december 2008 Dette er den anden af to projektopgaver på kurset Videregående Algoritmik,

Læs mere

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Institut for Matematik og Datalogi Syddansk Universitet, Odense Mandag den 6. juni 2016, kl. 15:00 19:00 Besvarelsen skal afleveres elektronisk. Se

Læs mere

Udtømmende søgning 1

Udtømmende søgning 1 Udtømmende søgning Udtømmende søgning (kombinatorisk søgning) Systematisk gennemsøgning af alle potentielle løsninger Den rejsende sælgers problem (TSP): En sælger skal besøge N byer Find den korteste

Læs mere

Løsning af skyline-problemet

Løsning af skyline-problemet Løsning af skyline-problemet Keld Helsgaun RUC, oktober 1999 Efter at have overvejet problemet en stund er min første indskydelse, at jeg kan opnå en løsning ved at tilføje en bygning til den aktuelle

Læs mere

Kursusarbejde 4 Grundlæggende Programmering

Kursusarbejde 4 Grundlæggende Programmering Kursusarbejde 4 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 19. december 2003 Indhold 1. Kode 2 1.1. Header-filer................................................. 2 1.1.1. Queue.h...............................................

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Programmering C Eksamensprojekt Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Indledning Analyse Læring er en svær størrelse. Der er hele tiden fokus fra politikerne på, hvordan de danske skoleelever kan

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste Denne guide er oprindeligt udgivet på Eksperten.dk Indkøbsvogn i PHP I denne artikel vil jeg prøve at lave en indkøbskurv som let kan udvides, og som ikke er svær at forstå. Det er bedst med viden om OOP(klasser),

Læs mere

Michael Jokil 11-05-2012

Michael Jokil 11-05-2012 HTX, RTG Det skrå kast Informationsteknologi B Michael Jokil 11-05-2012 Indholdsfortegnelse Indledning... 3 Teori... 3 Kravspecifikationer... 4 Design... 4 Funktionalitet... 4 Brugerflade... 4 Implementering...

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 2 14. september 2009 Kontrolstrukturer Udvælgelse Gentagelse Eksempler Kommentarer Format - scanf og printf 2 / 27 Fra sidst 1 Kontrolstrukturer 2 Udvælgelse 3 Gentagelse 4 Eksempler

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer Kursus nr. 06. Tilladte hjælpemidler: Alle hjælpemidler. Vægtning af opgaverne: Opgave

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

Programmering i C. Lektion november 2008

Programmering i C. Lektion november 2008 Programmering i C Lektion 3 18. november 2008 Kontrolstrukturer Udvælgelse Gentagelse Eksempler Fra sidst 1 Kontrolstrukturer 2 Udvælgelse 3 Gentagelse 4 Eksempler Kontrolstrukturer Udvælgelse Gentagelse

Læs mere

DRONNINGER (QUEENS) Opgave 1

DRONNINGER (QUEENS) Opgave 1 DRONNINGER (QUEENS) I denne opgave vil vi beskæftige os med det såkaldte 8-dronningeproblem, hvor man skal placerede 8 dronninger på et 8 x 8 skakbræt, således at ingen af dronningerne kan slå hinanden.

Læs mere

Vejledende løsninger

Vejledende løsninger Roskilde Universitetscenter side 1 af 8 sider Vejledende løsninger Opgave 1 Spørgsmål 1.1 a = b - a; b = b - a; a = b + a; Opgaven har flere løsninger. En anden løsning er: a = b + a; b = a - b; a = a

Læs mere

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen Studiepraktik Thomas Bøgholm boegholm@cs.aau.dk Mikkel Hansen mhan@cs.aau.dk Jacob Elefsen jelefs12@student.aau.dk 1 Studiepraktik -- program Program onsdag 10.00 10.15 Registrering af fremmøde og gennemgang

Læs mere

ESLC prøveredskaber: Vejledning for elever (DK)

ESLC prøveredskaber: Vejledning for elever (DK) ESLC prøveredskaber: Vejledning for elever (DK) Indholdsfortegnelse 1 INDLEDNING 3 2 PRØVERNE 3 2.1 Log in 3 2.2 Lydtjek til lytteprøven 5 2.3 Under prøven 5 3 Prøvens opgaver 7 3.1 Lytteopgaver 7 3.2

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507) Skriftlig Eksamen Algoritmer og Datastrukturer (DM507) Institut for Matematik og Datalogi Syddansk Universitet, Odense Onsdag den 0. juni 009, kl. 9 Alle sædvanlige hjælpemidler (lærebøger, notater, osv.)

Læs mere

DATALOGISK INSTITUT, AARHUS UNIVERSITET

DATALOGISK INSTITUT, AARHUS UNIVERSITET DATALOGISK INSTITUT, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Antal sider i opgavesættet (incl. forsiden): 6 (seks) Eksamensdag: Fredag den 25. juni 200, kl. 9.00-.00

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

Læs mere

Klasse 1.4 Michael Jokil 03-05-2010

Klasse 1.4 Michael Jokil 03-05-2010 HTX I ROSKILDE Afsluttende opgave Kommunikation og IT Klasse 1.4 Michael Jokil 03-05-2010 Indholdsfortegnelse Indledning... 3 Formål... 3 Planlægning... 4 Kommunikationsplan... 4 Kanylemodellen... 4 Teknisk

Læs mere

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET INSTITUT FOR ATALOGI, AARHUS UNIVERSITET Science and Technology EKSAMEN Algoritmer og atastrukturer (00-ordning) Antal sider i opgavesættet (incl. forsiden): (elleve) Eksamensdag: Fredag den. august 0,

Læs mere

DATALOGISK INSTITUT, AARHUS UNIVERSITET

DATALOGISK INSTITUT, AARHUS UNIVERSITET DATALOGISK INSTITUT, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Antal sider i opgavesættet (incl. forsiden): 6 (seks) Eksamensdag: Onsdag den 11. august 2004, kl.

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Alle skriftlige hjælpemidler. Vægtning af opgaverne:

Læs mere

Tredjepart webservices

Tredjepart webservices Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output

Læs mere

Orienterede grafer. Introduktion Repræsentation Søgning Topologisk sortering og DAGs Stærke sammenhængskomponenter Implicitte grafer.

Orienterede grafer. Introduktion Repræsentation Søgning Topologisk sortering og DAGs Stærke sammenhængskomponenter Implicitte grafer. Orienterede grafer Introduktion Repræsentation Søgning Topologisk sortering og DAGs Stærke sammenhængskomponenter Implicitte grafer Philip Bille Orienterede grafer Introduktion Repræsentation Søgning Topologisk

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Introduktion til kurset Rolf Fagerberg Forår 2019 1 / 20 Hvem er vi? Underviser: Rolf Fagerberg, Institut for Matematik og Datalogi (IMADA) Forskningsområde: algoritmer

Læs mere

Introduktion til DM507

Introduktion til DM507 Introduktion til DM507 Rolf Fagerberg Forår 2017 1 / 20 Hvem er vi? Underviser: Rolf Fagerberg, IMADA Forskningsområde: algoritmer og datastrukturer 2 / 20 Hvem er vi? Underviser: Rolf Fagerberg, IMADA

Læs mere

Matematikken i kunstig intelligens Opgaver om koordinerende robotter

Matematikken i kunstig intelligens Opgaver om koordinerende robotter Matematikken i kunstig intelligens Opgaver om koordinerende robotter Thomas Bolander 2. juni 2018 Vejledning til opgaver Opgave 1 kan eventuelt springes over, hvis man har mindre tid. De resterende opgaver

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

DDD Runde 2, 2015 Facitliste

DDD Runde 2, 2015 Facitliste DDD Runde 2, 2015 Facitliste Søren Dahlgaard og Mathias Bæk Tejs Knudsen Opgaver og løsninger til 2. runde af DDD 2015. 1 4. 19. februar, 2015 linetest DK v1.0 Line Test Sigurd er begyndt i gymnasiet og

Læs mere

Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER

Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER Thomas Bolander 25. april 2018 Vejledning til opgaver Opgave 1 kan eventuelt springes over, hvis man har mindre tid. De resterende

Læs mere

Linguistic support for unit testing

Linguistic support for unit testing Linguistic support for unit testing Af K. E. Gray & M. Felleisen Mads Bach-Sørensen mbs@cs.aau.dk 1. november 2007 1 Indhold Forfatterne TestJava Traditionel Unit-testing Sproglige Konstruktioner i TestJava

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af 3 sider anmarks Tekniske Universitet Skriftlig prøve, den 29. maj 203. ursusnavn: lgoritmer og datastrukturer ursus nr. 02326. jælpemidler: Skriftlige hjælpemidler. et er ikke tilladt at medbringe

Læs mere

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Philip Bille Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Algoritmer

Læs mere

Netværksalgoritmer 1

Netværksalgoritmer 1 Netværksalgoritmer 1 Netværksalgoritmer Netværksalgoritmer er algoritmer, der udføres på et netværk af computere Deres udførelse er distribueret Omfatter algoritmer for, hvorledes routere sender pakker

Læs mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

Brugen af RiBAY er typisk en iterativ proces, hvor trin 4-6 gentages et antal gange for at kortlægge og forstå risiko.

Brugen af RiBAY er typisk en iterativ proces, hvor trin 4-6 gentages et antal gange for at kortlægge og forstå risiko. Kom godt i gang med RiBAY Risikostyring ved hjælp af RiBAY består af følgende seks trin: 1. Indtastning af systemvariable og budgettal 2. Indtastning af Køb og salg 3. Kalibrering af udgangspunktet for

Læs mere

Orienterede grafer. Orienterede grafer. Orienterede grafer. Vejnetværk

Orienterede grafer. Orienterede grafer. Orienterede grafer. Vejnetværk Philip Bille Orienteret graf (directed graph). Mængde af knuder forbundet parvis med orienterede kanter. Vejnetværk Knude = vejkryds, kant = ensrettet vej. deg + (6) =, deg - (6) = sti fra til 6 8 7 9

Læs mere

Rolf Fagerberg. Forår 2013

Rolf Fagerberg. Forår 2013 Forår 2013 Mål for i dag Dagens program: 1 2 3 4 5 6 Forudsætninger: DM536 og DM537 Timer: 50% forelæsninger, 50% øvelser Forudsætninger: DM536 og DM537 Eksamenform: Skriftlig eksamen: Timer: 50% forelæsninger,

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Et SML-program til at finde rødder i en kontinuert funktion

Et SML-program til at finde rødder i en kontinuert funktion Et SML-program til at finde rødder i en kontinuert funktion Hans Hüttel Ole Høgh Jensen 11 januar 2002 Indhold 1 Om denne tekst 1 2 Hvad er bisektion? 1 3 Specifikation af vores program 2 4 SML-versionen

Læs mere

DATALOGISK INSTITUT, AARHUS UNIVERSITET

DATALOGISK INSTITUT, AARHUS UNIVERSITET DATALOGISK INSTITUT, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Antal sider i opgavesættet (incl. forsiden): 6 (seks) Eksamensdag: Fredag den 24. juni 2011, kl.

Læs mere

Intervalsøgning. Algoritmisk geometri. Motivation for intervaltræer. Intervalsøgning. Lad der være givet en database over ansatte i en virksomhed

Intervalsøgning. Algoritmisk geometri. Motivation for intervaltræer. Intervalsøgning. Lad der være givet en database over ansatte i en virksomhed Algoritmisk geometri Intervalsøgning 1 2 Motivation for intervaltræer Intervalsøgning Lad der være givet en database over ansatte i en virksomhed Ansat Alder Løn Ansættelsesdato post i databasen Vi kan

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%

Læs mere

Algoritmisk geometri

Algoritmisk geometri Algoritmisk geometri 1 Intervalsøgning 2 Motivation for intervaltræer Lad der være givet en database over ansatte i en virksomhed Ansat Alder Løn Ansættelsesdato post i databasen Antag, at vi ønsker at

Læs mere

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi DATALOGISK INSTITUT, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Antal sider i opgavesættet (incl. forsiden): 1 (tretten) Eksamensdag: Tirsdag den 8. april 2008,

Læs mere

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen Sekvensafstand DM34 - Eksamensopgave Jacob Aae Mikkelsen 19 10 76 kokken@grydeske.dk 27. maj 2005 Resumé Rapporten her beskriver tre forskellige rekursive metoder til at sammenligne tekst strenge med.

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt)

Læs mere

it fagene i de gymnasiale uddannelser

it fagene i de gymnasiale uddannelser it fagene i de gymnasiale uddannelser Machine learning, datamining og big data Benjamin Rotendahl April 17, 2016 1 benjamin rotendahl Hvem er jeg? Datalogistuderende ved Københavns Universitet. Frivillig/studentermedhjælper/bestyrelsesmedlem

Læs mere

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi DATALOGISK INSTITUT, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Antal sider i opgavesættet (incl. forsiden): 1 (tolv) Eksamensdag: Fredag den 7. august 009, kl.

Læs mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering 1 / 36 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 6, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

Rolf Fagerberg. Forår 2015

Rolf Fagerberg. Forår 2015 Forår 2015 Dagens program 1 2 3 4 5 Underviser:, IMADA Forskningsområde: algoritmer og datastrukturer Underviser:, IMADA Forskningsområde: algoritmer og datastrukturer Deltagere: BA i Datalogi BA i Software

Læs mere

Projekt - Visual Basic for Applications N på stribe

Projekt - Visual Basic for Applications N på stribe Projekt - Visual Basic for Applications N på stribe Mikkel Kaas og Troels Henriksen - 03x 3. november 2005 1 Introduktion Spillet tager udgangspunkt i det gamle kendte 4 på stribe, dog med den ændring,

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 29. april, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

DM13-1. Obligatoriske Opgave - Kredsløbs design

DM13-1. Obligatoriske Opgave - Kredsløbs design DM13-1. Obligatoriske Opgave - Kredsløbs design Jacob Christiansen moffe42@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 1. Opgaven Opgaven består i at designe et kredsløb,

Læs mere

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende Changes for Rottedatabasen Web Service The coming version of Rottedatabasen Web Service will have several changes some of them breaking for the exposed methods. These changes and the business logic behind

Læs mere

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B Udarbejdet af: Mathias R W Sørensen, klasse 3.4 Udleveringsdato: 02-03-2012 Afleveringsdato: 11-05-2012 IT-vejleder: Karl G. Bjarnason

Læs mere

Orienterede grafer. Orienterede grafer. Orienterede grafer. Orienterede grafer

Orienterede grafer. Orienterede grafer. Orienterede grafer. Orienterede grafer Philip Bille Orienteret graf. Mængde af knuder forbundet parvis med orienterede kanter. deg + (7) =, deg - (7) = Lemma. v V deg - (v) = v V deg + (v) = m. Bevis. Hver kant har netop en startknude og slutknude.

Læs mere

Geometrisk skæring. Afgørelse af om der findes skæringer blandt geometriske objekter Bestemmelse af alle skæringspunkter

Geometrisk skæring. Afgørelse af om der findes skæringer blandt geometriske objekter Bestemmelse af alle skæringspunkter Planfejning 1 Skæring 2 Geometrisk skæring Afgørelse af om der findes skæringer blandt geometriske objekter Bestemmelse af alle skæringspunkter Løsningsmetoder: Rå kraft Planfejning (eng. plane sweep)

Læs mere

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel: Denne guide er oprindeligt udgivet på Eksperten.dk SQL og ASP En artikel omkring simpel SQL og hvordan disse opbygges, udformes og udføres, sådan at man kan få et brugbart resultat i ASP. Dette ligefra

Læs mere

Programmering i C. Lektion 4. 5. december 2008

Programmering i C. Lektion 4. 5. december 2008 Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )

Læs mere

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal Philip Bille Algoritmer og datastrukturer Algoritmisk problem. Præcist defineret relation mellem input og output. Algoritme. Metode til at løse et algoritmisk problem. Beskrevet i diskrete og entydige

Læs mere

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion Philip Bille Introduktion (MST). Udspændende træ af minimal samlet vægt. Introduktion (MST). Udspændende træ af minimal samlet vægt. 0 0 Graf G Ikke sammenhængende Introduktion (MST). Udspændende træ af

Læs mere

Breaking Industrial Ciphers at a Whim MATE SOOS PRESENTATION AT HES 11

Breaking Industrial Ciphers at a Whim MATE SOOS PRESENTATION AT HES 11 Breaking Industrial Ciphers at a Whim MATE SOOS PRESENTATION AT HES 11 Story line 1 HiTag2: reverse-engineered proprietary cipher 2 Analytic tools are needed to investigate them 3 CryptoMiniSat: free software

Læs mere

Over Forelæsning omponenter ogrammering sigt 14, 1999 freda containere 15. oktober 1999 Eksempel: out GUI til beregning fakultet.

Over Forelæsning omponenter ogrammering sigt 14, 1999 freda containere 15. oktober 1999 Eksempel: out GUI til beregning fakultet. Programmering 1999 Forelæsning 14, fredag 15. oktober 1999 Oversigt Repetition: GUI komponenter og containere. Layout af grafiske brugergrænseflader i Java. Større layout-opgave. Programmering 1999 KVL

Læs mere

Brugermanual til MICRO LOOP

Brugermanual til MICRO LOOP Brugermanual til MICRO LOOP 1 Før test Opstart 1. Tænd for apparatet på on/off knappen nederst til højre. 2. På skærmen vil Main menu fremgå. 3. Nederst i skærmens venstre side vil fremgå et batteri. Ved

Læs mere

Programmering og Problemløsning, 2017

Programmering og Problemløsning, 2017 Programmering og Problemløsning, 2017 Martin Elsman Department of Computer Science University of Copenhagen DIKU September 27, 2017 Martin Elsman (DIKU) Programmering og Problemløsning, 2017 September

Læs mere

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi DATALOGISK INSTITUT, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Antal sider i opgavesættet (incl. forsiden): 12 (tolv) Eksamensdag: Tirsdag den 20. marts 2012, kl.

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af 2 sider Danmarks Tekniske Universitet Skriftlig prøve, den 2. maj 200. Kursusnavn Algoritmer og datastrukturer I Kursus nr. 0205. Tilladte hjælpemidler: Alle skriftlige hjælpemidler. Vægtning af

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af 2 sider Danmarks Tekniske Universitet Skriftlig prøve, den 2. maj 200. Kursusnavn Algoritmer og datastrukturer Kursus nr. 02326. Tilladte hjælpemidler: Alle hjælpemidler. Vægtning af opgaverne:

Læs mere

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi DATALOGISK INSTITUT, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Antal sider i opgavesættet (incl. forsiden): 12 (tolv) Eksamensdag: Onsdag den 31. marts 2010, kl.

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af 2 sider Danmarks Tekniske Universitet Skriftlig prøve, den 26. maj 2009. Kursusnavn Algoritmik og datastrukturer I Kursus nr. 0205. Tilladte hjælpemidler: Alle skriftlige hjælpemidler. Vægtning

Læs mere

Arduinostyret klimaanlæg Afsluttende projekt programmering C

Arduinostyret klimaanlæg Afsluttende projekt programmering C Arduinostyret klimaanlæg Afsluttende projekt programmering C Udarbejdet af: Mathias R W Sørensen, klasse 3.4 Udleverings-dato: 02-03-2012 Afleverings-dato: 11-05-2012 Programmeringvejleder: Karl G. Bjarnason

Læs mere

Mircobit Kursus Lektion 3 (Du skal her vælge Lets Code Og nederst Microsoft Block Editor.)

Mircobit Kursus Lektion 3   (Du skal her vælge Lets Code Og nederst Microsoft Block Editor.) Mircobit Kursus Lektion 3 http://microbit.org/ (Du skal her vælge Lets Code Og nederst Microsoft Block Editor.) I sidste lektion var der en opgave man selv skulle prøve at løse. Man skulle lave et tabel

Læs mere

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

Mindste udspændende træ

Mindste udspændende træ Mindste udspændende træ Introduktion Repræsentation af vægtede grafer Egenskaber for mindste udspændende træer Prims algoritme Kruskals algoritme Philip Bille Mindste udspændende træ Introduktion Repræsentation

Læs mere