Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

Størrelse: px
Starte visningen fra side:

Download "Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen"

Transkript

1 Sekvensafstand DM34 - Eksamensopgave Jacob Aae Mikkelsen kokken@grydeske.dk 27. maj 2005

2 Resumé Rapporten her beskriver tre forskellige rekursive metoder til at sammenligne tekst strenge med. De forskellige metoder er meget forskellige i køretid og effektivitet, dette er testet og beskrevet.

3 Indhold 1 Indledning 2 2 Kravspecifikation 3 3 Design Udviklingstrategi Den naive algoritme De effektive algoritmer Implementation Main klassen SequenceTools klassen Afprøvning Korrekthed Effektivitet Konklusion 11 A Kilde kode 13 A.1 Main.java A.2 SequenceTools.java A.3 SequenceTools1Test.java A.4 SequenceTools2Test.java A.5 SequenceTools3Test.java A.6 StringGenerater.java B Test udskrifter 26 B.1 Naive algoritme B.2 Algoritme med HashMap B.3 Algoritme med dobbelt array C Test skemaer 29 1

4 Kapitel 1 Indledning Denne rapport beskriver udviklingsforløbet af metoder til at sammenligne tekststrenge. Den omhandler specifikation, design, implementering og testning af metoderne og programmet. Her ses forskellen på tekststrenge i hvor mange basale funktioner der skal til for at de to strenge bliver ens. Opgaven fungerer som eksamensopgave i faget DM34 - Problemløsning med JAVA, i forårs semestret 2005 på Syddansk Universitet i Odense. Rapporten beskriver tre forskellige rekursive algoritmer, der veksler i effektivitet og køretid, om den samme opgave. Kravene til opgavens løsning er beskrevet, ligesom de design overvejelser der er foretaget. Selve algoritmerne er beskrevet, også deres implementation i JAVA. Der er for at teste dem lavet skemaer til alle tre metoder, og disse er ført ud i praksis ved at bruge J-unit test. Metoderne er testet og på trods af forskelle i køretid, giver de alle det rigtige resultat. 2

5 Kapitel 2 Kravspecifikation Opgaven består i at undersøge om hvor meget der adskiller to tekststrenge. Der er defineret et afstandsmål, som det mindste antal basale operationer der skal til for at gøre de to strenge ens. En basal operation er her defineret til at kunne indsætte et tegn, som matcher hvilket som helst bogstav i sekvensen, altså et wild card. En basal funktion kan altså ikke ændre et tegn, men i stedet skal indsættes ét tegn for den ene, og ét tegn for den anden. Der benytters dermed to basale operationer til at ændre ét tegn. Opgaven er at skrive to rekursive funktioner, der udregner denne afstand mellem strenge. Den første (dist1) skal være naiv, og udregne afstanden brute force altså ved at løbe alle muligheder igennem. Den anden (dist2) skal for hvert underresultat gemme dette i en mapping, hvorved der spares mange beregninger. Der skal endvidere observere eksekveringstiden for de to funktioner. Afstandsfunktionerne skal ligge i én klasse, og hovedprogrammet ligge i en anden. Endvidere skal programmet testes for både korrekthed og effektivitet. 3

