15 Arrays og Lister samt Stakke og Køer.

Størrelse: px
Starte visningen fra side:

Download "15 Arrays og Lister samt Stakke og Køer."

Transkript

1 15 Arrays og Lister samt Stakke og Køer. Introduktion til arrays. Algebraisk specifikation af arrays. Arrays i Eiffel. Introduktion til lister og kædede lister. Fælles egenskaber ved stakke og køer. Algebraisk specifikation af stakke. Algebraisk specifikation af køer. Prioritetskøer. Simpel algebraisk specifikation af lister. Dobbeltkædede og cirkulære lister. Dette er den første af tre forelæsninger om elementære men centrale abstrakte datatyper. Foruden arrays, lister, stakke og køer (som er emnet i dette kapitel) vil vi i dette kursus, og senere i disse noter, se nærmere på strenge, filer, træer og hobe. 211

2 Introduktion til arrays. min i max Et array er en abstrakt datatype som repræsenterer en homogen tabel. Faste øvre og nedre grænser, og dermed fast størrelse. Vigtige array-operationer: hent i-te element. gem nyt objekt i i-te element. Hent og gem operationerne har konstant tidskompleksitet. Underliggende lagres elementerne i et array konsekutivt. Denne slide opremser traditionelle egenskaber af arrays. Et array kan implementeres som en konsekutiv mængde af lagerceller, hvor positionen af et element i array'et kan beregnes ud fra indekset. Det befordrer den konstante tidskompleksitet af de to fundamentale operationer: hent og gem på arrays. Med andre ord: hent og gem operationerne beregner positionen af et element i arrayet, og henter/gemmer dette element direkte, uden nogen som helst form for søgning eller gennemløb af arrayet. På dette kursus vil vi konsekvent opfatte arrays som objekter af en abstrakt datatype. På denne slide ser vi dels på den traditionelle repræsentation af denne datatype, dels på vigtige egenskaber af typens operationer. Homogenitetsegenskaben af arrays er relativ til programmeringssprogets regler for typesammenlignelighed. Homogenitetsegenskaben kan også ses som en kontrast til records, hvori felterne jo kan være af forskellige typer. Kravet om fast størrelse af arrays kan forstås på to måder: 1. Det er statisk bestemmeligt, hvor stort et array skal være. Dvs. at inden programmet kører kan man bestemme, hvor grænserne for programmets arrays. 2. Det er dynamisk bestemmeligt, hvor stort et array skal være. Størrelsen kan f.eks. afhænge af bruger-input. Men når et array først er allokeret, kan det ikke ændre størrelse. Det er selvfølgelig fristende at hæve disse restriktioner, og i visse sprog er det da også muligt at have arrays, som kan ændre størrelse under programmets udførelse. I Eiffel klassen ARRAY kan man anvende en operation resize, som ændrer størrelsen af arrayet. 212

3 Algebraisk specifikation af arrays. Type Array[X] Functions create: Integer x Integer -> Array[X] put: X x Integer x Array[X] -> Array[X] item : Integer x Array [X] -> X count: Array [X] -> Integer lower: Array [X] -> Integer upper: Array[X] -> Integer Axioms for all x in X, l, u, i, j in Integer, A in Array [X] item(i, create(l,u)) =undefined item (i, put (x, j, A)) = if i = j then x else item (i, A) count(create(l,u)) = if u l then u - l + 1else undefined count(put (x, j, A)) = count(a) lower(create(l,u)) = l lower(put (x, j, A)) = lower(a) upper(create(l,u)) = u upper(put (x, j, A)) = upper(a) Det er ikke helt oplagt, hvordan man håndterer indekstypen i en algebraisk specifikation af et array. Man kan vælge at angive to generiske typer til array specifikationen: indekstype og elementtype. Vi har dog i denne specifikation valgt at lade grænserne for arrayet være parameter til "basis konstruktoren" create. Da der jo ikke er ligninger for konstruktorerne, kan vi ikke direkte angive, at den nedre grænse skal være mindre end den øvre grænse. Dette må afspejles i specifikationen af andre operationer, eller, om muligt, i en prebetingelse til Create. Vi har ikke indbygget sådanne fejlchecks konsekvent i ovenstående specifikation. Vi er interesseret i at angive de vigtige egenskaber ved arrays, axiomerne. De sekundære, og mere pragmatisk betonede egenskaber har vi stort set udeladt, da de blot forvirrer billedet. En af de vigtige ting at fæstne sig ved i denne specifikation, er hvilken værdi item(i, A) returnerer, hvis vi har tilskrevet elment nummer i værdien a1, og dernæst tilskrevet det samme element værdien a2. Specifikationen af item operationen angiver, at den sidst tilskrevne værdi til det i-te element (a2) overskriver den første. Overvej dette! Bemærk, at denne specifikation specificerer et array, men operationelt er den "forfærdelig" fra et kompleksitetsmæssigt synspunkt. Item operationen, som tager et element ud af array-et er foreskrevet som et rekursivt gennemløb af strukturen. Dette skal på ingen måde tages som et forbillede for en implementation, i hvilken vi jo kræver, at arrayopslag skal have konstant tidskompleksitet. 213

