Elementære datastrukturer

Størrelse: px
Starte visningen fra side:

Download "Elementære datastrukturer"

Transkript

1 Elementære datastrukturer Stak ADT Stakke, køer og lister Træer Prioritetskøer Hashing Den abstrakte datatype (ADT) stak indeholder vilkårlige objekter. Indsættelse og fjernelse følger sidst-ind-først-ud princippet. Centrale operationer: push(object): indsætter et objekt object pop(): fjerner og returnerer det sidst indsatte objekt Hjælpeoperationer: object top(), integer size(), boolean isempty() Anvendelser af stakke Direkte anvendelser Besøgte sider i en Web-browser Fortryd-sekvens i et tekstredigeringsprogram Kæde af metodekald i et køretidssystem (f.eks. JVM) Indirekte anvendelser Hjælpedatastruktur i algoritmer Komponent i andre datastrukturer 3 Objekter tilføjes fra venstre mod højre. En variabel t holder rede på indekset af topelementet (størrelsen er t + ). S Array-baseret stak Algorithm push(o) if t = S.length " then throw FullStackException else t! t + S[t]! o Algorithm pop() if isempty() then throw EmptyStackException else t! t " return S[t + ] 0 t

2 Dynamisk array-baseret stak I push kan vi - i stedet for at kaste en undtagelse, hvis arrayet er fyldt op - erstatte arrayet med et større array Hvor stort skal det nye array være? Inkrementel strategi: øg størrelsen med en konstant, c Fordoblingsstrategi: fordobl størrelsen Algorithm push(o) if t = S.length " then A! new array of size for i! 0 to t do A[i]! S[i] S! A t! t + S[t]! o Sammenligning af strategier Vi sammenligner de to strategier ved at analysere den samlede køretid T(n), der skal benyttes for at udføre en serie af af n push-operationer Det antages, at stakken fra starten er tom, og at arrayet har størrelsen Ved den amortiserede tid for en push-operation vil vi forstå operationens gennemsnitlige tidsforbrug, d.v.s. T(n)/n Analyse af den inkrementelle strategi Vi erstatter arrayet k = n/c gange Det samlede tidsforbrug T(n) for en serie af n push-operationer er proportionalt med n + c + c + 3c + c + + kc = n + c( k) = n + ck(k + )/ Da c er en konstant, har vi, at T(n) er O(n + k ), og dermed O(n ) Den amortiserede tid for en push-operation er O(n) Direkte analyse af fordoblingsstrategien Vi erstatter arrayet k = log n gange Det samlede tidsforbrug T(n) for en serie af n pushoperationer proportional med n k = n + k + " = n + n " = 3n " T(n) er O(n) Den amortiserede tid for en push-operation er O() kvotientrække = =

3 Bogholdermetoden Bogholdermetoden (fortsat) Bogholdermetoden bestemmer amortiseret køretid ved brug af et system af indtægter og udgifter Computeren betragtes som en betalingsautomat, der kræver et fast beløb ( krone) for at udføre en konstant mængde af beregninger Der opstilles et skema for betalingen. Skemaet, der kaldes for amortiseringsskemaet, skal være konstrueret sådan, at der altid er penge nok til at betale for den aktuelle operation Amortisering: tilbagebetaling af lån Den enkelte operation må gerne prissættes højere end antallet af primitive operationer tilsiger De enkelte operationer kan således låne til/fra hinanden, dog ikke mere end der er likviditet til I praksis betyder det, at nogle operationer forudbetaler for andre (amortiseret tid) # (samlet betaling i kroner) / (# operationer) 0 Amortiseringsskema for fordoblingsstrategien Betragt igen de k faser, hvor hver fase indeholder dobbelt så mange pushoperationer som den forrige Ved afslutningen af hver fase skal vi sørge for at have sparet nok op til, at pushkaldene i næste fase kan betales. Når en fase afsluttes, bør vi have opsparet tilstrækkeligt til, at vi kan betale for array-kopieringen i starten af næste fase 0 3 push Vi tager 3 kroner for en push-operation. De overskydende kroner gemmes i sidste halvdel af arrayet. Ved afslutningen af en fase, hvor stakken indeholder i elementer, vil der være gemt (i/) = i kroner. Derfor udføres hver push-operation i O() amortiseret tid. Kø ADT En kø indeholder vilkårlige objekter. Indsættelse og fjernelse følger førstind-først-ud princippet. Centrale operationer: enqueue(object): indsætter et objekt bagest object dequeue(): fjerner og returnerer det forreste objekt Hjælpeoperationer: object front(), integer size(), boolean isempty() Undtagelser: Forsøg på at udføre dequeue eller front på en tom kø kaster en EmptyQueueException

4 Anvendelser af køer Enkelthægtet liste Direkte anvendelser Ventelister Tilgang til delte ressourcer (f.eks. en printer) Multiprogrammering En enkelthægtet liste er en konkret datastruktur, der indeholder en sekvens af knuder Hver knude lagrer et element en hægte til den næste knude elem next knude Indirekte anvendelser Hjælpe-datastruktur i algoritmer Komponent i andre datastrukturer A B C D 3 Kø implementeret med en enkelthægtet liste Det forreste element lagres i den første knude Det bageste element lagres i den sidste knude Liste ADT En liste modellerer en sekvens af positioner, der kan lagre vilkårlige objekter Den tillader indsættelse i og fjernelse fra midten f Pladsforbruget er O(n), og hver operation tager O() tid. r knuder elementer Forespørgelsesmetoder: isfirst(p), islast(p) Tilgangsmetoder: first(), last(), before(p), after(p) Opdateringsmetoder: replaceelement(p, o), swapelements(p, q) insertbefore(p, o), insertafter(p, o), insertfirst(o), insertlast(o), remove(p)

5 Dobbelthægtet liste Træer Knuder implementer positioner og lagrer: et element en hægte til den foregående knude en hægte til den efterfølgende knude Desuden kan der være specielle hoved- og haleknuder. hoved prev next elem knuder knuder/positioner hale I datalogi er et træ en abstrakt model af en hierarkisk struktur Et træ består af knuder med en forældre/barn-relation Anvendelser: Organisationsdiagrammer Filsystemer Indholdsfortegnelser Computers R Us Sales Manufacturing R&D US International Laptops Desktops Europe Asia Canada elementer Terminologi for træer Træ ADT Rod: knude uden forælder (A) Intern knude: knude med mindst et barn (A, B, C, F) Ekstern knude (også kaldet et blad): knude uden børn (E, I, J, K, G, H, D) Forfædre til en knude: forælder, bedsteforælder, oldeforælder o.s.v. Dybden af en knude: antallet af forfædre Højden af et træ: maksimale dybde for træets knuder (3) Efterkommere af en knude: børn, børnebørn o.s.v. Undertræ: et træ bestående af en knude og dennes efterkommere E B F I J K A G C H undertræ D Positioner benyttes til at abstrahere knuder Generiske metoder: integer size() boolean isempty() objectiterator elements() positioniterator positions() swapelements(p, q) object replaceelement(p, o) Tilgangsmetoder: position root() position parent(p) positioniterator children(p) Forespørgselsmetoder: boolean isinternal(p) boolean isexternal(p) boolean isroot(p) Opdateringsmetoder: defineres ikke her 0