6 Kapitel 3 Design 3.1 Udviklingstrategi Programmets ringe størrelse taget i betragtning, er vandfaldsmodellen brugt som udviklingsstrategi. Der er dog i testfasen taget højde for programmeringsfejl, da J-unit er benyttet, for at hurtigt kunne køre testskemaerne igennem igen, i tilfælde af programfejl. 3.2 Den naive algoritme Den første naive funktion er lige ud af landevejen, efter vdm-beskrivelsen. Den anden kan implementeres med et HashMap eller et dobbeltarray. Der er her valgt at implementere begge løsninger, for at kunne sammenligne hvilken der er bedst. For at kunne initialisere henholdsvis HashMap et og dobbelt array et, deles dist2 og dist3 op med hver deres undermetode, hvor det så kun er undermetoden der kaldes rekursivt. En naiv rekursiv funktion, til at klare problemet, vil i pseudokode se således ud, oversat fra VDM-beskrivelsen: dist1(in1, in2) if(længden af in1 eller in2 er 0) return længden af den anden elseif(det første bogstav i begge strenge er ens) return (dist(in1 uden første bogstav, in2 uden første bogstav) else return 1 + den mindste af ( dist(in1 uden første bogstav, in2), dist(in1,in2 uden første bogstav)) Funktionen kalder sig selv, indtil længden af en af strengene er nul. Der opsummeres så gennem alle de kaldte funktioner, fra at den første af strengene nåede længden nul, startende med længden af den anden streng. De gange der har været ens bogstaver, har funktionen bare kaldt sig selv, med resten af strengene uden at lægge én til. Alle de kald, der er gjort, hvor de første bogstaver 4

7 3.3. DE EFFEKTIVE ALGORITMER har været forskellige, opsummeres med én i den sidste linie, når algoritmen har afgjort hvilken en af strengene der har haft den mindste forskel, når det ene af de to første bogstaver er fjernet. Da der i den sidste linie hele tiden eftersøges den korteste afstand, vil algoritmen til sidst finde den mindste forskel mellem de to strenge. Worst case kan her ses at det må være når strengene er helt forskellige, og lige lange, idet funktionen ellers hurtigt ville nå enden af den korteste streng, og returnere længden af den anden. I dette tilfælde, kører algoritmen alle kombinationerne igennem, og for hver ekstra karakter, bliver der så 2 n flere muligheder, for strenge af en længde på n, vil køretiden være O(4 n ), den samlede længde udvides jo med en faktor 2 også. 3.3 De effektive algoritmer Problemet med den naive algoritme, er at den lave mange kald med det samme argument, når den har fjernet lige mange bogstaver fra hvert ord, vil der komme gentagelser, se blot på figuren med strenge af længden to hver, opstår der to sammenligninger med X og Y. Figur 3.1: Sammenligning af to tekststrenge, hver med længden 2 For at undgå dette ekstra arbejde, indføres en mapping. Det kan gøres i JAVA ved at benytte klassen HashMap, og gemme de to strenge med et symbol der ikke ellers bruges imellem, eller ved at oprette et dobbelt array, og her søge i array et efter hvor langt man er kommet til i strengen. I dist2 funktionen, der laves med et HashMap, bruges tegnet & imellem strengene, når det gemmes som nøgle. Dette må således ikke indgå i de strenge der sammenlignes, men hvis vi tænker på strengene som fx. gensekvenser, er dette ikke et problem. Vi indsætter værdier i HashMappet alle steder, hvor de udregnes, hvilket reducerer køretiden til at være lineær afhængig af strengenes længde. 5

8 3.3. DE EFFEKTIVE ALGORITMER dist3 funktionen, der ligesom dist2 gemmer tidligere resultater, benytter et dobbeltarray, hvor den første parameter angiver ved hvilket bogstav man er i den første streng, den anden parameter hvilket bogstav man er ved i den anden streng, og værdien gemt, er så forskellen mellem strengene. i pseudokode ser dist2 og dist3 således ud: dist(in1, in2) if(længden af in1 eller in2 er 0) return længden af den anden elseif(det første bogstav i begge strenge er ens) gem (dist(in1 uden første bogstav, in2 uden første bogstav) return (dist(in1 uden første bogstav, in2 uden første bogstav) else gem dist(in1 uden første bogstav, in2) gem dist(in1,in2 uden første bogstav) return 1 + den mindste af ( dist(in1 uden første bogstav, in2), dist(in1,in2 uden første bogstav)) I denne algoritme spares alle kald, der tidligere er udregnet, og får køretiden ned til lineær afhængig af strengenes længde. Ellers er algoritmens opbygning helt parallel med den naive, der lige er beskrevet. Der er i opgaven ikke stillet krav til hovedklassen i programmet, derfor indsættes den blot med et kald til hver funktion med de faste værdier hundeejer og hakkejern, som i opgaven er oplyst til at have forskellen 8, samt en simpel udregning af køretiden på hver af funktionerne. 6

9 Kapitel 4 Implementation 4.1 Main klassen Der er i opgaven ikke stillet krav til denneklasse, andet end at den skal eksistere. Den er derfor implementeret, ved at oprette et objekt af sig selv, der så opretter et SequenceTools objekt. På dette objekt kaldes så de tre metoder dist1, dist2 og dist3 med de to strenge hundeejer og hakkejern. 4.2 SequenceTools klassen Det er i denne klasse de tre rekursive algoritmer, beskrevet i design afsnittet, er implementeret dist1 Den første funktion, dist1, er naiv, og benytter en brute force metode, med at checke alle de mulige veje, ubetinget af at det samme underresultat er beregnet en gang. Den er til gengæld implementeret lige efter pseudokoden, og er i denne sammenhæng ikke nødvendig at forklare yderligere dist2 Den vigtigste del af denne metode er selvfølgelig at se om HashMap et allerede indeholder den streng kombination der søges efter. Hvis den gør, returneres her den værdi der er gemt for den, ellers fortsættes der. if(inputs.containskey(input1+"&"+input2)) { return ((Integer)inputs.get(input1+"&"+input2)).intValue(); I den næste del af koden, gemmes resultatet af søgningen, for hver gang der opnåes et mellemresultat, for på den måde at optimere algoritmen. Herved udelukkes at der skal søges efter den samme kombination af strenge gang på gang. 7

10 4.2. SEQUENCETOOLS KLASSEN if(input1.charat(0)==input2.charat(0)) { int mellemresultat = dist2b(input1.substring(1), input2.substring(1)); inputs.put(input1.substring(1)+"&" + input2.substring(1),new Integer(mellemresultat)); return mellemresultat; } else { int mellemresultat1 = dist2b(input1,input2.substring(1)); inputs.put(input1+"&"+input2.substring(1), new Integer(mellemresultat1)); int mellemresultat2 = dist2b(input1.substring(1), input2); inputs.put(input1.substring(1)+"&" + input2,new Integer(mellemresultat2)); if(mellemresultat1 < mellemresultat2) { return 1 + mellemresultat1; } else { return 1 + mellemresultat2; } } Ellers adskiller denne funktion sig ikke nævneværdigt fra dist dist3 Her benyttes at strengene der eftersøges er ens hele vejen igennem, og at man på den måde kan nøjes med at angive hvor langt henne i strengen der søges. Det benyttede dobbeltarray initialiseres først, efter længden af de to strenge plus 1, idet der er en mere position i strengene end der er karakterer. Dernæst fyldes alle pladser op med -1, idet denne værdi ikke vil kunne forekomme i søgningen. Her undersøges så om der er en værdi for de to placeringer, der søges efter i arrayet, altså hvis værdien ikke er -1. if(placeinstring[lengthoffirst - input1.length()] [lengthofsecond - input2.length()]!= -1) { return placeinstring[lengthoffirst - input1.length()] [lengthofsecond - input2.length()]; } Resten af metoden er ganske parallel med dist2(b). 8

11 Kapitel 5 Afprøvning For at teste for korrekthed og effektivitet, er der opsat tre testskemaer, vedlagt som bilag C. Disse skemaer er der så lavet J-unit test over. Hvis der er fejl i funktionerne, er det dermed nemt at teste hele skemaet igen. Der er for at lave de lange tekst strenge der skalbruges, endvidere programmeret en simpel funktion der kan gøre det. 5.1 Korrekthed For at teste korrektheden, er alle tre funktioner testet med de følgende tilfælde: to tomme strenge, forventet resultat: 0 en tom streng og en enkelt karakter, forventet resultat: 1 en tom streng og 100 x er, forventet resultat: 100 to ens strenge hver på længden 10, forventet resultat: 0 hakkejern og hundeejer forventet resultat: 8 Alle tre funktioner bestod disse test, og funktionernes korrekthed forventes at være i orden. 5.2 Effektivitet dist1 Den naive funktion dist1, har køretider under 1 sekund, når man giver dem forskellige strenge op til længden 8 og 9. Ventetiden er acceptabel (40 sekunder) op til længden 10 og 11, og herefter bliver den stort set ubrugelig, rent tidsmæssigt. Til gengæld er der intet problem med hukommelse, da den ikke gemmer data nogen steder. Resultaterne af testen for dist1 er vedlagt i udskrift, se bilag B.1. 9

12 5.2. EFFEKTIVITET dist2 Funktionen med HashMap et giver selvsagt et bedre resultat, og har køretid under et sekundt, op til forskellige strenge af hver længden 100. For strenge af længden, et sted mellem 300 og 350, opstår i midlertid en OutOfMeoryError. Den opstår idet der jo er risiko for at gemme op til n 2 forskellige strenge i Hash- Mappet, og det sluger så hukommelsen, med forbehold for at få andre resultater på andet hardware. Resultaterne af testen for dist2 er vedlagt i udskrift, se bilag B dist3 I funktionen med dobbeltarray et gemmes resultatet, med indeks for hvortil i de oprindelige strenge algoritmen er nået til. Dette optager naturligvis ikke så meget plads, som at gemme delstrenge i et HashMap. Faktisk afsættes der kun hukommelsesplads til array et én gang, det er når det initialiseres. Søgning i arrayet går også hurtigere end i HashMap et, kan vi se ud fra køretiden. I dette tilfælde kan strenge op til længden 1500 tegn, uden problemer håndteres, med køretider i på 1 sekund. Der sker desværre det mellem 1500 og 2000 at der opstår en StackOverflowError. Resultaterne af testen for dist3 er vedlagt i udskrift, se bilag B.3. For alle tre funktioner, opnåes også de forventede resultater for strengenes forskelle på effektivitets testene, op til det tidspunkt hvor der opstår fejl meddelelser. 10

13 Kapitel 6 Konklusion Opgavener løst, ved at implementere to søge funktioner til at afgøre hvor forskellige to tekst strenge er; der er endda implementeret en ekstra. Metoderne er testet og deres mangler og begrænsninger er beskrevet. De anvendte metoder er specificerede og forklarede, også brugen af mapping i de to af dem. De tre metoder er testet og fundet at de returnerer de rigtige værdier i overensstemmelse med det forventede, så deres korrekthed er i orden. Når det kommer til effektivitet adskiller de sig meget fra hinanden, så opgaven er et godt eksempel på optimering af algoritmer. Det er også et eksempel på at der skal arbejdes videre med effektivisering, hvis der skal løses større problemer, som fx. genetiske sekvenser, da disse kan blive længere end den bedste af de i opgaven frembragte algoritmer. Det er nok muligt at frembringe dette ved dynamisk programmering men dette er først pensum for senere kurser end dette. Der kan om programmets kode bemærkes at den opfylder de coding guidelines som M. Kölling beskriver i bogen Objects First with JAVA - A practical introduction using BlueJ. Koden er dermed kommenteret og indrykket, hvilket gør den til at læse og forstå. Det vurderes at opgaven er løst med et tilfredsstillende resultat. 11

14 Litteratur [1] Objects First with JAVA - A practical introduction using BlueJ (2nd Edition), Michael Kölling, David J. Barnes, Pearson Educational Limited

15 Bilag A Kilde kode A.1 Main.java 1 / 2 Primary c l a s s, f o r t h e a p p l i c a t i o n, used to compare 3 two s t r i n g s, f o r t h e number o f simple operations, f o r 4 which t h e y d i f f e r s 5 Jacob Aae Mikkelsen 7 / 8 public class Main { 9 10 SequenceTools t o o l = new SequenceTools ( ) ; 11 / 12 Main method, to s t a r t i t a l l 13 / 14 public s t a t ic void main ( S t r i n g [ ] a r g s ) { 15 Main main = new Main ( ) ; } / 21 C o s t r u c t o r f o r t h i s c l a s s, i n i t i a l i z e s t h e SequenceTools 22 f i e l d, and uses t h e t h r e e methods in t h e o b j e c t 23 / 24 public Main ( ) 25 { 26 S t r i n g f i r s t = " hundeejer " ; 27 S t r i n g second = " hakkejern " ; System. out. p r i n t l n ( " F o r s k e l l e n mellem de to s t r e n g e : " ) ; 31 System. out. p r i n t l n ( f i r s t ) ; 32 System. out. p r i n t l n ( " og " ) ; 33 System. out. p r i n t l n ( second ) ; long s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 13

16 A.2. SEQUENCETOOLS.JAVA 36 System. out. p r i n t l n ( " Afstanden er : " + t o o l. d i s t 3 ( f i r s t, second ) ) ; 37 long endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 38 long usedtime = ( endtime s t a r t t i m e ) /1000; 39 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e m. array : " + usedtime + " s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 42 System. out. p r i n t l n ( " Afstanden er : " + t o o l. d i s t 2 ( f i r s t, second ) ) ; 43 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 44 usedtime = ( endtime s t a r t t i m e ) /1000; 45 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e m. HashMap : " + usedtime + " s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 48 System. out. p r i n t l n ( " Afstanden er : " + t o o l. d i s t 1 ( f i r s t, second ) ) ; 49 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 50 usedtime = ( endtime s t a r t t i m e ) /1000; 51 System. out. p r i n t l n ( " Brugt tid, naive a l g o r i t m e : " + usedtime + " Sekunder " ) ; 52 } 53 } A.2 SequenceTools.java 1 import java. u t i l. HashMap ; 2 3 / 4 A c l a s s c o n t a i n i n g t o o l s used to compare 5 two s t r i n g s Jacob Aae Mikkelsen 7 / 8 public c l a s s SequenceTools { 9 10 HashMap<String, I n t e g e r > i n p u t s ; 11 int [ ] [ ] p l a c e I n S t r i n g ; 12 int l e n g t h O f F i r s t ; 13 int lengthofsecond ; / 16 Constructor f o r t h i s c l a s s / 19 public SequenceTools ( ) 20 { 21 i n p u t s = new HashMap<String, I n t e g e r >() ; 22 } / 25 A naive method used to compare s t r i n g s input1 t h e f i r s t s t r i n g input2 t h e second s t r i n g The number o f o p e r a t i o n s needed to change t h e f i r s t s t r i n g to t h e o t h e r 29 / 14

17 A.2. SEQUENCETOOLS.JAVA 30 public int d i s t 1 ( S t r i n g input1, S t r i n g input2 ) 31 { 32 i f ( input1. l e n g t h ( ) ==0) { 33 return input2. l e n g t h ( ) ; 34 } 35 i f ( input2. l e n g t h ( ) ==0) { 36 return input1. l e n g t h ( ) ; 37 } 38 i f ( input1. charat ( 0 )==input2. charat ( 0 ) ) { 39 return d i s t 1 ( input1. s u b s t r i n g ( 1 ), input2. s u b s t r i n g ( 1 ) ) ; 40 } 41 else { 42 i f ( d i s t 1 ( input1, input2. s u b s t r i n g ( 1 ) ) < d i s t 1 ( input1. s u b s t r i n g ( 1 ), input2 ) ) { 43 return 1 + d i s t 1 ( input1, input2. s u b s t r i n g ( 1 ) ) ; 44 } 45 else { 46 return 1 + d i s t 1 ( input1. s u b s t r i n g ( 1 ), input2 ) ; 47 } 48 } 49 } / 52 A method used to compare s t r i n g s, using a hashmap, to 53 improve t h e performance 54 The s t r i n g s cannot contain t h e & s i g n! input1 t h e f i r s t s t r i n g input2 t h e second s t r i n g The number o f o p e r a t i o n s needed to change t h e f i r s t s t r i n g to t h e o t h e r 58 / 59 public int d i s t 2 ( S t r i n g input1, S t r i n g input2 ) 60 { 61 i n p u t s. c l e a r ( ) ; 62 return d i s t 2 b ( input1, input2 ) ; 63 } / 66 P r i v a t e method only used by d i s t 2, i s c a l l e d r e c u r s i v e l y 67 by i t s e l f, to reach t h e d i s e r e d r e s u l t 68 / 69 private int d i s t 2 b ( S t r i n g input1, S t r i n g input2 ) 70 { 71 i f ( i n p u t s. containskey ( input1+"&"+input2 ) ) { 72 return ( ( I n t e g e r ) i n p u t s. get ( input1+"&"+input2 ) ). intvalue ( ) ; 73 } 74 i f ( input1. l e n g t h ( ) ==0) { 75 return input2. l e n g t h ( ) ; 76 } 77 i f ( input2. l e n g t h ( ) ==0) { 78 return input1. l e n g t h ( ) ; 79 } 80 i f ( input1. charat ( 0 )==input2. charat ( 0 ) ) { 81 int m e l l e m r e s u l t a t = d i s t 2 b ( input1. s u b s t r i n g ( 1 ), input2. s u b s t r i n g ( 1 ) ) ; 15

18 A.2. SEQUENCETOOLS.JAVA 82 i n p u t s. put ( input1. s u b s t r i n g ( 1 )+"&"+input2. s u b s t r i n g ( 1 ), new I n t e g e r ( m e l l e m r e s u l t a t ) ) ; 83 return m e l l e m r e s u l t a t ; 84 } 85 else { 86 int m e l l e m r e s u l t a t 1 = d i s t 2 b ( input1, input2. s u b s t r i n g ( 1 ) ) ; 87 i n p u t s. put ( input1+"&"+input2. s u b s t r i n g ( 1 ), new I n t e g e r ( m e l l e m r e s u l t a t 1 ) ) ; 88 int m e l l e m r e s u l t a t 2 = d i s t 2 b ( input1. s u b s t r i n g ( 1 ), input2 ) ; 89 i n p u t s. put ( input1. s u b s t r i n g ( 1 )+"&"+input2, new I n t e g e r ( m e l l e m r e s u l t a t 2 ) ) ; i f ( m e l l e m r e s u l t a t 1 < m e l l e m r e s u l t a t 2 ) { 93 return 1 + m e l l e m r e s u l t a t 1 ; 94 } 95 else { 96 return 1 + m e l l e m r e s u l t a t 2 ; 97 } 98 } 99 } / 102 A method used to compare s t r i n g s, using a d o u b b l e array, 103 t o improve t h e performance input1 t h e f i r s t s t r i n g input2 t h e second s t r i n g The number o f o p e r a t i o n s needed to change t h e f i r s t s t r i n g to t h e o t h e r 107 / 108 public int d i s t 3 ( S t r i n g input1, S t r i n g input2 ) 109 { 110 l e n g t h O f F i r s t = input1. l e n g t h ( ) ; 111 lengthofsecond = input2. l e n g t h ( ) ; p l a c e I n S t r i n g = new int [ input1. l e n g t h ( ) +1][ input2. l e n g t h ( ) +1]; 114 for ( int i =0; i < input1. l e n g t h ( )+1 ; i ++) { 115 for ( int j=0 ; j < input2. l e n g t h ( )+1 ; j++) { 116 p l a c e I n S t r i n g [ i ] [ j ] = 1 ; 117 } 118 } 119 return d i s t 3 b ( input1, input2 ) ; 120 } 121 / 122 P r i v a t e method only used by d i s t 3, i s c a l l e d r e c u r s i v e l y 123 by i t s e l f, to reach t h e d i s e r e d r e s u l t 124 / 125 private int d i s t 3 b ( S t r i n g input1, S t r i n g input2 ) 126 { 127 i f ( input1. l e n g t h ( ) ==0) { 128 return input2. l e n g t h ( ) ; 129 } 130 i f ( input2. l e n g t h ( ) ==0) { 131 return input1. l e n g t h ( ) ; 16

19 A.3. SEQUENCETOOLS1TEST.JAVA 132 } 133 i f ( p l a c e I n S t r i n g [ l e n g t h O f F i r s t input1. l e n g t h ( ) ] [ lengthofsecond input2. l e n g t h ( ) ]!= 1) { 134 return p l a c e I n S t r i n g [ l e n g t h O f F i r s t input1. l e n g t h ( ) ] [ lengthofsecond input2. l e n g t h ( ) ] ; 135 } i f ( input1. charat ( 0 )==input2. charat ( 0 ) ) { 138 int m e l l e m r e s u l t a t = d i s t 3 b ( input1. s u b s t r i n g ( 1 ), input2. s u b s t r i n g ( 1 ) ) ; 139 p l a c e I n S t r i n g [ l e n g t h O f F i r s t ( input1. l e n g t h ( ) 1) ] [ lengthofsecond ( input2. l e n g t h ( ) 1) ] = m e l l e m r e s u l t a t ; 140 return m e l l e m r e s u l t a t ; 141 } 142 else { 143 int m e l l e m r e s u l t a t 1 = d i s t 3 b ( input1, input2. s u b s t r i n g ( 1 ) ) ; 144 p l a c e I n S t r i n g [ l e n g t h O f F i r s t input1. l e n g t h ( ) ] [ lengthofsecond ( input2. l e n g t h ( ) 1) ] = m e l l e m r e s u l t a t 1 ; 145 int m e l l e m r e s u l t a t 2 = d i s t 3 b ( input1. s u b s t r i n g ( 1 ), input2 ) ; 146 p l a c e I n S t r i n g [ l e n g t h O f F i r s t ( input1. l e n g t h ( ) 1) ] [ lengthofsecond input2. l e n g t h ( ) ] = m e l l e m r e s u l t a t 2 ; i f ( m e l l e m r e s u l t a t 1 < m e l l e m r e s u l t a t 2 ) { 149 return 1 + m e l l e m r e s u l t a t 1 ; 150 } 151 else { 152 return 1 + m e l l e m r e s u l t a t 2 ; 153 } 154 } 155 } } A.3 SequenceTools1Test.java 1 import j u n i t. framework. TestCase ; 2 3 public c l a s s SequenceTools1Test extends TestCase { 4 5 SequenceTools t o o l ; 6 7 public SequenceTools1Test ( ) { 8 t o o l = new SequenceTools ( ) ; 9 } public f i n a l void t e s t D i s t 1 ( ) 12 { // To tomme s t r e n g e 15 System. out. p r i n t l n ( " Strengene \"\" og \"\" " ) ; 16 long s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 17 int r e s u l t = t o o l. d i s t 1 ( "", "" ) ; 18 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 19 a s s e r t E q u a l s (0, r e s u l t ) ; 20 long endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 17

20 A.3. SEQUENCETOOLS1TEST.JAVA 21 long usedtime = ( endtime s t a r t t i m e ) /1000; 22 System. out. p r i n t l n ( " Brugt tid, naiv r e k u r s i v a l g o r i t m e : " + usedtime + " // En tom og en s t r e n g a f længden 1 25 System. out. p r i n t l n ( " Strengene \"a\" og \"\" " ) ; 26 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 27 r e s u l t = t o o l. d i s t 1 ( "a", "" ) ; 28 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 29 a s s e r t E q u a l s (1, r e s u l t ) ; 30 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 31 usedtime = ( endtime s t a r t t i m e ) /1000; 32 System. out. p r i n t l n ( " Brugt tid, naiv r e k u r s i v a l g o r i t m e : " + usedtime + " // En tom og l a n g s t r e n g 35 System. out. p r i n t l n ( " 100 a er og \"\" " ) ; 36 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 37 r e s u l t = t o o l. d i s t 1 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 100), "" ) ; 38 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 39 a s s e r t E q u a l s (100, r e s u l t ) ; 40 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 41 usedtime = ( endtime s t a r t t i m e ) /1000; 42 System. out. p r i n t l n ( " Brugt tid, naiv r e k u r s i v a l g o r i t m e : " + usedtime + " // to i d e n t i s k e strenge, længden System. out. p r i n t l n ( "2 ens strenge, med længden 10" ) ; 46 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 47 r e s u l t = t o o l. d i s t 1 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 10), S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 10) ) ; 48 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 49 a s s e r t E q u a l s (0, r e s u l t ) ; 50 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 51 usedtime = ( endtime s t a r t t i m e ) /1000; 52 System. out. p r i n t l n ( " Brugt tid, naiv r e k u r s i v a l g o r i t m e : " + usedtime + " // to f o r s k e l l i g e strenge, længden 8 og 9 56 System. out. p r i n t l n ( "To f o r s k e l l i g e strenge, længden 8 og 9" ) ; 57 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 58 r e s u l t = t o o l. d i s t 1 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 8), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 9) ) ; 59 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 60 a s s e r t E q u a l s (17, r e s u l t ) ; 61 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 62 usedtime = ( endtime s t a r t t i m e ) /1000; 63 System. out. p r i n t l n ( " Brugt tid, naiv r e k u r s i v a l g o r i t m e : " + usedtime + " // to f o r s k e l l i g e strenge, længden 9 hver 66 System. out. p r i n t l n ( "To f o r s k e l l i g e strenge, længden 9 hver " ) ; 67 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 18

21 A.3. SEQUENCETOOLS1TEST.JAVA 68 r e s u l t = t o o l. d i s t 1 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 9), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 9) ) ; 69 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 70 a s s e r t E q u a l s (18, r e s u l t ) ; 71 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 72 usedtime = ( endtime s t a r t t i m e ) /1000; 73 System. out. p r i n t l n ( " Brugt tid, naiv r e k u r s i v a l g o r i t m e : " + usedtime + " // to f o r s k e l l i g e strenge, længden 9 og System. out. p r i n t l n ( "To f o r s k e l l i g e strenge, længden 9 og 10" ) ; 77 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 78 r e s u l t = t o o l. d i s t 1 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 9), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 10) ) ; 79 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 80 a s s e r t E q u a l s (19, r e s u l t ) ; 81 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 82 usedtime = ( endtime s t a r t t i m e ) /1000; 83 System. out. p r i n t l n ( " Brugt tid, naiv r e k u r s i v a l g o r i t m e : " + usedtime + " // to f o r s k e l l i g e strenge, længden 10 hver 86 System. out. p r i n t l n ( "To f o r s k e l l i g e strenge, længden 10 hver " ) ; 87 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 88 r e s u l t = t o o l. d i s t 1 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 10), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 10) ) ; 89 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 90 a s s e r t E q u a l s (20, r e s u l t ) ; 91 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 92 usedtime = ( endtime s t a r t t i m e ) /1000; 93 System. out. p r i n t l n ( " Brugt tid, naiv r e k u r s i v a l g o r i t m e : " + usedtime + " // to f o r s k e l l i g e strenge, længden 10 og System. out. p r i n t l n ( "To f o r s k e l l i g e strenge, længden 10 og 11" ) ; 97 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 98 r e s u l t = t o o l. d i s t 1 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 10), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 11) ) ; 99 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 100 a s s e r t E q u a l s (21, r e s u l t ) ; 101 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 102 usedtime = ( endtime s t a r t t i m e ) /1000; 103 System. out. p r i n t l n ( " Brugt tid, naiv r e k u r s i v a l g o r i t m e : " + usedtime + " // Fra opgaven : h a k k e j e r n og hundeejer 106 System. out. p r i n t l n ( " Strengene \" hakkejern \" og \" hundeejer \"" ) ; 107 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 108 r e s u l t = t o o l. d i s t 1 ( " hakkejern ", " hundeejer " ) ; 109 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 110 a s s e r t E q u a l s (8, r e s u l t ) ; 111 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 112 usedtime = ( endtime s t a r t t i m e ) /1000; 113 System. out. p r i n t l n ( " Brugt tid, naiv r e k u r s i v a l g o r i t m e : " + usedtime + " 19

22 A.4. SEQUENCETOOLS2TEST.JAVA 114 } 115 } A.4 SequenceTools2Test.java 1 import j u n i t. framework. TestCase ; 2 3 public c l a s s SequenceTools2Test extends TestCase { 4 5 SequenceTools t o o l ; 6 7 public SequenceTools2Test ( ) { 8 t o o l = new SequenceTools ( ) ; 9 } public f i n a l void t e s t D i s t 2 ( ) 12 { // To tomme s t r e n g e 15 System. out. p r i n t l n ( " Strengene \"\" og \"\" " ) ; 16 long s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 17 int r e s u l t = t o o l. d i s t 2 ( "", "" ) ; 18 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 19 a s s e r t E q u a l s (0, r e s u l t ) ; 20 long endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 21 long usedtime = ( endtime s t a r t t i m e ) /1000; 22 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med Hashmap : " + usedtime + " // En tom og en s t r e n g a f længden 1 25 System. out. p r i n t l n ( " Strengene \"x\" og \"\" " ) ; 26 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 27 r e s u l t = t o o l. d i s t 2 ( "x", "" ) ; 28 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 29 a s s e r t E q u a l s (1, r e s u l t ) ; 30 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 31 usedtime = ( endtime s t a r t t i m e ) /1000; 32 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med Hashmap : " + usedtime + " // En tom og l a n g s t r e n g 35 System. out. p r i n t l n ( " 100 a er og \"\" " ) ; 36 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 37 r e s u l t = t o o l. d i s t 2 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 100), "" ) ; 38 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 39 a s s e r t E q u a l s (100, r e s u l t ) ; 40 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 41 usedtime = ( endtime s t a r t t i m e ) /1000; 42 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med Hashmap : " + usedtime + " // to i d e n t i s k e strenge, længden System. out. p r i n t l n ( "10 a er og 10 a er " ) ; 20

23 A.4. SEQUENCETOOLS2TEST.JAVA 46 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 47 r e s u l t = t o o l. d i s t 2 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 10), S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 10) ) ; 48 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 49 a s s e r t E q u a l s (0, r e s u l t ) ; 50 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 51 usedtime = ( endtime s t a r t t i m e ) /1000; 52 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med Hashmap : " + usedtime + " // to f o r s k e l l i g e strenge, længden 10 og System. out. p r i n t l n ( "10 a er og 11 b er " ) ; 56 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 57 r e s u l t = t o o l. d i s t 2 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 10), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 11) ) ; 58 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 59 a s s e r t E q u a l s (21, r e s u l t ) ; 60 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 61 usedtime = ( endtime s t a r t t i m e ) /1000; 62 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med Hashmap : " + usedtime + " // to f o r s k e l l i g e strenge, længden 100 hver 65 System. out. p r i n t l n ( " 100 a er og 100 b er " ) ; 66 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 67 r e s u l t = t o o l. d i s t 2 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 100), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 100) ) ; 68 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 69 a s s e r t E q u a l s (200, r e s u l t ) ; 70 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 71 usedtime = ( endtime s t a r t t i m e ) /1000; 72 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med Hashmap : " + usedtime + " // to f o r s k e l l i g e strenge, længden 150 hver 75 System. out. p r i n t l n ( " 150 a er og 150 b er " ) ; 76 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 77 r e s u l t = t o o l. d i s t 2 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 150), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 150) ) ; 78 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 79 a s s e r t E q u a l s (300, r e s u l t ) ; 80 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 81 usedtime = ( endtime s t a r t t i m e ) /1000; 82 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med Hashmap : " + usedtime + " // to f o r s k e l l i g e strenge, længden 200 hver 85 System. out. p r i n t l n ( " 200 a er og 200 b er " ) ; 86 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 87 r e s u l t = t o o l. d i s t 2 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 200), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 200) ) ; 88 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 89 a s s e r t E q u a l s (400, r e s u l t ) ; 90 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 21