4 Arrays i Eiffel. I Eiffel er array typen defineret af en generisk klasse. Eiffel class ARRAY[T] export lower, count, upper, item, put,... make(minindex, maxindex: INTEGER) is do... end item(i: INTEGER): T is do... end... end... end; --class ARRAY a: ARRAY[BOOLEAN];...!!a.make(1, n); a.put(i, false); x := a.item(i) Pascal (* intet modstykke *) (* sprogdefineret *) a: array[1..n] of boolean; a[i] := false; x := a[i]; I forhold til bogen OOSC er der i vores implementation af Eiffel indført andre navne på operationerne på arrays. Denne slide bruger de nye og gældende navne. Lad være med at programmere med ARRAYs efter OOSC. Eiffel the Language kapitel 28 beskriver Array s i Eiffel3. Der er flere operationer i klassen ARRAY end dem, vi har specificeret på forrige slide. Se kap. 28. Det skal bemærkes at der findes et infix alias for operationen item. I stedet for at skrive a.item(i) som ovenfor kan man i Eiffel3 skrive i Det er generelt muligt at definere infix (og prefix) notation for operationer med to parametre (én parameter), incl. modtager objektet. Se detaljer i i Eiffel the Language. Vær også opmærksom på klassen ARRAY2---to-dimensionelle arrays, som er i datastrukturbiblioteke. 214

5 Manifeste arrays i Eiffel. I Eiffel er der en manifest notation for arrays, hvis nedre grænse er 1. << e 1, e 2,... e n >> er et udtryk, hvis værdi er af typen ARRAY[T], forudsat at alle deludtryk e 1, e 2,... e n er af typer, som er typesammenlignelige med T. << e 1, e 2,... e n >> både instantierer og initialiserer et array objekt. Skabelse af et array ved brug af manifest array-udtryk. A: ARRAY[INTEGER]... A := << 8, 9, 10 >> Tilsvarende skabelse af et array uden brug af manifest array-udtryk. A: ARRAY[INTEGER]... A.make(1, 3); A.put (8, 1); A.put(9, 2); A.put(10, 3) Man kan i Eiffel the Language læse om manifeste arrays i afsnit

6 Introduktion til lister. (e 1 e 2 e 3... e n ) En liste er en abstrakt datatype som tillader os at registrere en bestemt rækkefølge af et antal homogene elementer. Vigtige liste-operationer: Indsættelse af nyt element i listen. Sletning af eksisterende element fra listen. Navigering til et naboelement i listen. Aflæsning af et nærmere angivet element i listen. Der er mange mulige repræsentationer af lister: baseret på arrays. baseret på sammenkædede strukturer. andre... Repræsentationen påvirker operationsrepertoire. tidskompleksitet. andre basale egenskaber (f.eks. persistens). På sammen måde som vi opfatter et array som en abstrakt datatype, vil vi også opfatte lister som en abstrakt datatype. Lister er på flere måder et mere abstrakt begreb end arrays. Det basale i listebegrebet er rækkefølgen mellem et antal elementer. Dette træk genfinder vi også fra array-typen, idet der jo er en ganske bestemt rækkefølge af tabellens pladser. Vi har forsøgt at fastslå de vigtige og karakteristiske operationer på lister. Indsættelse og sletning tillader os manipulere rækkefølgen af elementer. Hvis vi sammenligner med array-typen kan vi notere os, at der er fundamentale forskelle, idet rækkefølgen af array-elementer i bund og grund er fastlagt på det tidspunkt, array et skabes. (At vi kan simulere ændringer af rækkefølgen af array-elementer ved at skubbe og ombytte indholdet er tabellens elementer er en lidt anden sag, som vi ser bort fra her). Navigering til naboelementer er også fundamentalt for lister. På dette niveau af diskussionen vil vi ikke fastlægge nøjagtigt hvilken navigering der er tale om, og ej heller hvordan resultatet af navigeringen manifesterer sig. Men i næsten alle lister vil vi kunne navigere til næste elemente i listen. (I mange liste typer kan vi også komme afsted med at navigere til forrige element i listen, til første element, til sidste element og til i-te element). Endelig må vi naturligvis have en eller anden måde at aflæse elementer fra listen. Aflæsning hænger naturligvis ofte sammen med navigering, således at vi kan aflæse det element, hvortil vi har bevæget os. Lister kan repræsenteres på mange forskellige måder; hver repræsentation giver operationerne bestemte egenskaber hvad angår tidskompleksitet. Der findes to meget anvendte måder at repræsentere lister på: (1) som sammenkædede strukturer og (2) ved arrays. Dette vender vi tilbage til på næste side. 216