6 Preorder-traversering En traversering besøger knuderne i et træ på en systematisk måde Ved preorder-traversering besøges en knude før sine efterkommere Anvendelse: udskriv et struktureret dokument Make Money Fast! 3 Algorithm preorder(v) visit(v) for each child w of v preorder(w). Motivations. Methods References. Greed. Avidity. Stock Fraud. Ponzi Scheme.3 Bank Robbery Postorder-traversering Ved en postorder-traversering besøges en knude efter sine efterkommere Anvendelse: beregn pladsforbruget for filer i et katalog og dettes underkataloger. hc.doc 3K 3 homeworks/ hnc.doc K DDR.java 0K cs/ Algorithm postorder(v) for each child w of v postorder(w) visit(v) programs/ Stocks.java K Robot.java 0K todo.txt K Amortiseret analyse af træ-traversering Den tid, der bruges til preorder- og postorder-traversering af et træ med n knuder, er proportional med summen - taget over enhver knude v i træet - af tiden, der anvendes til et rekursivt kald for v Kaldet for v koster (c v + ) kroner, hvor c v er antallet af børn for v Betal krone for v, og krone for hver af v s børn. Dermed betales der for enhver knude gange, en gang for dens eget kald, og en gang for dens fars kald Derfor er traverseringstiden O(n) Binære Træer Et binært træ er et træ med følgende egenskaber: Hver interne knude har to børn Børnene for en knude er et ordnet par De to børn kaldes for henholdsvis venstre og højre barn Alternativ rekursiv definition: Et binært træ er enten et træ bestående af en enkelt knude, eller et træ, hvis rod har et ordnet par af børn, som hver er et binært træ Anvendelser: Søgning Beslutningsprocesser Repræsentation af aritmetiske udtryk D B H E I A F C G 3