24 A.5. SEQUENCETOOLS3TEST.JAVA 91 usedtime = ( endtime s t a r t t i m e ) /1000; 92 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med Hashmap : " + usedtime + " // to f o r s k e l l i g e strenge, længden 250 hver 95 System. out. p r i n t l n ( " 250 a er og 250 b er " ) ; 96 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 97 r e s u l t = t o o l. d i s t 2 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 250), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 250) ) ; 98 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 99 a s s e r t E q u a l s (500, r e s u l t ) ; 100 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 101 usedtime = ( endtime s t a r t t i m e ) /1000; 102 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med Hashmap : " + usedtime + " // to f o r s k e l l i g e strenge, længden 300 hver 105 System. out. p r i n t l n ( " 300 a er og 300 b er " ) ; 106 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 107 r e s u l t = t o o l. d i s t 2 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 300), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 300) ) ; 108 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 109 a s s e r t E q u a l s (600, r e s u l t ) ; 110 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 111 usedtime = ( endtime s t a r t t i m e ) /1000; 112 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med Hashmap : " + usedtime + " // Fra opgaven : h a k k e j e r n og hundeejer 115 System. out. p r i n t l n ( " Strengene \" hakkejern \" og \" hundeejer \"" ) ; 116 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 117 r e s u l t = t o o l. d i s t 2 ( " hakkejern ", " hundeejer " ) ; 118 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 119 a s s e r t E q u a l s (8, r e s u l t ) ; 120 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 121 usedtime = ( endtime s t a r t t i m e ) /1000; 122 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med Hashmap : " + usedtime + " 123 } 124 } A.5 SequenceTools3Test.java 1 import j u n i t. framework. TestCase ; 2 3 public c l a s s SequenceTools3Test extends TestCase { 4 5 SequenceTools t o o l ; 6 7 public SequenceTools3Test ( ) { 8 t o o l = new SequenceTools ( ) ; 9 } public f i n a l void t e s t D i s t 3 ( ) 22