7 Kædede lister. Enkeltkædet liste dataelement hægte Sammenkædet (hægtet) struktur af homogene dataelementer. Ingen grænser på strukturen. Indsættelse og sletning af elementer: operationer med køretid på O(n), hvor n er længden af listen. Navigering kan kun foregå ved at følge hægterne mellem listeelementer. En liste er mere end samlingen og rækkefølgen af elementer. Det er farligt at referere til en liste gennem en pointer til dets første element. En liste er et objekt, som har selvstændig identitet. På denne slide studerer vi lister repræsenteret som (enkelt) kædede strukturer, og vi sammenligner med en array-baseret løsning. Den udefra kommende reference til listen øverst til venstre på denne slide peger på det første element i listen. (Se dog diskussionen af denne reference herunder). I et array er det ikke muligt direkte at indsætte et element mellem to eksisterende elementer. Vi kan, f.eks., ikke indsætte et element mellem a[2] og a[3] i array-et a ved at sige a[2.5] := e. Det nærmeste, vi kan komme dette, er at skubbe alle elementerne mod højre, i eksemplet alle elementer fra a[3] og fremad, således der bliver plads til det nye element. Derved ændres elementernes indeks. Denne operation er endvidere kostbar, i størrelsesordenen O(længden af array-et). Kædede lister er velegnede hvad angår indsættelse og sletning af elementer imellem (eller før eller efter) eksisterende elementer. Indsættelse består i at skabe en ny kasse og hægte den ind i strukturen. Sletning består i at afskaffe en eksiterende kasse, og afhægte den fra strukturen. Det er naturligvis vigtigt at man behersker de enkelte trin i disse to handlinger. Det er vigtigt at få fat i, hvor tidsforbruget for indsættelse og sletning af elementer i en kædet lister stammer fra. Hvis vi ønsker at slette det i-te element i en kædet liste må vi opsøge dette element. Hvis "opsøgningen" skal foretages ved at gennemrejse alle de forudgående elementer, koster det i gennemsnit n/2 trin. Selve indsættelses- og slette operationerne af et led i kæden er af konstant kompleksitet, forudsat at man også har en reference til det forrige liste element. I praktiske implementationer er det således attraktivt at introducere en listeposition, som kan flyttes af bestemte operatione. Eiffel gør et stort nummer ud af dette. Hvis man refererer til en liste gennem en pointer til dets første element kommer man i alvorlige vanskeligheder hvis man vil indsætte eller slette det første element i listen. Derimod er det ikke et problem at indsætte/slette de øvrige elementer. Det er klart, at dette er noget rod! En løsning (lappeløsning) er at introducere et listehovede eller et dummy element (se Weiss afsnit 3.2.3). Den pæne løsning består i at indse, at en liste som så er et objekt med identitet (udgjort af mere end blot dets elementer) og med egen tilstand. En del af tilstanden er naturligvis referencen til listens første element. 217

8 Algebraisk specifikation af lister. Type List[X] Functions empty-list: -> List[X] insert: X x List[X] -> List[X] delete: List[X] -> List[X] item : Integer x List [X] -> X count: List [X] -> Integer append: List [X] x List [X] -> List [X] Axioms for all x in X, L, in List[X], i in Integer item(i, empty-list ()) = error item (i, insert (x, L)) = if i = 1 then x else item (i-1, L) delete(empty-list ()) = error delete(insert (x, L)) = L count(empty-list ()) = 0 count(insert(x, L)) = 1 + count(l) Vi indskrænker os til at specificere lister i det specialtilfælde, hvor elementer altid indsættes og slettes i begyndelsen af listen. Bemærk, at vi i realiteten derved kommer til at specificere noget, der ligner en stak. Vi kan dog gennem operationen item bede om det i-te element i listen. Dette er mere realistisk, end det måske lyder. Lisp, som er et listehåndteringssprog, arbejder med lister på denne måde. Empty-list svarer da til nil i Lisp, insert til cons, delete til cdr, item til nth (med lidt anden nummereringskonvention af elementer i listen). Vi har ikke i denne specifikation et eksplicit modstykke til car fra Lisp. Den kan fåes ved item(1,...). I Lisp er det dog meget forkert at tænke på cdr som delete. (Cdr l) returnerer halen af listen l, men l er stadigvæk en reference til hele listen l. Når vi har brug for en manifest notation for lister vil vi bruge Lisp notation. Ifølge denne er (e1 e2... en) listen bestående af elementerne e1, e2,..., en. Opgave 1. I specifikationen på denne slide er der ikke vist ligninger for append. Append skal sammensætte to lister, således at elementerne fra den første liste kommer forud for elementerne i den anden liste. Skriv ligningerne for append. Opgave 2. Lav en algebraisk specifikation af lister, hvor elementer kan indsættes og slettes fra vilkårlige positioner. Create laver en tom liste, insert indsætter et element, således at det bliver det i-te element i listen, delete sletter det i-te element, og item udtager det i-te element. Count betegner antallet af elementer i listen. 218