7 Beslutningstræ Interne knuder: spørgsmål med ja/nej-svar Eksterne knuder: beslutninger Eksempel: Valg af spisested Aritmetisk udtryktrykstræ Interne knuder: operatorer Eksterne knuder: operander Eksempel: Aritmetisk udtrykstræ for udtrykket ( % (a " ) + (3 % b)) Want a fast meal? + Yes No % % How about coffee? On expense account? - 3 b Yes No Yes No Starbucks In N Out Antoine's Denny s a Egenskaber ved binære træer Inorder-traversering Notation n antal knuder e antal eksterne knuder i antal interne knuder h højde Egenskaber: e = i + n = e " h # i h # (n " )/ e & h + e # h h & log e h & log (n + ) " Ved en inorder-traversering besøges en knude efter sit venstre undertræ, men før sit højre undertræ Anvendelse: Tegning af et binært træ x(v) = inorder-rangen af v y(v) = dybden af v Algorithm inorder(v) if isinternal(v) then inorder(leftchild(v)) visit(v) if isinternal(v) then inorder(rightchild(v)) 3

8 Euler-tur-traversering Udskrivning af aritmetiske udtryk Generisk traversering af et binært træ Indeholder preorder-, postorder- og inorder-traversering som specialtilfælde Gå rundt i træet og besøg hver knude 3 gange: første besøg, L (preorder) andet besøg, B (inorder) tredje besøg, R (postorder) + L % B R - % 3 Specialisering af inorder-traversering. Udskriv ( inden traversering af venstre undertræ Udskriv operand eller operator, når en knude besøges Udskriv ) efter traversering af højre undertræ % - a + % 3 b Algorithm printexpression(v) if isinternal(v) then print( ( ) printexpression(leftchild(v)) print(v.element ()) if isinternal(v) then printexpression(rightchild(v)) print( ) ) (( % (a - )) + (3 % b)) 30 Hægtet datastruktur til repræsentation af træer Hægtet datastruktur til repræsentation af binære træer En knude repræsenteres ved et objekt, der indeholder Element Hægte til forældreknude Sekvens af børneknuder B B A D F En knude repræsenteres ved et objekt, der indeholder Element Hægte til forældreknude Hægte til venstre barn Hægte til højre barn B A B D A D F A D C E C E 3 C E C E 3

9 Array-baseret repræsentation af binære træer Prioritetskø ADT Knuder lagres i et array Lad rank(node) være defineret således: rank(root) = hvis node er venstre barn af parent(node), rank(node) = *rank(parent(node)) hvis node er højre barn af parent(node), rank(node) = *rank(parent(node)) + A 3 B D E F C J 0 G H En prioritetskø lagrer en samling af emner Hvert emne er et par (nøgle, element) Centrale metoder: insertitem(k, o) indsætter et emne med nøglen k og elementet o removemin() fjerner det emne, der har den mindste nøgle og returnerer det tilhørende element Yderligere metoder: minkey() returnerer, men fjerner ikke, den mindste nøgle minelement() returnerer, men fjerner ikke, det element, der har mindst nøgle size(), isempty() Anvendelser: Opgaveplanlægning Grafalgoritmer 33 3 Total ordningsrelation Sortering med en prioritetskø Nøglerne i en prioritetskø kan være vilkårlige objekter, for hvilke der er defineret en total ordningsrelation To forskellige emner i en prioritetskø kan have samme nøgle Total ordningsrelation # Refleksivitet: x # x Antisymmetri: x # y ' y # x ( x = y Transitivitet: x # y ' y # z ( x # z Vi kan benytte en prioritetskø til at sortere en mængde af sammenlignelige objekter Indsæt elementerne et efter et med en serie af insertitem(e, e)-operationer Udtag elementerne i sorteret orden med en serie af removemin()- operationer Køretiden for denne sorteringsmetode afhænger af implementeringen af prioritetskøen Algorithm PQ-Sort(S, C) Input sequence S, comparator C for the elements of S Output sequence S sorted in increasing order according to C P! empty priority queue with comparator C while S.isEmpty() do e! S.remove(S. first()) P.insertItem(e, e) while P.isEmpty() do e! P.removeMin() S.insertLast(e) 3 3

10 Sekvens-baseret prioritetskø Sortering ved udvælgelse Implementering med en usorteret sekvens: Gem emnerne i en liste-baseret sekvens i vilkårlig rækkefølge 3 Effektivitet: insertitem tager O() tid, da vi kan indsætte emnet i starten eller slutningen af listen removemin, minkey og minelement tager O(n) tid, da vi skal gennemløbe hele sekvensen for at finde den mindste nøgle Implementering med en sorteret sekvens: Gem emnerne i en liste-baseret sekvens i sorteret rækkefølge 3 Effektivitet: insertitem tager O(n) tid, da vi skal finde den plads, hvor emnet skal indsættes removemin, minkey og minelement tager O() tid, da den mindste nøgle er forrest i listen Sortering ved udvælgelse er den udgave af PQ-sort, hvor prioritetskøen er implementeret ved brug af en usorteret sekvens. 3 Køretid: Indsættelse af elementerne i prioritetskøen med n insertitemoperationer tager O(n) tid Fjernelse af elementerne i sorteret rækkefølge fra prioritetskøen med n removemin-operationer tager tid proportional med n Metoden kører i O(n ) tid 3 3 Sortering ved indsættelse Sortering ved indsættelse på stedet (in-place) Sortering ved indsættelse er den udgave af PQ-sort, hvor prioritetskøen er implementeret ved brug af en sorteret sekvens 3 Køretid: Indsættelse af elementerne i prioritetskøen med n insertitemoperationer tager tid proportional med n Fjernelse af elementerne i sorteret rækkefølge fra prioritetskøen med n removemin-operationer tager O(n) tid Metoden kører i O(n ) tid I stedet for at bruge en ekstern datastruktur, kan vi implementere både sortering ved udvælgelse og sortering ved indsættelse på stedet En del af input-sekvensen tjener som prioritetskø For sortering ved indsættelse holdes den første del af sekvensen sorteret, og swapelementsoperationen benyttes til at udvide denne del af sekvensen

11 Hvad er en hob? Højden af en hob En hob er et binært træ, der lagrer nøglerne i de interne knuder, og som opfylder følgende betingelser: Hob-orden: For enhver intern knude, v, med undtagelse af roden, gælder key(v) & key(parent(v)) Komplet binært træ: Lad h være højden af hoben () for i = 0,, h " er der i knuder med dybde i () på dybden h " er de interne knuder til venstre for de eksterne knuder Sætning: En hob, der indeholder n nøgler har højden O(log n) Bevis: (vi anvender egenskaben for et komplet binært træ) Lad h være højden af en hob, der indeholder n nøgler Da der er i nøgler på dybden i = 0,, h ", og mindst en nøgle på dybden h ", har vi, at n & h" + Og dermed n & h", d.v.s. h # log n + dybde 0 h- h- nøgler h- Hobe og prioritetskøer Vi kan bruge en hob til at implementere en prioritetskø I hver intern knude gemmes et (nøgle, element)-par Der holdes rede på den sidste knude (, Per) (, Jens) (, Anna) (, Søs) (, Mads) Indsættelse i en hob Indsættelses-algoritmen består at af 3 trin: () Find indsættelsesknuden z (den nye sidste knude) () Gem k i z og omdan z til en intern knude (3) Genskab hob-ordens-egenskaben z Indsættelsesknude z sidste knude 3

12 upheap Fjernelse fra en hob Efter indsættelse af en nøgle k kan hob-ordens-egenskaben blive ødelagt Algoritmen upheap genskaber egenskaben ved at ombytte k på en opadgående vej fra indsættelsesknuden. Algoritmen terminerer, når k når op til roden eller til en knude, hvis forældre har en nøgle, der er mindre end eller lig med k Da en hob har højden O(log n), kører upheap i O(log n) tid z z Fjernelses-algoritmen består at af 3 trin: () Erstat roden med nøglen i den sidste knude, w () Omdan w og dens børn til en ekstern knude (3) Genskab hob-ordens-egenskaben w w Sidste knude downheap Efter erstatning af rodens nøgle med k for den sidste knude, kan hob-ordensegenskaben være ødelagt. Algoritmen downheap genskaber egenskaben ved at ombytte k på en neadadgående vej fra roden. Algoritmen terminerer, når k når ned til en ekstern knude eller til en knude, hvis børn har nøgler, der er større end eller lig med k. Da en hob har højden O(log n), kører downheap i O(log n) tid. w w Heap-Sort Betragt en prioritetskø med n emner, der er implementeret ved hælp af en hob Pladsforbruget er O(n) Metoderne insertitem og removemin tager O(log n) tid Metoderne size, isempty, minkey og minelement tager O() tid Ved at bruge en hob-baseret prioritetskø kan vi sortere en sekvens i O(n log n) tid Denne algoritme, der kaldes Heap-sort, er meget hurtigere end kvadratiske sorteringsalgoritmer, som f.eks. sortering ved udvælgelse og sortering ved indsættelse

13 Array-baseret hob Fletning af to hobe Vi kan repræsentere en hob med n nøgler ved hjælp af et array af længden n + For knuden på indeks i er det venstre barn på indeks i det højre barn på indeks i + Hægterne imellem knuderne lagres ikke De eksterne knuder er ikke repræsenteret Cellen på indeks 0 bruges ikke Operationen insertitem svarer til indsættelse på indeks n Lad der være givet to hobe og en nøgle k Vi kan skabe et nyt træ, hvor roden indeholder k og har de to hobe som undertræer Hob-ordenen retableres ved at udføre downheap Operationen removemin svarer til fjernelse på indeks 0 Bund-til-top hob-konstruktion Eksempel Vi kan konstruere en hob med n givne nøgler i log n faser ved at benytte bund-til-top hobkonstruktion i " i " 3 0 I fase i flettes hobe med i " nøgler til hobe med i+ " nøgler i+ " 3 0

14 Eksempel (fortsat) Eksempel (fortsat) Eksempel (slut) Analyse Vi visualiserer det værste tilfælde for en downheap-operation med veje, der først går til højre og derefter gentagne gange til venstre, indtil bunden af hoben nås Da en knude højst gennemløbes af sådanne veje, er antallet af knuder på disse veje O(n) Derfor udføres bund-til-top hob-konstruktion i O(n) tid 0 0 3

15 Ordbog ADT (Dictionary) Logfil En ordbog lagrer en samling af emner, der kan søges i Hvert emne er et par (nøgle, element) De centrale operationer for en ordbog er søgning, indsættelse og fjernelse af emner Anvendelser: Adressebog Kontokort-autorisering Afbildning fra værtsnavne (f.eks. akira.ruc.dk) til internetadresser (f.eks ) Metoder: findelement(k): Hvis ordbogen indeholder et emne med nøgle k, så returneres dets element. Ellers returneres det specielle element NO_SUCH_KEY insertitem(k, o): Indsætter emnet (k, o) i ordbogen removeelement(k): Hvis ordbogen har et emne med nøglen k, så fjernes det, og dets element returneres. Ellers returneres det specielle element NO_SUCH_KEY size(), isempty() keys(), elements() En logfil er en ordbog, der er implementeret ved hjælp af en usorteret sekvens Emnerne lagres i vilkårlig orden i en sekvens (baseret på en dobbelt-hægtet liste eller et cirkulært array) Effektivitet: insertitem tager O() tid, da vi kan indsætte det nye emne forrest eller bagest i sekvensen findelement og removeelement tager O(n) tid, da vi i værste tilfælde skal gennemløbe hele sekvensen for at lede efter et emne med den givne nøgle En logfil er kun effektiv for små ordbøger, eller for hvilke indsættelse er den mest almindelige operation, mens søgning og sletning er sjældne operationer (f.eks. registrering af login) Hashfunktioner og hashtabeller Eksempel En hashfunktion afbilder nøgler af en given type til heltal i et fast interval [0, N - ] Eksempel: h(x) = x mod N er en hashfunktion for heltalsnøgler Heltallet h(x) kaldes for hashværdien for nøglen x En hashtabel for en given nøgletype består af En hashfunktion h Et array (kaldet tabellen) af størrelse N En hashtabel for en ordbog, der indeholder emner (cpr, navn), hvor cpr er et 0-cifret positivt heltal. Hashtabellen benytter et array af størrelse N = 0000 og hashfunktionen h(x) = de sidste cifre i x 0 3 Jørgen Clevin Lotte Heise Tove Fergo Pia Kjærsgaard Når en ordbog implementeres ved hjælp af en hashtabel, er målet at lagre emnet (k, o) på indeks i = h(k) 0

16 Hashfunktioner Hashkode-afbildninger En hashfunktion specificeres sædvanligvis som sammensætningen af to funktioner: Hashkode-afbildningen: h : nøgler) heltal Komprimerings-afbildningen: h : heltal ) [0, N " ] Hashkode-afbildningen anvendes først. Derefter anvendes komprimeringsafbildningen på resultatet h(x) = h (h (x)) Målet for hashfunktionen er at sprede nøglerne på en tilsyneladende tilfældig måde Lageradresse: Vi fortolker lageradressen for nøgleobjektet som et heltal (standard hashkode for alle Java-objekter) Heltalskonvertering: Vi fortolker bittene i nøglen som et heltal Hensigtsmæssig for nøgler med en længde der er mindre end eller lig med antallet af bit i en heltalstype Komponentsum: Vi opdeler bittene i nøglen i komponenter af fast længde (f.eks., eller 3 bit), og vi summerer komponenterne (idet overløb ignoreres) Hensigtsmæssig for nøgler med en længde, der er større antallet af bit i en heltalstype Dog uhensigtsmæssig for tegnstrenge, hvor tegnenes rækkefølge har betydning ( post, stop og spot kolliderer) Hashkode-afbildninger (fortsat) Komprimerings-afbildninger Polynomiel akkumulation: Vi opdeler bittene i nøglen i komponenter af fast længde (f.eks., eller 3 bit) a 0 a a n" Vi evaluerer polynomiet p(z) = a 0 + a z + a z + + a n" z n" for en fast værdi z, idet overløb ignoreres Er særlig hensigtsmæssig for tekststrenge (for eksempel giver valget z = 33 kun kollisioner for en mængde af 0000 engelske ord) Værdien p(z) kan evalueres i O(n) tid ved hjælp af Horner s regel: Følgende værdier beregnes successivt, hver ud fra den foregående værdi i O() tid: p 0 (z) = a n" p i (z) = a n"i" + zp i" (z) (i =,,, n ") Vi har, at p(z) = p n" (z) p(z) = a 0 + z(a + z(a + + z a n" ))))))) Division: h (y) = y mod N Størrelsen N af hashtabellen vælges sædvanligvis som et primtal Multiply, Add and Divide (MAD): h (y) = (ay + b) mod N hvor a og b er ikke-negative heltal, således at a mod N * 0 (ellers ville ethvert heltal y blive afbildet til den samme værdi b) 3

17 Kollisioner Separat kædning Kollisioner optræder, når forskellige nøgler afbildes til samme celle Kollisioner er hyppige: Hvor mange personer skal være forsamlet i et selskab, for at der er mere end 0% sandsynlighed for, at mindst to personer har fødselsdag på samme dato? Svar:. Lad N være størrelsen af hashtabellen. Hvor mange indsættelser kan der da i gennemsnit foretages, før der opstår en kollision? N 00!N / Separat kædning: Lad hver celle i tabellen pege på en hægtet liste af de elementer, der afbildes til cellen Separat kædning er simpel, men kræver ekstra lagerplads, udover tabellen 0 3 Ole Olsen Birte Kjær Anisette Lineær afprøvning Åben adressering: Et kolliderende emne placeres i en anden celle i tabellen Linær afprøvning håndterer kollisioner ved at placere det kolliderende emne i den næste (cirkulært) ledige celle Hver celle, der undersøges, kaldes en afprøvning Kolliderende emner klumper sammen, hvilket bevirker, at fremtidige kollisioner skal bruge længere sekvenser af afprøvninger k h(k) 3 Eksempel: 3 h(k) = k mod 3 3 Indsæt nøglerne,,,,, 3, 3, 3 i nævnte rækkefølge Søgning med lineær afprøvning Betragt en hashtabel A, der benytter linær afprøvning findelement(k) Start i celle h(k) Prøv i konsekutive celler, indtil en af følgende hændelser indtræffer En tom celle er fundet Et emne med nøglen k er fundet N celler er blevet prøvet Algorithm findelement(k) i! h(k) p! 0 repeat c! A[i] if c = then return NO_SUCH_KEY else if c.key() = k then return c.element() else i! (i + ) mod N p! p + until p = N return NO_SUCH_KEY

18 Opdatering med lineær afprøvning For at håndtere fjernelse introduceres et specielt objekt, kaldet AVAILABLE, som erstatter fjernede elementer removeelement(k) Søg efter et emne med nøgle k Hvis et sådan emne (k, o) findes, så erstat det med det specielle emne AVAILABLE og returner elementet o Ellers returneres NO_SUCH_KEY insertitem(k, o) Kast en undtagelse, hvis tabellen er fuld Start i celle h(k) Prøv i konsekutive celler, indtil en af følgende hændelser indtræffer Der mødes en celle i, som er tom eller indeholder AVAILABLE N celler er blevet prøvet Gem emnet (k, o) in celle i Argumentation for tendens til klyngedannelse Antag, at alle positioner [i:j] indeholder poster, mens i-, j+ og j+ er tomme i- j+ j+ Så vil chancen for, at en ny post placeres på position j+ være lig med chancen for, at en ny post ønskes placeret i intervallet [i:j+] For at den nye post placeres på j+, skal dens hashværdi derimod være præcis j+ 0 Klyngedannelse Kvadratisk afprøvning (reducerer risikoen for klyngedannelse) Uheldigt fænomen Lange klynger har en tendens til at blive længere Søgelængen vokser drastisk, efterhånden som tabellen fyldes Lineær afprøvning er for langsom, når tabellen bliver 0-0% fuld Afprøvningssekvens (startende i pos = h(k)): Lineær prøvning: pos, pos +, pos +, pos + 3,... Kvadratisk prøvning: pos, pos +, pos +, pos + 3,... Kvadrering kan undgås Lad H i betegne den i te position (H 0 = pos er startpositionen) Idet fås H i- = pos + (i - ) = pos + i - i + = H i - i + H i = H i- + i -

19 Dobbelt hashing Eksempel på dobbelt hashing Dobbelt hashing benytter en sekundær hashfunktion d(k) og håndterer kollisioner ved at placere et emne på den første ledige celle i rækken (i + jd(k)) mod N for j = 0,,, N " Sædvanligt valg af komprimeringsafbildning for den sekundære hashfunktion: hvor d(k) = q - (k mod q) q < N, og q er et primtal Betragt en hashtabel af heltallige nøgler, som håndterer kollision ved dobbelt hashing N = 3 h(k) = k mod 3 d(k) = " (k mod ) k h(k) d(k) prøvning Den sekundære hashfunktion d(k) må ikke have 0-værdier De mulige værdier for d(k) er,,, q Indsæt nøglerne,,,,, 3, 3, 3 i nævnte rækkefølge Tabelstørrelsen skal være et primtal for at muliggøre afprøvning i alle celler Effektiviteten af hashing Fordele ved separat kædning Idiotsikker metode (bryder ikke sammen) Antallet af poster behøver ikke at være kendt på forhånd Sletning er simpel Tillader ens nøgler I værste tilfælde udføres søgning, indsættelse og fjernelse i O(n) tid. Det værste tilfælde optræder, når alle nøgler, der indsættes i hashtabellen, kolliderer Fyldningsgraden! = n/n har betydning for effektiviteten af en hashtabel Antag at hashværdierne er som tilfældige tal. Det kan da vises, at det forventede antal afprøvninger for indsættelse i en hashtabel med lineær afprøvning er / ( "!) Den forventede køretid for samtlige hashtabel-operationer er O() I praksis er hashing meget hurtig, forudsat at fyldningsgraden ikke er tæt på 00% Anvendelser: Databaser Oversættere Cache-lagre i browsere

20 Universel hashing Perfekt hashing En familie af hashfunktioner er universel, hvis det for ethvert 0! j,k! M- gælder, at Pr(h(j)=h(k))! /N Vælg et primtal p imellem M og M (et sådan findes altid) Vælg tilfældigt 0 < a < p og 0 < b < p, og definer h(k) = (ak + b mod p) mod N Sætning: Mængden af alle funktioner, h, som er defineret på denne måde, er universelle Sætning: Sandsynligheden for kollision ved brug en universel hashfunktion er mindre end eller lig med fyldningsgraden Universel hashing har O() gennemsnitlig effektivitet for ethvert sæt af nøgler Perfekt hashing garanterer O() værsttilfælde-effektivitet for et statisk sæt af nøgler Eksempler på statiske nøglesæt: reserverede ord i et programmeringssprog filnavnene på en CD-ROM. Ide: Brug en -niveau-struktur med universel hashing på hvert niveau Niveau : Brug hashing med kædning. De n nøgler hashes til tabellen T ved hjælp af en universel hashfunktion h Niveau : Hver plads j i T peger på en hashtabel S j med en tilknyttet universel hashfunktion h j, og med en størrelse, der er kvadratet på antallet af nøgler i S j. Grunde til ikke at bruge hashing Hvorfor bruge andre metoder? Der er ingen effektivitetsgaranti Hvis nøglerne er lange, kan hashfunktionen være for kostbar at beregne Bruger ekstra plads Understøtter ikke sortering

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

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

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

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet ksamen 06, side af sider anmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. ursusnavn: lgoritmer og datastrukturer ursus nr. 06. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer

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

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

UNION-FIND. UNION-FIND-problemet. Forbundethed kan være svær at afgøre (især for en computer) Eksempel på udførelse

UNION-FIND. UNION-FIND-problemet. Forbundethed kan være svær at afgøre (især for en computer) Eksempel på udførelse UNION-FIND-problemet UNION-FIND inddata: en følge af heltalspar (p, q); betydning: p er forbundet med q uddata: intet, hvis p og q er forbundet, ellers (p, q) Eksempel på anvendelse: Forbindelser i computernetværk

Læs mere

Dynamisk programmering

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

Læs mere

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

Induktive og rekursive definitioner

Induktive og rekursive definitioner Induktive og rekursive definitioner Denne note omhandler matematiske objekter, som formelt er opbygget fra et antal basale byggesten, kaldet basistilfælde eller blot basis, ved gentagen brug af et antal

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

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

Grafer og graf-gennemløb

Grafer og graf-gennemløb Grafer og graf-gennemløb Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges). Dvs. ordnede par af knuder. Figur: Terminologi: n = V, m = E (eller V og E (mis)bruges som V og E ).

Læs mere

Forén og find. Introduktion Hurtig find Hurtig forening Vægtet forening Stikompression Dynamiske sammenhængskomponenter.

Forén og find. Introduktion Hurtig find Hurtig forening Vægtet forening Stikompression Dynamiske sammenhængskomponenter. Forén og find Introduktion Hurtig find Hurtig forening Vægtet forening Stikompression Dynamiske sammenhængskomponenter Philip Bille Forén og find Introduktion Hurtig find Hurtig forening Vægtet forening

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

Dynamisk programmering. Flere eksempler

Dynamisk programmering. Flere eksempler Dynamisk programmering Flere eksempler Eksempel 1: Længste fælles delstreng Alfabet = mængde af tegn: {a,b,c,...,z}, {A,C,G,T}, {,1} Streng = sekvens x 1 x 2 x 3... x n af tegn fra et alfabet: helloworld

Læs mere

Iteration af et endomorft kryptosystem. Substitutions-permutations-net (SPN) og inversion. Eksklusiv disjunktion og dens egenskaber

Iteration af et endomorft kryptosystem. Substitutions-permutations-net (SPN) og inversion. Eksklusiv disjunktion og dens egenskaber Produktsystemer, substitutions-permutations-net samt lineær og differentiel kryptoanalyse Kryptologi, fredag den 10. februar 2006 Nils Andersen (Stinson 3., afsnit 2.7 3.4 samt side 95) Produkt af kryptosystemer

Læs mere

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) Efterår 2009 1 Simpel aritmetik på maskinniveau I SCO, appendix A, er det beskrevet, hvordan man adderer ikke-negative heltal

Læs mere

Repræsentation af tal

Repræsentation af tal Repræsentation af tal DM526 Rolf Fagerberg, 2009 Bitmønstre 01101011 0001100101011011... Bitmønstre skal fortolkes for at have en betydning: Tal (heltal, kommatal) Bogstaver Computerinstruktion (program)

Læs mere

Introduktion Til Konkurrenceprogrammering

Introduktion Til Konkurrenceprogrammering Introduktion Til Konkurrenceprogrammering Søren Dahlgaard og Mathias Bæk Tejs Knudsen {soerend,knudsen}@di.ku.dk Version 0.1 Indhold Indhold i Introduktion 1 1 Palindromer 3 1.1 Introduktion til Python...............

Læs mere

Oprettelse og brug af E-mail i Jubii

Oprettelse og brug af E-mail i Jubii Side 1 af 11 Få din egen mailadresse Start Internettet. Skriv denne adresse i Adressefeltet: www.jubii.dk og tyk på Enterknappen. Du har nu forbindelse med søgemaskinen: Jubii Klik på punktet: E-mail Oprettelse

Læs mere

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Programmering Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Oversigt Undervisningen Hvad er programmering Hvordan er et program organiseret? Programmering og fysik Nobelprisen

Læs mere

Databaser Obligatorisk opgave 2 Vejledende løsning

Databaser Obligatorisk opgave 2 Vejledende løsning University of Southern Denmark Department of Mathematics and Computer Science Databaser Obligatorisk opgave 2 Vejledende løsning Afleveres senest: Søndag d. 5. maj kl 23.59 Spilleregler Denne obligatoriske

Læs mere

Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010

Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010 Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010 Computere er uvurderlige redskaber for personer der ønsker at arbejde med matematiske modeller

Læs mere

15. oktober. Maskine Udlejning. Jacob Weng, Jeppe Boese og Mads Anthony. Udlejningsvirksomhed. Roskilde Tekniske Gymnasium 3.4

15. oktober. Maskine Udlejning. Jacob Weng, Jeppe Boese og Mads Anthony. Udlejningsvirksomhed. Roskilde Tekniske Gymnasium 3.4 Maskine Udlejning 15. oktober 2010 Jacob Weng, Jeppe Boese og Mads Anthony Roskilde Tekniske Gymnasium Udlejningsvirksomhed 3.4 Indholdsfortegnelse Problemformulering:... 2 Planlægning:... 2 Analyse af

Læs mere

Med TI-89 / TI-92 Plus kan du også sammenligne eller manipulere binære tal bit for bit.

Med TI-89 / TI-92 Plus kan du også sammenligne eller manipulere binære tal bit for bit. Kapitel 20: Talsystemer 20 Resumé af talsystemer... 344 Indtastning og omregning af talsystemer... 345 Udførelse af matematiske beregninger med hexadecimale og binære tal... 346 Sammenligning eller manipulation

Læs mere

Det er en af de hyppigst forekommende udregninger i den elementære talbehandling at beregne gennemsnit eller middeltal af en række tal.

Det er en af de hyppigst forekommende udregninger i den elementære talbehandling at beregne gennemsnit eller middeltal af en række tal. Tre slags gennemsnit Allan C. Malmberg Det er en af de hyppigst forekommende udregninger i den elementære talbehandling at beregne gennemsnit eller middeltal af en række tal. For mange skoleelever indgår

Læs mere

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet RSA Kryptosystemet Kryptologi ved Datalogisk Institut, Aarhus Universitet 1 Kryptering med RSA Her følger først en kort opridsning af RSA kryptosystemet, som vi senere skal bruge til at lave digitale signaturer.

Læs mere

Kort om CoinDB (Mønt- og seddelsamling):

Kort om CoinDB (Mønt- og seddelsamling): Kom godt i gang med CoinDB programmet fra PetriSoft (Holder styr på din Mønt- seddel- eller frimærkesamling) Kort om CoinDB (Mønt- og seddelsamling): CoinDB er et Windows program, der anvendes af mønt-

Læs mere

Poly. - Javapakke til behandling af polynomier

Poly. - Javapakke til behandling af polynomier Poly - Javapakke til behandling af polynomier z 3 x y x 2 3 x -3 Skrevet af Susanne Nykjær Knudsen, John Thystrup Jensen, Jens Lykke Brandt, Troels C. Damgaard, Jacob W. Winther og Mikkel Bundgaard Vejleder:

Læs mere

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42 Slide 1/42 Hvad er matematik? 1) Den matematiske metode 2) Hvad vil det sige at bevise noget? 3) Hvor begynder det hele? 4) Hvordan vælger man et sæt aksiomer? Slide 2/42 Indhold 1 2 3 4 Slide 3/42 Mængder

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