25 A.5. SEQUENCETOOLS3TEST.JAVA 12 { // To tomme s t r e n g e 15 System. out. p r i n t l n ( " Strengene \"\" og \"\" " ) ; 16 long s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 17 int r e s u l t = t o o l. d i s t 3 ( "", "" ) ; 18 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 19 a s s e r t E q u a l s (0, r e s u l t ) ; 20 long endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 21 long usedtime = ( endtime s t a r t t i m e ) /1000; 22 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med dobbelt array : " + usedtime + " // En tom og en s t r e n g a f længden 1 25 System. out. p r i n t l n ( " Strengene \"a\" og \"\" " ) ; 26 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 27 r e s u l t = t o o l. d i s t 3 ( "a", "" ) ; 28 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 29 a s s e r t E q u a l s (1, r e s u l t ) ; 30 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 31 usedtime = ( endtime s t a r t t i m e ) /1000; 32 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med dobbelt array : " + usedtime + " // En tom og l a n g s t r e n g 35 System. out. p r i n t l n ( " Strengene \"100 a er \" og \"\" " ) ; 36 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 37 r e s u l t = t o o l. d i s t 3 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 100), "" ) ; 38 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 39 a s s e r t E q u a l s (100, r e s u l t ) ; 40 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 41 usedtime = ( endtime s t a r t t i m e ) /1000; 42 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med dobbelt array : " + usedtime + " // to i d e n t i s k e strenge, længden System. out. p r i n t l n ( "10 a er og 10 a er " ) ; 46 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 47 r e s u l t = t o o l. d i s t 3 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 10), S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 10) ) ; 48 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 49 a s s e r t E q u a l s (0, r e s u l t ) ; 50 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 51 usedtime = ( endtime s t a r t t i m e ) /1000; 52 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med dobbelt array : " + usedtime + " // to f o r s k e l l i g e strenge, længden 10 og System. out. p r i n t l n ( "10 a er og 11 b er " ) ; 56 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 57 r e s u l t = t o o l. d i s t 3 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 10), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 11) ) ; 58 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 59 a s s e r t E q u a l s (21, r e s u l t ) ; 23

26 A.5. SEQUENCETOOLS3TEST.JAVA 60 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 61 usedtime = ( endtime s t a r t t i m e ) /1000; 62 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med dobbelt array : " + usedtime + " // to f o r s k e l l i g e strenge, længden 300 hver 65 System. out. p r i n t l n ( " 300 a er og 300 b er " ) ; 66 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 67 r e s u l t = t o o l. d i s t 3 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 300), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 300) ) ; 68 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 69 a s s e r t E q u a l s (600, r e s u l t ) ; 70 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 71 usedtime = ( endtime s t a r t t i m e ) /1000; 72 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med dobbelt array : " + usedtime + " // to f o r s k e l l i g e strenge, længden 1000 hver 75 System. out. p r i n t l n ( " Strengene med 1000 bogstaver hver, ingen ens i s t r e n g e n e " ) ; 76 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 77 r e s u l t = t o o l. d i s t 3 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 1000), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 1000) ) ; 78 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 79 a s s e r t E q u a l s (2000, r e s u l t ) ; 80 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 81 usedtime = ( endtime s t a r t t i m e ) /1000; 82 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med dobbelt array : " + usedtime + " // to f o r s k e l l i g e strenge, længden 1500 hver 85 System. out. p r i n t l n ( " Strengene med 1500 bogstaver hver, ingen ens i s t r e n g e n e " ) ; 86 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 87 r e s u l t = t o o l. d i s t 3 ( S t r i n g G e n e r a t e r. g e n e r a t e ( "a", 1500), S t r i n g G e n e r a t e r. g e n e r a t e ( "b", 1500) ) ; 88 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 89 a s s e r t E q u a l s (3000, r e s u l t ) ; 90 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 91 usedtime = ( endtime s t a r t t i m e ) /1000; 92 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med dobbelt array : " + usedtime + " // Fra opgaven : h a k k e j e r n og hundeejer 95 System. out. p r i n t l n ( " Strengene \" hakkejern \" og \" hundeejer \"" ) ; 96 s t a r t t i m e = System. c u r r e n t T i m e M i l l i s ( ) ; 97 r e s u l t = t o o l. d i s t 3 ( " hakkejern ", " hundeejer " ) ; 98 System. out. p r i n t l n ( " Afstanden er : " + r e s u l t ) ; 99 a s s e r t E q u a l s (8, r e s u l t ) ; 100 endtime = System. c u r r e n t T i m e M i l l i s ( ) ; 101 usedtime = ( endtime s t a r t t i m e ) /1000; 102 System. out. p r i n t l n ( " Brugt tid, a l g o r i t m e med dobbelt array : " + usedtime + " 103 } 24

27 A.6. STRINGGENERATER.JAVA 104 } A.6 StringGenerater.java 1 / 2 Simple c l a s s, only used to g e n e r a t e s t r i n g s o f 3 a s p e c i f i e d l e n g t h and o f a s p e c i f i e l c h a r a c t e r Jacob Aae Mikkelsen 5 6 / 7 public class S t r i n g G e n e r a t e r { 8 / 9 Used to g e n e r a t e s t r i n g s c o n t a i n i n g a r e p e a t e d sequence. 10 I f g i v e n a s t r i n g a f l e n g t h on, i t r e t u r n s a s t r i n g 11 o f t h e s p e c i f i e l l e n g t h 12 i n p u t t h e character, which s h o u l d be r e p e a t e d times number o f times to r e p e a t t h e i n p u t a s t r i n g with t h e s p e c i f i e d l e n g t h and c h a r a c t e r s 16 / 17 public s t a t ic S t r i n g g e n e r a t e ( S t r i n g input, int times ) 18 { 19 S t r i n g output = "" ; 20 for ( int i = 0 ; i < times ; i ++) { 21 output = output + input ; 22 } 23 return output ; 24 } 25 } 25