9 Dobbeltkædede lister og cirkulære lister. Dobbeltkædet liste left right data Effektivt at navigere både mod højre og venstre. Cirkulær liste data right Effektivt at indsætte først såvel som sidst i listen. I en cirkulær liste peger vores udefra kommende reference på det sidste element. Idet listens sidste element peger på det første element, er det effektivt at indsætte elementer både først og sidst i listen. I Eiffel er den mest benyttede kædede liste LINKED_LIST, som er enkeltkædet. Som et alternativ har vi på dette kursus adgang til en lidt simplere klasse (og knap så rig klasse for enkeltkædede lister) kaldet SIMPLE_LIST. Denne klasse introduceres i et appendex til nærværende del af noterne. 219

10 Gennemløb af lister. Forskellige former for gennemløb af lister: udførelse af en handling på alle elementer i en liste. filtrering af alle elementerne i en liste, som opfylder en betingelse. reduktion af en liste til ét element, som afspejler en beregning på listens elementer. Det er attraktivt at være i stand til at programmere generelle abstraktioner, som afspejler forskellige former for gennemløb af lister. Gennemløb af lister er så hyppige, at det kan betale sig at programmere dem een gang for alle, og derefter parametrisere gennemløbene med passende handlinger. Denne slide postulerer, at der er forskellige former for gennemløb, som vi kan vælge at programmere hver for sig. I Lisp (hvor lister, som omtalt, spiller en helt afgørende rolle) findes der (blandt andre) funktioner, der afspejler de tre nævnte former for listegemmenløb. Disse funktioner hedder traditionelt map, filter og reduce. Disse funktioner kaldes højere ordens funktioner, fordi de tager en funktion som parameter, der udtrykker handlingen på hvert enkelt liste element. Eksempel: Vi ønsker at udskrive de lige tal i listen L af tal. Dette kan let og elegant gøres med (map print (filter even L)) hvor even er en funktion (et prædikat), der returnerer, hvorvidt et tal er lige. 220

11 Gennemløb af lister i Eiffel. Class List Class MyList Operation i klassen MyList: element_action is -- action to be performed on -- every element in the list. do... end Operationer i klassen List: element_action is deferred end; map is -- apply the function element_action -- on every element of the list. do from start until offright loop element_action; forth end --loop end; --map Denne slide illustrerer, hvordan tilsvarende gennemløb af lister kan finde sted i Eiffel. Vi tager udgangspunkt i en klasse List, som i princippet kunne være (men ikke er) linked_list. I List kan vi programmere en procedure, som gennemløber listen, og som på hvert element kalder en anden funktion, element_action. Element_action kan enten være forudannonceret (deferred) eller blot tom. (Sidstnævnte er sikkert at foretrække i praksis, idet det herved bliver muligt at instantiere klassen List). Når man vil programmere et bestemt gennemløb, laver man i en subklasse, hvori proceduren element_action er redefineret. Dette kan forekomme som en tung fremgangsmåde, i det mindste i forhold til Lisp løsningen, som vi omtalte i tilknytning til forrige slide. Hvis vi ønsker at anvende to forskelligt parametriserede gennemløb kommer vi i problemer. Eiffel håndterer ikke iteration over liste på helt sammen måde som skitseret. Men Eiffel teknikken er tæt beslægtet med den viste fremgangsmåde. Eiffel benytter en særlig klasse, linear_iter, til at beskrive iteration. Linear_iter kan arves (sammen med andre klasser i multipel nedarvning) hvis man ønsker at iterere over lister. Interesserede læsere kan konsultere Eiffel biblioteket og tilknyttede eksempler på dette. 221

12 Fælles egenskaber af stakke og køer. I stakke og køer er højst ét element i strukturen tilgængelig for aflæsning og udtræk. Stakke og køer er datatyper, hvor aflæsning og modifikation finder sted i strukturernes yderpunkter. Stakke og køer kan opfattes som specialiseringer af enten arrays eller kædede lister. 222