Oversigt. Operativsystemer [5]: Filsystemer. Hvad er en fil? Hvor er en fil? Strukturen af en fil. Beskrivelse af en fil

Oversigt. Operativsystemer [5]: Filsystemer. Hvad er en fil? Hvor er en fil? Strukturen af en fil. Beskrivelse af en fil Oversigt Operativsystemer [5]: Filsystemer Datalogi F Forår 2003 Jørgen Sværke Hansen cyller@diku.dk Grænseflade: Filoperationer Filens struktur Katalogstrukturer Implementering: Lagerallokering Afbildning

Læs mere

Sortering i CPH STL. Jakob Sloth, Morten Lemvigh & Mads Kristensen. CPH STL rapport 2003-2 maj 2003; revidered november 2003

Sortering i CPH STL. Jakob Sloth, Morten Lemvigh & Mads Kristensen. CPH STL rapport 2003-2 maj 2003; revidered november 2003 Sortering i CPH STL Jakob Sloth, Morten Lemvigh & Mads Kristensen CPH STL rapport 2003-2 maj 2003; revidered november 2003 1 INDHOLD S. 2 Indhold Indhold 2 1 Indledning 5 1.1 Problemstilling..........................

Læs mere

Spilstrategier. 1 Vindermængde og tabermængde