28 Bilag B Test udskrifter B.1 Naive algoritme Strengene "" og "" Afstanden er: 0 Brugt tid, naiv rekursiv algoritme: 0 Sekunder Strengene "a" og "" Afstanden er: 1 Brugt tid, naiv rekursiv algoritme: 0 Sekunder 100 a er og "" Afstanden er: 100 Brugt tid, naiv rekursiv algoritme: 0 Sekunder 2 ens strenge, med længden 10 Afstanden er: 0 Brugt tid, naiv rekursiv algoritme: 0 Sekunder To forskellige strenge, længden 8 og 9 Afstanden er: 17 Brugt tid, naiv rekursiv algoritme: 0 Sekunder To forskellige strenge, længden 9 hver Afstanden er: 18 Brugt tid, naiv rekursiv algoritme: 3 Sekunder To forskellige strenge, længden 9 og 10 Afstanden er: 19 Brugt tid, naiv rekursiv algoritme: 5 Sekunder To forskellige strenge, længden 10 hver Afstanden er: 20 Brugt tid, naiv rekursiv algoritme: 20 Sekunder To forskellige strenge, længden 10 og 11 Afstanden er: 21 Brugt tid, naiv rekursiv algoritme: 40 Sekunder Strengene "hakkejern" og "hundeejer" Afstanden er: 8 Brugt tid, naiv rekursiv algoritme: 0 Sekunder 26