13 Introduktion til stakke. hoved push pop top En stak er en liste, hvor elementer indsættes, aflæses og slettes i hovedet af listen. En stak følger en LIFO (Last In First Out) disciplin. Traditionelle operationer: hale Indsættelse af element i stak: push Sletning af element fra stak: pop Aflæsning af element fra stak: top Vi har adskillige gange tidligere på kurset anvendt datatypen stak som illustration af forskellige aspekter ved specifikation af ADT-er og objekt-orienteret programmering. Af en eller anden grund er stakken mange forfatteres foretrukne eksempel i en bred vifte af sammenhænge. I denne forelæsning vil vi derfor kun kort opsummere stakke's egenskaber og algebraiske specifikation, først og fremmest som en kontrast til køer. Tidskompleksiteten af de omtalte operationer er konstant. 223

14 Algebraisk specifikation af stakke. Type Stack[X] Functions create: -> Stack[X] push: X x Stack[X] -> Stack[X] pop: Stack[X] -> Stack[X] top: Stack[X] -> X empty: Stack[X] -> Boolean Axioms for all x in X, S in Stack[X] pop(create()) = Undefined pop(push (x, S)) = S top(create()) = Undefined top(push (x, S)) = x empty(create()) = true empty(push (x, S)) = false Opgave. Vi har tidligere lavet en simpel specifikation af lister (se slide med "algebraisk specifikation af lister"). Sammenlign denne specifikation af lister med specifikationen af stakke, som givet ovenfor. Hvad er forskelle og ligheder? 224

15 Introduktion til køer. leave hoved En kø er en liste, hvor elementer indsættes i halen og udtages i hovedet af listen. En sådan kø følger en FIFO (First In First Out) disciplin. hale Traditionelle operationer: enter Indsættelse af element i køen: enter. Udtagning af element fra køen: leave. Aflæsning (uden udtagning) af element fra køen: front. Man kunne naturligvis også vedtage, at elementer indsættes i køens hoved og "trækkes ud af halen". Det vigtige er, at man følger en fast konvention. Hvis vi med lister mener en bestemt klasse LIST, er det måske ikke helt ligegyldigt hvilken konvention vi følger. Vi ønsker naturligvis at arrangere tingene sådan, at operationerne bliver hurtigst mulige, med så lille pladsbehov som mulig, og at vi som programmører slipper lettest muligt om ved programmeringen af køen givet LIST. Der findes alternative navne på de karakteristiske kø-operationer. I Weiss kaldes enter for enqueue og leave for dequeue. 225

16 Algebraisk specifikation af køer. Type Queue[X] Functions create: -> Queue [X] enter: X x Queue [X] -> Queue [X] leave: Queue [X] -> Queue [X] front: Queue[X] -> X size: Queue[X] -> Integer isempty: Queue[X] -> boolean Axioms for all x in X, Q in Queue[X] leave(create()) = Undefined leave(enter (x, Q)) = if isempty(q) then create() else enter(x, leave (Q)) front(create()) = Undefined front(enter (x, Q)) = if isempty(q) then x else front(q) size(create()) = 0 size(enter (x, Q)) = 1 + size(q) isempty(create()) = true isempty(enter (x, Q)) = false Konstruktorerne i denne algebraiske specifikation er create og enter. Forskellen i indsættelses- og slettedisciplin mellem stakke og køer fremgår tydeligt, hvis man sammenligner ligninger for leave i denne specifikation med ligningerne for pop i stack. 226

17 Prioritetskøer. En prioritetskø er en datatype, hvor hvert kø-element har tilknyttet en prioritet. Karakteristiske operationer: Enter(el, pr) Indsæt elementet el med prioritet pr. Leave Udtag elementet med den højeste prioritet. To naive implementationsstrategier: 1. Enter ordner elementerne efter prioritet. O(n). Leave udtager element. O(1) 2. Leave søger efter element med max prioritet. O(n). Enter indsætter element. O(1) Der findes en meget bedre implementationsstrategi, som kaldes en hob. Vi vender tilbage til prioritetskøer og hobe senere i kurset, hvor vi vil bruge et helt kapitel på emnet. 227

16 Træer. Noter. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype.

16 Træer. Noter. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype. 16 Træer. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype. Gennemløb af binære træer. Træer i Eiffel. 229 Definition af et træ.

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

3 Algebraisk Specifikation af Abstrakte Datatyper.

3 Algebraisk Specifikation af Abstrakte Datatyper. 3 Algebraisk Specifikation af Abstrakte Datatyper. Specifikation kontra program. Bestanddele af en algebraisk specifikation. Klassificering af funktioner i en ADT. Systematisk definition af ligninger.

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

4 Basal Objekt-orienteret Programmering I.