Spilstrategier. 1 Vindermængde og tabermængde Spilstrategier De spiltyper vi skal se på her, er primært spil af følgende type: Spil der spilles af to spillere A og B som skiftes til at trække, A starter, og hvis man ikke kan trække har man tabt. Der

Læs mere

Matematisk induktion

Matematisk induktion Induktionsbeviser MT01.0.07 1 1 Induktionsbeviser Matematisk induktion Sætninger der udtaler sig om hvad der gælder for alle naturlige tal n N, kan undertiden bevises ved matematisk induktion. Idéen bag

Læs mere

Basicon Nodepult. Basicon Nodepult er den moderne afløser for det traditionelle nodestativ, men har derudover en lang række fordele:

Basicon Nodepult. Basicon Nodepult er den moderne afløser for det traditionelle nodestativ, men har derudover en lang række fordele: Basicon Nodepult Programmet Basicon Nodepult henvender sig til musikere, som ofte har behov for at medbringe deres forskellige nodesamlinger til forskellige orkestre. Basicon Nodepult er den moderne afløser

Læs mere

Opgave 1 Regning med rest

Opgave 1 Regning med rest Den digitale signatur - anvendt talteori og kryptologi Opgave 1 Regning med rest Den positive rest, man får, når et helt tal a divideres med et naturligt tal n, betegnes rest(a,n ) Hvis r = rest(a,n) kan