29 B.2. ALGORITME MED HASHMAP B.2 Algoritme med HashMap Strengene "" og "" Afstanden er: 0 Brugt tid, algoritme med Hashmap: 0 Sekunder Strengene "x" og "" Afstanden er: 1 Brugt tid, algoritme med Hashmap: 0 Sekunder 100 a er og "" Afstanden er: 100 Brugt tid, algoritme med Hashmap: 0 Sekunder 10 a er og 10 a er Afstanden er: 0 Brugt tid, algoritme med Hashmap: 0 Sekunder 10 a er og 11 b er Afstanden er: 21 Brugt tid, algoritme med Hashmap: 0 Sekunder 100 a er og 100 b er Afstanden er: 200 Brugt tid, algoritme med Hashmap: 0 Sekunder 150 a er og 150 b er Afstanden er: 300 Brugt tid, algoritme med Hashmap: 1 Sekunder 200 a er og 200 b er Afstanden er: 400 Brugt tid, algoritme med Hashmap: 1 Sekunder 250 a er og 250 b er Afstanden er: 500 Brugt tid, algoritme med Hashmap: 3 Sekunder 300 a er og 300 b er Afstanden er: 600 Brugt tid, algoritme med Hashmap: 8 Sekunder Strengene "hakkejern" og "hundeejer" Afstanden er: 8 Brugt tid, algoritme med Hashmap: 0 Sekunder B.3 Algoritme med dobbelt array Strengene "" og "" Afstanden er: 0 Brugt tid, algoritme med dobbelt array: 0 Sekunder Strengene "a" og "" Afstanden er: 1 Brugt tid, algoritme med dobbelt array: 0 Sekunder Strengene "100 a er" og "" Afstanden er: 100 Brugt tid, algoritme med dobbelt array: 0 Sekunder 10 a er og 10 a er Afstanden er: 0 27