4 Basal Objekt-orienteret Programmering I. 4 Basal Objekt-orienteret Programmering I. Klasser i forhold til abstrakte datatyper og record-typer. Variable og operationer. Klasse-interfaces. Klasser og typer. Klasse-instantiering og initialisering.

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

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer Introduktion til datastrukturer Introduktion til datastrukturer Philip Bille Datastrukturer Datastruktur. Metode til at organise data så det kan søges i/tilgås/manipuleres effektivt. Mål. Hurtig Kompakt

Læs mere

Introduktion til datastrukturer. Philip Bille

Introduktion til datastrukturer. Philip Bille Introduktion til datastrukturer Philip Bille Plan Datastrukturer Stakke og køer Hægtede lister Dynamiske tabeller Datastrukturer Datastrukturer Datastruktur: Metode til at organise data så det kan søges

Læs mere

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer Introduktion til datastrukturer Introduktion til datastrukturer Philip Bille Datastrukturer Datastruktur. Metode til at organise data så det kan søges i/tilgås/manipuleres effektivt. Mål. Hurtig Kompakt

Læs mere

Introduktion til datastrukturer

Introduktion til datastrukturer Introduktion til datastrukturer Datastrukturer Stakke og køer Hægtede lister Dynamiske tabeller Philip Bille Introduktion til datastrukturer Datastrukturer Stakke og køer Hægtede lister Dynamiske tabeller

Læs mere

Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012. May 15, 2012

Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012. May 15, 2012 Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012 May 15, 2012 1 CONTENTS 2012 CONTENTS Contents 1 Kompleksitet 3 1.1 Køretid................................................ 3 1.2 Asymptotisk

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave

Læs mere

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer 1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer på disse. Typer af lister: Array Enkelt linket liste Dobbelt linket Cirkulære lister Typer af køer: FILO FIFO

Læs mere

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17 Datastrukturer & Algoritmer, Datalogi C Forelæsning 2/11-2004 Henning Christiansen Stakke, køer og lidt om hægtede lister - kapitel 16 og 17 Fundamentale datastrukturer man får brug for igen og igen Et

Læs mere

29 Opsamling af Objekt-orienteret Programmering.

29 Opsamling af Objekt-orienteret Programmering. 29 Opsamling af Objekt-orienteret Programmering. Bottom-up kontra top-down design. "The shopping list approach". Hvordan finder man på objekterne. Klasser og dataabstraktion. Klasse interface og interface-teknikker.

Læs mere

Rename og redefine. Abstrakte klasser. Dynamisk binding.

Rename og redefine. Abstrakte klasser. Dynamisk binding. 11 Nedarvning II. Enkeltnedarvning i Eiffel. Rename og redefine. Initialisering af superklasse-dele af et objekt. Interfaces til klienter og subklasser. Typesammenlignelighed og polymorfi. Abstrakte klasser.

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

Stakke, køer og lidt om hægtede lister

Stakke, køer og lidt om hægtede lister Datastrukturer & Algoritmer, Datalogi C Forelæsning 4/11-2003 Henning Christiansen Stakke, køer og lidt om hægtede lister - kapitel 16 og 17 Hvorfor? Fundamentale datastrukturer man får brug for igen og

Læs mere

Datastrukturer (recap)