Læs mere

Note omkring RSA kryptering. Gert Læssøe Mikkelsen Datalogisk institut Aarhus Universitet

Note omkring RSA kryptering. Gert Læssøe Mikkelsen Datalogisk institut Aarhus Universitet Note omkring RSA kryptering. Gert Læssøe Mikkelsen Datalogisk institut Aarhus Universitet 3. april 2009 1 Kryptering med offentlige nøgler Indtil midt i 1970 erne troede næsten alle, der beskæftigede sig

Læs mere

En note om Programmering

En note om Programmering En note om Programmering Kurt Nørmark Institut for Datalogi Aalborg Universitet normark@cs.aau.dk Resumé Denne note er en introduktion til programmering. Formålet er at give dig et indblik i hvad programmering

Læs mere

IT HANDLEPLAN PÅ KIRKEBY SKOLE

IT HANDLEPLAN PÅ KIRKEBY SKOLE IT HANDLEPLAN PÅ KIRKEBY SKOLE Intentionen med planen er at angive rammer for, hvad vi på Kirkeby Skole forventer eleverne skal lære om IT i deres skoleforløb på Kirkeby Skole. Som udgangspunkt skal de

Læs mere

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) int wmid, wmevent; PAINTSTRUCT Introduktion ps; til HDC hdc; programmering med switch (message) case WM_COMMAND: wmid = LOWORD(wParam);

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

BOSK F2012, 1. del: Prædikatslogik

BOSK F2012, 1. del: Prædikatslogik ε > 0. δ > 0. x. x a < δ f (x) L < ε February 8, 2012 Prædikater Vi skal lære om prædikatslogik lad os starte med prædikater. Et prædikat er et orakel der svarer ja eller nej. Eller mere præcist: Prædikater

Læs mere

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Øvelse 9. Klasser, objekter og sql-tabeller insert code here Øvelse 9. Klasser, objekter og sql-tabeller Denne opgave handler om hvordan man opbevarer data fra databasekald på en struktureret måde. Den skal samtidig give jer erfaringer med objekter, der kommer til

Læs mere

" #" $ " "!% &'% ' ( ) * " & #

 # $  !% &'% ' ( ) *  & # ! # $!% &'% '! #$ #$ ( * & #!! #$%& + &,Dim! - Sub Test( Dim Svar As String Svar = InputBox( Indtast dit Navn MsgBox Dit navn er & Svar Svar & * Sub Test2( MsgBox Goddaw & Svar #Test2( Svar& Test(Test2(Svar

Læs mere

En karakteristik af de regulære sprog. Ugens emner. FA minimering [5.1-5.2] MyHill-Nerode-sætningen en algoritme til minimering af FA er

En karakteristik af de regulære sprog. Ugens emner. FA minimering [5.1-5.2] MyHill-Nerode-sætningen en algoritme til minimering af FA er Ugens emner FA minimering [.-.] MyHill-Nerode-sætningen en algoritme til minimering af FA er En karakteristik af de regulære sprog Et sprog L er regulært hvis og kun hvis L beskrives af et regulært udtryk

Læs mere

Kapitel 7 Matematiske vækstmodeller

Kapitel 7 Matematiske vækstmodeller Matematiske vækstmodeller I matematik undersøger man ofte variables afhængighed af hinanden. Her ser man, at samme type af sammenhænge tit forekommer inden for en lang række forskellige områder. I kapitel

Læs mere

Et alfabet er en ordnet mængde af bogstaver og andre tegn

Et alfabet er en ordnet mængde af bogstaver og andre tegn 16. Tegn og alfabet I dette kapitel studerer vi tegn. Tegn udgør grundbestanddelen i enhver form for tekstbehandling. I senere kapitler, nærmere betegnet kapitel 27 - kapitel 31, ser vi på sammensætningen

Læs mere

Mandags Chancen. En optimal spilstrategi. Erik Vestergaard

Mandags Chancen. En optimal spilstrategi. Erik Vestergaard Mandags Chancen En optimal spilstrategi Erik Vestergaard Spilleregler denne note skal vi studere en optimal spilstrategi i det spil, som i fjernsynet går under navnet Mandags Chancen. Spillets regler er

Læs mere

! " # $% &'!& & ' '" & # ' "&()(*& + + +,-' "&( # &(! (! " )(!# &!! (!&!! * (! +& (!!! & " " & & / & & (!

!  # $% &'!& & ' ' & # ' &()(*& + + +,-' &( # &(! (!  )(!# &!! (!&!! * (! +& (!!! &   & & / & & (! !" #$ "%!"&! " # $% &'!& & ' '" & # ' "&()(*& + + +,-' "&( # &(! (! " )(!# &!! (!&!! * (! +& (!!! & Workbooks( MedarbUndersøgelse ),-.", & & Worksheets( Data )& Charts( DisplayData )&& )& " " & & / & &

Læs mere