30 B.3. ALGORITME MED DOBBELT ARRAY Brugt tid, algoritme med dobbelt array: 0 Sekunder 10 a er og 11 b er Afstanden er: 21 Brugt tid, algoritme med dobbelt array: 0 Sekunder 300 a er og 300 b er Afstanden er: 600 Brugt tid, algoritme med dobbelt array: 0 Sekunder Strengene med 1000 bogstaver hver, ingen ens i strengene Afstanden er: 2000 Brugt tid, algoritme med dobbelt array: 0 Sekunder Strengene med 1500 bogstaver hver, ingen ens i strengene Afstanden er: 3000 Brugt tid, algoritme med dobbelt array: 2 Sekunder Strengene "hakkejern" og "hundeejer" Afstanden er: 8 Brugt tid, algoritme med dobbelt array: 0 Sekunder 28

31 Bilag C Test skemaer 29

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

Programmering 2. dprog2 E2012. http://www.cs.au.dk/dprog2/

Programmering 2. dprog2 E2012. http://www.cs.au.dk/dprog2/ Programmering 2 dprog2 E2012 http://www.cs.au.dk/dprog2/ Læringsmål Deltagerne skal ved afslutningen af kurset kunne: forklare og anvende både basale og videregående elementer af et moderne programmeringssprog,

Læs mere

Programmering 2. dprog2 E2013. http://www.cs.au.dk/dprog2/

Programmering 2. dprog2 E2013. http://www.cs.au.dk/dprog2/ Programmering 2 dprog2 E2013 http://www.cs.au.dk/dprog2/ Læringsmål Deltagerne skal ved afslutningen af kurset kunne: forklare og anvende både basale og videregående elementer af et moderne programmeringssprog,

Læs mere

DM34-1. Obligatorisk opgave Dilemma spillet. Jacob Aae Mikkelsen 191076 kok04

DM34-1. Obligatorisk opgave Dilemma spillet. Jacob Aae Mikkelsen 191076 kok04 DM34-1. Obligatorisk opgave Dilemma spillet Jacob Aae Mikkelsen 191076 kok04 April 2005 Kapitel 1 Resumé Denne rapport dokumenterer udviklingsforløbet og afprøvningen af et spil Dilemma. Spillet går ud

Læs mere

DM13-3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode

DM13-3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode - 3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode Jacob Aae Mikkelsen - 191076 12. december 2005 1 Indhold 1 Opgave beskrivelse 2 2 Muligheder for optimering 2 2.1 efter branch.........................

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!

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

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

DM507 Algoritmer og datastrukturer

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

Læs mere

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer: Sortering Sortering Input: Output: n tal De n tal i sorteret orden Eksempel: Kommentarer: 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Sorteret orden kan være stigende eller faldende. Vi vil i dette kursus

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

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

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

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

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

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer (2. semester). Mål

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

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

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

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

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

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

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

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

Læs mere

Rekursion og dynamisk programmering

Rekursion og dynamisk programmering Rekursion og dynamisk programmering Datastrukturer & Algoritmer, Dat C Forelæsning 12/10-2004 Henning Christiansen Rekursion: at en procedure kalder sig selv eller et antal metoder kalder hinanden gensidigt.

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

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

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

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2010 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 24. april, 2010 (let justeret 10. maj og 21. maj 2010) Dette projekt udleveres i tre

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

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

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

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

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