Datastrukturer (recap) Dictionaries Datastrukturer (recap) Data: Datastruktur = data + operationer herpå En ID (nøgle) + associeret data. Operationer: Datastrukturens egenskaber udgøres af de tilbudte operationer (API for adgang

Læs mere

20 Filer og indekser.

20 Filer og indekser. 20 Filer og indekser. Filbegrebet. Sekventielle og direkte filer. Filer i Eiffel. Eksternt dataområde for objekter. Lageradminstration og postlængder. Indeksbegrebet. Konsekutiv, kædet og vilkårlig organisering.

Læs mere

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. 26 Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. Hvad er programverifikation? Bevisregel for 'tom kommando'. Bevisregel for assignment. Bevisregler for selektive

Læs mere

Danmarks Tekniske Universitet

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

Læs mere

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

Programmeringscamp. Implementer funktionerne én for én og test hele tiden. Programmeringscamp De to opgaver træner begge i at lave moduler som tilbyder services der kan bruges af andre, samt i at implementere services efter en abstrakt forskrift. Opgave 1 beder jer om at implementere

Læs mere

17 Søgning og Søgetræer.

17 Søgning og Søgetræer. 17 Søgning og Søgetræer. Lineær og inær søgning i lister. inære søgetræer. Søgning efter knude i træ. Indsættelse af knude i træ. Søgning i og sortering af inært søgetræ. Sletning af knude i inært søgetræ.

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

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

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

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser. 10 Nedarvning I. Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Dynamisk binding og virtuelle operationer. Decentraliseret/centraliseret

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

18 Multivejstræer og B-træer.

18 Multivejstræer og B-træer. 18 Multivejstræer og B-træer. Multivejs søgetræer. Søgning i multivejssøgetræer. Pragmatisk lagring af data i multivejstræer. B-træer. Indsættelse i B-træer. Eksempel på indsættelse i B-træ. Facts om B-træer.

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

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

Årsagen til fejl. Erkendelse af fejl. Håndtering af fejl.

Årsagen til fejl. Erkendelse af fejl. Håndtering af fejl. 9 Fejlhåndtering Årsagen til fejl Erkelse af fejl Håndtering af fejl Fejlerkelse og -håndtering i objekt-orienterede sprog Fejlerkelse og -håndtering i Eiffel Udbredelse af fejl i Eiffel Nuanceret fejlhåndtering

Læs mere

Videregående Programmering for Diplom-E Noter

Videregående Programmering for Diplom-E Noter Videregående Programmering for Diplom-E Noter 1. Uddelegering Ét af de væsentlige principper i objektorienteret programmering er, at enhver klasse selv skal kunne "klare ærterne". Enhver klasse skal altså

Læs mere

Datastrukturer (recap) Datastruktur = data + operationer herpå

Datastrukturer (recap) Datastruktur = data + operationer herpå Dictionaries Datastrukturer (recap) Datastruktur = data + operationer herpå Datastrukturer (recap) Data: Datastruktur = data + operationer herpå En ID (nøgle) + associeret data (ofte underforstået, også

Læs mere

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo Philip Bille Nærmeste naboer. Vedligehold en dynamisk mængde S af elementer. Hvert element har en nøgle key[] og satellitdata data[]. operationer. PREDECESSOR(k): returner element med største nøgle k.

Læs mere

Prioritetskøer og hobe. Philip Bille

Prioritetskøer og hobe. Philip Bille Prioritetskøer og hobe Philip Bille Plan Prioritetskøer Træer Hobe Repræsentation Prioritetskøoperationer Konstruktion af hob Hobsortering Prioritetskøer Prioritetskø Vedligehold en dynamisk mængde S af

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet ksamen 036, side af sider anmarks Tekniske Universitet Skriftlig prøve, den 3. maj 0. Kursusnavn: lgoritmer og datastrukturer Kursus nr. 036. Varighed: timer Tilladte hjælpemidler: lle skriftlige hjælpemidler.

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

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3 02105 Eksamensnoter Lasse Herskind S153746 12. maj 2017 Indhold 1 Sortering 3 2 Analyse af algoritme 4 2.1 Køretid.......................................... 4 2.2 Pladsforbrug.......................................

Læs mere

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder. Denne guide er oprindeligt udgivet på Eksperten.dk Collections i.net Når du kigger i namespacet System.Collections finder du over 10 forskellige klasser. At vælge den rigtige til netop din applikations

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

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 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

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

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1 Spørgsmål 1 Grundlæggende objektorienterede begreber o Klasse (class) o Objekt (object) o Metode (method), herunder return type og parametre o Instansvariable (instance variables) & egenskaber (properties),

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

Objekt-orienteret programmering uden klasser: Self.

Objekt-orienteret programmering uden klasser: Self. Objekt-orienteret programmering uden klasser: Self. Sammenligning klasse-baseret og klasseløs programstrukturering. Basale forhold Singulære objekter Dynamisk nedarvning Variable i forhold til metoder.

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af 2 sider Danmarks Tekniske Universitet Skriftlig prøve, den 23. maj 20. Kursusnavn: Algoritmer og datastrukturer I Kursus nr. 0205. Varighed: 4 timer Tilladte hjælpemidler: Alle skriftlige hjælpemidler.

Læs mere

2 Abstrakte datatyper.

2 Abstrakte datatyper. 2 Abstrakte datatyper. Motivere eksempel: top-down udvikling af program 'mini-bank' Strukturering af et program: efter data eller funktion? Definition af en abstrakt datatype og tilknyttede begreber. Fænomener,

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

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

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

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer.

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer. 14 Algoritmeanalyse. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. O og Ω. Køretid for forskellige kontrolstrukturer. Eksempler på algoritmeanalyse. Eksponentiel og polynomiel

Læs mere

Algoritmedesign med internetanvendelser ved Keld Helsgaun

Algoritmedesign med internetanvendelser ved Keld Helsgaun Algoritmedesign med internetanvendelser ved Keld Helsgaun 1 Analyse af algoritmer Input Algoritme Output En algoritme er en trinvis metode til løsning af et problem i endelig tid 2 Algoritmebegrebet D.

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

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

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille Binære søgetræer Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb Philip Bille Binære søgetræer Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor

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

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

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

Datastrukturer (recap)

Datastrukturer (recap) Dictionaries Datastrukturer (recap) Data: Datastruktur = data + operationer herpå En ID (nøgle) + associeret data. Operationer: Datastrukturens egenskaber udgøres af de tilbudte operationer (API for adgang

Læs mere

Algoritmeanalyse. Øvre grænse for algoritme. Øvre grænse for problem. Nedre grænse for problem. Identificer essentiel(le) operation(er)

Algoritmeanalyse. Øvre grænse for algoritme. Øvre grænse for problem. Nedre grænse for problem. Identificer essentiel(le) operation(er) Algoritmeanalyse Identificer essentiel(le) operation(er) Øvre grænse for algoritme Find øvre grænse for antallet af gange de(n) essentielle operation(er) udføres. Øvre grænse for problem Brug øvre grænse

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

Basale forudsætninger. Sortering ved fletning med tre bånd, i to faser.

Basale forudsætninger. Sortering ved fletning med tre bånd, i to faser. 25 Sortering III. Basale forudsætninger. Sortering ved fletning med tre bånd, i to faser. Sortering ved fletning, med fire bånd, i én fase (balanceret fletning). Polyfase fletning med tre bånd. Generaliseret

Læs mere

User Guide AK-SM 720 Boolean logic

User Guide AK-SM 720 Boolean logic User Guide AK-SM 720 Boolean logic ADAP-KOOL Refrigeration control systems Anvendelse Funktionen er indeholdt i Systemmanager type AK-SM 720, og kan anvendes til brugerdefinerede funktioner. Funktionerne

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

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo Philip Bille er. Vedligehold en dynamisk mængde S af elementer. Hvert element har en nøgle x.key og satellitdata x.data. operationer. PREDECESSOR(k): returner element x med største nøgle k. SUCCESSOR(k):

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

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

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

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

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

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22.

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22. Klasser og Objekter i Python Uge 46 Learning Python: kap 15-16, 19-22. Klasser og objekter En klasse beskriver en klump af samhørende funktioner og variable En klasse er en beskrivelse. En kage form Klassens

Læs mere

Programmering og Problemløsning, 2017

Programmering og Problemløsning, 2017 Programmering og Problemløsning, 2017 Typer og Mønstergenkendelse Martin Elsman Datalogisk Institut Københavns Universitet DIKU 23. Oktober, 2017 Martin Elsman (DIKU) Programmering og Problemløsning, 2017

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

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

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

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at

Læs mere

Mark Jeays simple solution to the Rubik s cube oversat og redigeret af Jess Bonde. -

Mark Jeays simple solution to the Rubik s cube oversat og redigeret af Jess Bonde. - Mark Jeays simple solution to the Rubik s cube oversat og redigeret af Jess Bonde. jess@rubiks.dk - http://www.rubiks.dk Trin 0 Introduktion & notation Trin 1 De tre øverste sidestykker Trin 2 Hjørner

Læs mere

Træer. Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/

Træer. Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/ Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/11-2004 Træer En meget vigtig datastruktur Repræsentation af sprog (i meget generel betydning), syntakstræer: Java (i en compiler), SQL (i et databasesystem),

Læs mere

Søgetræer: Generel repræsentation af (sorterede) mængder og funktioner Databasesystemer...

Søgetræer: Generel repræsentation af (sorterede) mængder og funktioner Databasesystemer... Datastrukturer & Algoritmer, Datalogi C Forelæsning 11/11-2003 Træer En meget vigtig datastruktur Repræsentation af sprog (i meget generel betydning), syntakstræer: Java (i en compiler), SQL (i et databasesystem),

Læs mere

30 Objekt-orienteret Programmering i Andre Sprog.

30 Objekt-orienteret Programmering i Andre Sprog. 30 Objekt-orienteret Programmering i Andre Sprog. Abstrakte datatyper i Pascal. Abstrakte datatyper i Modula og Ada. C++ Overordnet organisering Instantiering og initialisering. Interfaces. Nedarvning.

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet Eksamen 02105, F14 side 1 af 14 Danmarks Tekniske Universitet Skriftlig prøve, den 22. maj 2014. Kursusnavn: Algoritmer og datastrukturer 1 Kursusnummer: 02105 Hjælpemidler: Skriftlige hjælpemidler. Det

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

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:

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

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

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

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser 3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse

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

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

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

Prioritetskøer. Prioritetskøer Træer og hobe Repræsentation af hobe Algoritmer på hobe Hobkonstruktion Hobsortering. Philip Bille

Prioritetskøer. Prioritetskøer Træer og hobe Repræsentation af hobe Algoritmer på hobe Hobkonstruktion Hobsortering. Philip Bille Prioritetskøer Prioritetskøer Træer og hobe Repræsentation af hobe Algoritmer på hobe Hobkonstruktion Hobsortering Philip Bille Prioritetskøer Prioritetskøer Træer og hobe Repræsentation af hobe Algoritmer

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

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

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

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