"# $%$ " # $ % $ $ " & ( ) *+!,! Sum_Cost >= 5000SirName = Beltov Continue = %!- + ( ( - True) Continue *! If Antal <= 20 Then EnhedsOmk = 1.

# $%$  # $ % $ $  & ( ) *+!,! Sum_Cost >= 5000SirName = Beltov Continue = %!- + ( ( - True) Continue *! If Antal <= 20 Then EnhedsOmk = 1. "# $$ " # $ && & ' $ $ " & ) *+, Sum_Cost >= 5000SirName = Beltov Continue = True) Continue *, + If Antal

Læs mere

Martin Geisler. Uge 49, 2001

Martin Geisler. Uge 49, 2001 Min dintprog-browser Martin Geisler Uge 49, 2001 Resumé Dette dokument beskriver tankerne bag min dintprog-browser, en browser skrevet i Java der skal kunne fortolke en mindre delmængde af HTML 4, kaldet

Læs mere

Invarianter. 1 Paritet. Indhold

Invarianter. 1 Paritet. Indhold Invarianter En invariant er en størrelse der ikke ændrer sig, selv om situationen ændrer sig. I nogle kombinatorikopgaver hvor man skal undersøge hvilke situationer der er mulige, er det ofte en god idé

Læs mere

Viditronic NDVR Quick Guide. Ver. 2.0

Viditronic NDVR Quick Guide. Ver. 2.0 Viditronic NDVR Quick Guide Ver. 2.0 1 Indholdsfortegnelse 1. HOVEDMENU 3 1.1 START 5 1.2 AKTIVITETSINDIKATOR: 7 1.3 INFORMATIONS VINDUE: 7 1.4 PTZ KAMERA KONTROL: 7 1.5 SKÆRMMENU 8 1.5.1 AKTIVER BEVÆGELSE:

Læs mere

Introduktion til SQL

Introduktion til SQL Introduktion til SQL Introduktion til SQL 1. udgave, 1. oplag 2013 Copyright 2013 Libris Media A/S Forfatter: Bobby Henningsen Forlagsredaktion: Peter Wiwe og Louise Peulicke Larsen Omslag: Louise Peulicke

Læs mere

Baggrundsnote om logiske operatorer

Baggrundsnote om logiske operatorer Baggrundsnote om logiske operatorer Man kan regne på udsagn ligesom man kan regne på tal. Regneoperationerne kaldes da logiske operatorer. De tre vigtigste logiske operatorer er NOT, AND og. Den første

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

Kom godt igang med Inventar registrering

Kom godt igang med Inventar registrering Kom godt igang med Inventar registrering (InventoryDB) (Med stregkodesupport) programmet fra PetriSoft Introduktion... 1 Inventar registrering... 2 Værktøjsudleje... 3 Service database til reperationer

Læs mere

Rekursion C#-version

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

Læs mere

Programmering i C Intro og grundlæggende C 5. marts 2007

Programmering i C Intro og grundlæggende C 5. marts 2007 Programmering i C Intro og grundlæggende C 5. marts 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk Plan for kurset Ma. 5/3: Ma. 19/3: Ma. 2/4: To. 12/4: Formål, intro, grundlæggende Videre, sprogkonstruktioner

Læs mere

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl:

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl: Fejlhåndtering Selv de bedste programmører laver af og til fejl! Dette kommer sikkert som en overraskelse for de fleste, bortset fra de, der har arbejdet med et hvilket som helst større program. Fejl kan

Læs mere

PORTFOLIO Version 2.0

PORTFOLIO Version 2.0 Nikolaj Lisberg Hansen Løsningsarkitekt og partner nikolaj.hansen@empisto.dk Tlf. 22 90 91 22 PORTFOLIO Version 2.0 Kvalitetsstyring med sags og dokumenthåndtering Teknisk revision af energimærker Portfolio

Læs mere

Kapitel 2 Tal og variable

Kapitel 2 Tal og variable Tal og variable Uden tal ingen matematik - matematik handler om tal og anvendelse af tal. Matematik beskæftiger sig ikke udelukkende med konkrete problemer fra andre fag, og de konkrete tal fra andre fagområder

Læs mere

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides 01017 Diskret Matematik E12 Alle bokse fra logikdelens slides Thomas Bolander 1 Udsagnslogik 1.1 Formler og sandhedstildelinger symbol står for ikke eller og ( A And) hvis... så... hvis og kun hvis...

Læs mere

Tuning af CPH STLs komponentstrukturer for smeltbare prioritetskøer

Tuning af CPH STLs komponentstrukturer for smeltbare prioritetskøer Speciale for kandidatgrad i datalogi Tuning af CPH STLs komponentstrukturer for smeltbare prioritetskøer Asger Bruun Datalogisk Institut, Københavns Universitet Universitetsparken 1, 21 København Ø bruun@diku.dk

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

Crash Course i Programmering. HumTek, RUC

Crash Course i Programmering. HumTek, RUC Crash Course i Programmering HumTek, RUC Kursus mål At give en basal introduktion til programmering i sproget Processing At give et overblik over sprogets potentiale At have det sjovt :-) Kursus form Meget

Læs mere

Skriftlig opgave. Designtanker i database-nære systemer

Skriftlig opgave. Designtanker i database-nære systemer Skriftlig opgave til eksamen for faget»databaser«designtanker i database-nære systemer Martin Ancher Holm Juni 2010 1 Intro Denne skriftlige opgave indeholder kort de daglige tanker jeg har omkring design

Læs mere

Programmering, algoritmik og matematik en nødvendig sammenblanding?

Programmering, algoritmik og matematik en nødvendig sammenblanding? Programmering, algoritmik og matematik en nødvendig sammenblanding? Oplæg til IDA møde, 29. november 2004 Martin Zachariasen DIKU 1 Egen baggrund B.Sc. i datalogi 1989; Kandidat i datalogi 1995; Ph.D.

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

Grundlæggende Matematik

Grundlæggende Matematik Grundlæggende Matematik Hayati Balo, AAMS August 2012 1. Matematiske symboler For at udtrykke de verbale udsagn matematisk korrekt, så det bliver lettere og hurtigere at skrive, indføres en række matematiske

Læs mere

Quick guide. Performer til mekaniske låsesystemer. ASSA ABLOY, the global leader in door opening solutions

Quick guide. Performer til mekaniske låsesystemer. ASSA ABLOY, the global leader in door opening solutions Quick guide Performer til mekaniske låsesystemer ASSA ABLOY, the global leader in door opening solutions 2 Quick Guide for Performer til mekaniske nøglesystemer Denne manual er et detaljeret værktøj,

Læs mere

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database Kursusbeskrivelse Oprettelse af en Access-database Som eksempel på en Access-database oprettes en simpelt system til administration af kurser. Access-databasen skal indeholde: et instruktørkartotek et

Læs mere

1. Opbygning af et regneark

1. Opbygning af et regneark 1. Opbygning af et regneark Et regneark er et skema. Vandrette rækker og lodrette kolonner danner celler, hvori man kan indtaste tal, tekst, datoer og formler. De indtastede tal og data kan bearbejdes

Læs mere

Kapitel 9. Optimering i Microsoft Excel 97/2000

Kapitel 9. Optimering i Microsoft Excel 97/2000 Kapitel 9 Optimering i Microsoft Excel 97/2000 9.1 Indledning... 164 9.2 Numerisk løsning af ligninger... 164 9.3 Optimering under bibetingelser... 164 9.4 Modelformulering... 165 9.5 Gode råd ommodellering...

Læs mere

Easy Guide i GallupPC