DM507 Algoritmer og datastrukturer

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

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2015 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 3. marts, 2015 Dette projekt udleveres i to dele. Hver del har sin deadline, således

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

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 7 DM -. Obligatoriske Opgave Løsning af ligningssystem vha. fipunktmetoden Jacob Christiansen, 8 moffe@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense. Opgaven Der skal implementeres

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

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning Institut for Matematik og Datalogi Syddansk Universitet, Odense 21. februar 2011 LMF DM507 Eksamen Obligatorisk Opgave Rejseplanlægning 1 Problemet Denne opgave går ud på at lave et program, som ud fra

Læs mere

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. 22 Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. Indsættelse i hobe. Sletning af minimalt element i hobe. Repræsentation. 327

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

Det er muligt at chekce følgende opg. i CodeJudge: og

Det er muligt at chekce følgende opg. i CodeJudge: og Det er muligt at chekce følgende opg. i CodeJudge:.1.7 og.1.14 Exercise 1: Skriv en forløkke, som producerer følgende output: 1 4 9 16 5 36 Bonusopgave: Modificer dit program, så det ikke benytter multiplikation.

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

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 Deltagere: BA i Datalogi BA i Software Engineering BA i Matematik-Økonomi BA i Anvendt Matematik BA

Læs mere

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox Martin Olsen DM0 Projekt 0 Del I. marts 0 FOTO: Colourbox Indhold Indledning... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Kildekode til SimpleInv.java... Kildekode til MergeSort.java...

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

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet Eksamen 005, F 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:

Læs mere

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer

Læs mere

HTX, RTG. Rumlige Figurer. Matematik og programmering

HTX, RTG. Rumlige Figurer. Matematik og programmering HTX, RTG Rumlige Figurer Matematik og programmering Vejledere: Jørn Christian Bendtsen og Karl G. Bjarnason Morten Bo Kofoed Nielsen & Michael Jokil 10-10-2011 In this assignment we have been working with

Læs mere

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign 28 Algoritmedesign. Algoritmeskabelon for Del og Hersk. Eksempler på Del og Hersk algoritmer. Binær søgning i et ordnet array. Sortering ved fletning og Quicksort. Maksimal delsums problem. Tætteste par

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

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 Mandag den 7. juni 00, kl. 9 Alle sædvanlige hjælpemidler (lærebøger, notater, osv.)

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

Asymptotisk analyse af algoritmers køretider

Asymptotisk analyse af algoritmers køretider Asymptotisk analyse af algoritmers køretider Analyse af køretid Recall: Vi ønsker at vurdere (analysere) algoritmer på forhånd inden vi bruger lang tid på at implementere dem. De to primære spørgsmål:

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

BRP Sortering og søgning. Hægtede lister

BRP Sortering og søgning. Hægtede lister BRP 18.10.2006 Sortering og søgning. Hægtede lister 1. Opgaver 2. Selection sort (udvælgelsessortering) 3. Kompleksitetsanalyse 4. Merge sort (flettesortering) 5. Binær søgning 6. Hægtede lister 7. Øvelser:

Læs mere

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet Afstande, skæringer og vinkler i rummet Frank Villa 2. maj 202 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Indhold

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design

Læs mere

Indhold. Maskinstruktur... 3. Kapitel 1. Assemblersprog...3. 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output...

Indhold. Maskinstruktur... 3. Kapitel 1. Assemblersprog...3. 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output... Indhold Maskinstruktur... 3 Kapitel 1. Assemblersprog...3 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output... 9 Kapitel 2. Maskinkode... 13 2.1 Den fysiske maskine... 13 2.2 Assemblerens

Læs mere

Tabeller (I) Tabeller

Tabeller (I) Tabeller Tabeller (I) Klassediagrammer (III) Tabeller og qualified associations Michael R. Hansen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark En tabel fra en mængde A til

Læs mere

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet Afstande, skæringer og vinkler i rummet Frank Nasser 9. april 20 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her.

Læs mere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

DM507 Algoritmer og datastrukturer

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

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

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

Objects First with Java A Practical Introduction Using BlueJ

Objects First with Java A Practical Introduction Using BlueJ Objects First with Java A Practical Introduction Using BlueJ En introduktion til objektorienteret programmering for begyndere ud fra et software engineering aspekt Om at programmere i Java, ikke om værktøjet

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

Selvstudium 1, Diskret matematik

Selvstudium 1, Diskret matematik Selvstudium 1, Diskret matematik Matematik på første studieår for de tekniske og naturvidenskabelige uddannelser Aalborg Universitet I dette selfstudium interesserer vi os alene for tidskompleksitet. Kompleksitet

Læs mere

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004 Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen torsdag den 3. juni 2004 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes

Læs mere

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 DM14 1. Obligatoriske opgave Systemkald Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 Side 1 af 5 Intro: Formålet med opgaven at et lave en system kald

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

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

Rolf Fagerberg. Forår 2012

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

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af 2 sider anmarks Tekniske Universitet Skriftlig prøve, den 23. maj 20. Kursusnavn: lgoritmer og datastrukturer Kursus nr. 02326. Varighed: 4 timer Tilladte hjælpemidler: lle skriftlige hjælpemidler.

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

Introduktion til funktioner, moduler og scopes i Python

Introduktion til funktioner, moduler og scopes i Python Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

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

Rolf Fagerberg. Forår 2014

Rolf Fagerberg. Forår 2014 Forår 2014 Mål for i dag Dagens program: 1 2 3 4 5 6 Forudsætninger: Format: Programmering og Diskret matematik I (forelæsninger), TE (øvelser), S (arbejde selv og i studiegrupper) Eksamenform: Skriftlig

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

DM536. Rapport og debug

DM536. Rapport og debug DM536 Rapport og debug Kilder Vigtig.it (Felix Palludan Hargreaves) http://vigtig.it/dm502/howto_report.pdf http://vigtig.it/blog/teaching/#toc-relevant-tips Peter Schneider-Kamp http://imada.sdu.dk/~petersk/dm536/project2.pdf

Læs mere

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Kursusgang 11 Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Design af brugerflader 11.1 Samme sted Forskellige steder Sidste kursusgang Samtidigt

Læs mere

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. 19 Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. Sammenligning af hashtabeller og søgetræer. 281 Hashing-problemet (1). Vi ønsker at afbilde n objekter på en tabel

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

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7 DM01 DM01 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 13/5-2003 Side 1 af 7 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DNA2:...4 2.1.1 METODER:...4

Læs mere

Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille

Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille Hashing Ordbøger Hægtet hashing Hashfunktioner Lineær probering Philip Bille Hashing Ordbøger Hægtet hashing Hashfunktioner Lineær probering Ordbøger Ordbøger. Vedligehold en dynamisk mængde S af elementer.

Læs mere

Modern Concurrency Abstractions for C#

Modern Concurrency Abstractions for C# Modern Concurrency Abstractions for C# Nick Benton Luca Cardelli Cédric Fournet Presenter: Henrik Kragh-Hansen September 27, 2007 Motivation for concurrency Forbedring af concurrency Baggrundsinformation

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

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