Easy Guide i GallupPC Easy Guide i GallupPC Version. 6.00.00 Gallup A/S Masnedøgade 22-26 DK 2100 København Ø Telefon 39 27 27 27 Fax 39 27 50 80 Indhold SÅDAN KOMMER DU I GANG MED AT ANVENDE GALLUPPC... 2 TILFØJELSE AF UNDERSØGELSER

Læs mere

DATALOGI 1F. Skriftlig eksamen tirsdag den 10. juni 2003 1 25 % 2 10 % 3 25 % 4 10 % 5 30 %

DATALOGI 1F. Skriftlig eksamen tirsdag den 10. juni 2003 1 25 % 2 10 % 3 25 % 4 10 % 5 30 % Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1F Skriftlig eksamen tirsdag den 10. juni 2003 Opgave Vægtning 1 25 % 2 10 % 3 25 % 4 10 % 5 30 % Alle de sædvanlige hjælpemidler må benyttes,

Læs mere

Komplekse tal og Kaos

Komplekse tal og Kaos Komplekse tal og Kaos Jon Sporring Datalogisk Institut ved Københavns Universitet Universitetsparken 1, 2100 København Ø August, 2006 1 Forord Denne opgave er tiltænkt gymnasiestuderende med matematik

Læs mere

Guide til Umbraco CMS

Guide til Umbraco CMS web Guide til Umbraco CMS Indhold Indledning 3 Kompatible browsere 3 Log ind i Umbraco 4 Content-delen 5 Indholdstræet 5 Tilføjelse af en side/sektion 7 Sortering af indhold 12 Galleri 14 Mediebibliotek

Læs mere

Start af nyt schematic projekt i Quartus II

Start af nyt schematic projekt i Quartus II Start af nyt schematic projekt i Quartus II Det følgende er ikke fremstillet som en brugsanvisning der gennemgår alle de muligheder der er omkring oprettelse af et Schematic projekt i Quartus II men kun

Læs mere

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller.

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller. Flowchart Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller. Et godt program til at tegne flowcharts med er, EDGE-Diagrammer, eller Smartdraw.

Læs mere

Software Projekt NoSQL vs RMDB

Software Projekt NoSQL vs RMDB Software Projekt NoSQL vs RMDB Skrevet af Carsten Sørensen, Hans Jørgen Frandsen, Peter Haislund Department of Computer Science, University of Aarhus Aabogade 34, 8200 Arhus N, Denmark 201200089, 19960442,

Læs mere

Installation og ibrugtagning af Geomagic Alibre Vault

Installation og ibrugtagning af Geomagic Alibre Vault Karl Lausten Bright Ideas Tlf.:+45 98 62 28 37 Mejsevej 8 Email: klausten@bright-ideas.dk DK-9600 Aars www.bright-ideas.dk CVR 26 85 59 69 12.02.2014 Installation og ibrugtagning af Geomagic Alibre Vault

Læs mere

Tip til 1. runde af Georg Mohr-Konkurrencen Kombinatorik

Tip til 1. runde af Georg Mohr-Konkurrencen Kombinatorik Tip til 1. runde af - Kombinatorik, Kirsten Rosenkilde. Tip til 1. runde af Kombinatorik Her er nogle centrale principper om og strategier for hvordan man tæller et antal kombinationer på en smart måde,

Læs mere

DM13-1. Obligatoriske Opgave - Kredsløbs design

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

Læs mere

Simulering af stokastiske fænomener med Excel

Simulering af stokastiske fænomener med Excel Simulering af stokastiske fænomener med Excel John Andersen, Læreruddannelsen i Aarhus, VIA Det kan være en ret krævende læreproces at udvikle fornemmelse for mange begreber fra sandsynlighedsregningen

Læs mere

KMA-oplysninger. 1 Introduktion

KMA-oplysninger. 1 Introduktion KMA-oplysninger MADS MENU: KODER SYSTEMET KMA-OPLYSNINGER (E.1.1.) Revideret 07-02-2011 1 Introduktion I programmet KMA-oplysninger sættes en række grundlæggende indstillinger for MADS i afdelingen, fx

Læs mere

Multiple Choice Prøver

Multiple Choice Prøver Teori og Praksis for Multiple Choice Prøver Michael I. Schwartzbach Multiple Choice ved Datalogi Anvendt i mange datalogikurser siden 2006: Oversættelse Databaser Webteknologi Programmingssprog Dynamiske

Læs mere

Kontraktbaseret Design. Anker Mørk Thomsen

Kontraktbaseret Design. Anker Mørk Thomsen Kontraktbaseret Design Anker Mørk Thomsen 5. marts 2014 -2 Kontraktbaseret Design Anker Mørk Thomsen 1. udgave ISBN: 9788740491500 Forord Bogen er blevet til gennem undervisning i faget Kontraktbaseret

Læs mere

Kursusarbejde 3 Grundlæggende Programmering

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

Læs mere

Indholdsfortegnelse. Hvorfor skal jeg tage backup af min blog? Side 3. Tag backup med UpDraft Side 4. Tag manuelt backup Side 8 - 2 -

Indholdsfortegnelse. Hvorfor skal jeg tage backup af min blog? Side 3. Tag backup med UpDraft Side 4. Tag manuelt backup Side 8 - 2 - - 1 - Indholdsfortegnelse Hvorfor skal jeg tage backup af min blog? Side 3 Tag backup med UpDraft Side 4 Tag manuelt backup Side 8-2 - Hvorfor skal jeg tage backup af min blog? Lige meget om du har opbygget

Læs mere

Sikre Beregninger. Kryptologi ved Datalogisk Institut, Aarhus Universitet

Sikre Beregninger. Kryptologi ved Datalogisk Institut, Aarhus Universitet Sikre Beregninger Kryptologi ved Datalogisk Institut, Aarhus Universitet 1 Introduktion I denne note skal vi kigge på hvordan man kan regne på data med maksimal sikkerhed, dvs. uden at kigge på de tal

Læs mere

Quick Guide V8.0 - 1 -

Quick Guide V8.0 - 1 - Quick Guide V8.0-1 - Indholdsfortegnelse Generel information...3 Liveview...4 Optagelse af Videosekvenser...5 Afspilning af Videosekvenser...6 Menupanelet...7 Backup...11 Webcam...16 Trouble Shooting...21

Læs mere

Fra Blåt Medlem til Open Office regneark.

Fra Blåt Medlem til Open Office regneark. Fra Blåt Medlem til Open Office regneark. Kopi fra Blåt Medlem til Open Office regneark 1 Eksport fra Blåt Medlem til Open Office regneark 2 Hvad kan du bruge det til 4 Eksempler: Medlemsdelen: Afdelingsopdelt

Læs mere

Om at konvertere PDF - den gode, den dårlige og den forfærdelige metode

Om at konvertere PDF - den gode, den dårlige og den forfærdelige metode Dokumentation Om at konvertere PDF - den gode, den dårlige og den forfærdelige metode Forfatter Leonard Rosenthal PDF Standards Architect, Adobe Inc. Oversættelse Søren Frederiksen / Søren Winsløw DDPFF

Læs mere

PHP Crash course. Databaser

PHP Crash course. Databaser PHP Crash course Databaser PHP Intro PHP er et server scripting sprog der kan bruges til at lave aktivt indhold på hjemme sider. Der er to betingelser som skal opfyldes for at serveren fortolker PHP koden.

Læs mere

Daglig brug af JitBesked 2.0

Daglig brug af JitBesked 2.0 Daglig brug af JitBesked 2.0 Indholdsfortegnelse Oprettelse af personer (modtagere)...3 Afsendelse af besked...4 Valg af flere modtagere...5 Valg af flere personer der ligger i rækkefølge...5 Valg af flere

Læs mere