Pladseffektive implementeringer af HMM algoritmer Carsten Sørensen. Speciale, Juni 2012 Vejleder : Christian Nørgaard Storm Pedersen

Størrelse: px
Starte visningen fra side:

Download "Pladseffektive implementeringer af HMM algoritmer Carsten Sørensen. Speciale, Juni 2012 Vejleder : Christian Nørgaard Storm Pedersen"

Transkript

1 Pladseffektive implementeringer af HMM algoritmer Carsten Sørensen Speciale, Juni 2012 Vejleder : Christian Nørgaard Storm Pedersen

2

3 Resumé I dette speciale undersøges pladseffektive implementeringer af den basale Viterbi algoritme, der givet en skjult Markov model, bruges til at finde den mest sandsynlige sekvens af tilstande til en input streng. I specialet beskrives, analyseres og implementeres fire algoritmer: Standard, Hirschberg, Topo og Checkpoint. De fire algoritmer har forskellige udførelsestider og pladsforbrug. En række eksperimenter gennemføres med henblik på at undersøge sammenhængen mellem de teoretiske asymptotiske worst-case udførelsestider og algoritmernes tidsforbrug i praksis. Eksperimenterne viser at der er tæt sammenhæng mellem disse. Til sidst gives en opsummering over eksperimenternes resultater, samt en beskrivelse af hvornår det er mest hensigtsmæssigt at bruge de enkelte algoritmer. i

4

5 Abstract This thesis investigates space-efficient implementations of the Viterbi algorithm, which given a hidden Markov model is used to find the most likely sequence of states for an input string. In this thesis I describe, analyzese and implement four algorithms: Standard, Hirschberg, Topo and Checkpoint, with various performance time and space consumption. Moreover, a series of experiments is performed to investigate the correlation between the theoretical asymptotic worst-case performance times and the time used in practice. The experiments show that there is a close correlation between them. Finally a summary is given of the experimental results, along with a description of when each algorithm will serve the most benefit. iii

6

7 Indhold Resumé Abstract Indhold i iii v 1 Indledning Struktur i dette speciale Bidrag i dette speciale Hidden Markov Models Terminologi Repræsentation af en HMM Eksempel på en HMM Anvendelse Forward algoritmen Backward algoritmen Viterbi algoritmen Træning af modellen Viterbi algoritmen Standard Baggrund Algoritmen Analyse Opsummering Hirschberg Baggrund Algoritmen Analyse Opsummering v

8 vi INDHOLD 3.3 Topo Baggrund Algoritmen Analyse Opsummering Checkpoint Baggrund Algoritmen Analyse Opsummering Eksperimenter Hirschberg og Standard Tre rigtige modeller Fastholdt model med 100 tilstande Fastholdt inputdata Opsummering Hirschberg og Checkpoint Tre rigtige modeller Fastholdt model med 100 tilstande Fastholdt inputdata Opsummering Topo og Standard Fastholdt model med 100 tilstande Fastholdt model med 5 og 10 tilstande Fastholdt inputdata Opsummering Topo og Checkpoint Fastholdt model med 100 tilstande Fastholdt model med 5 og 10 tilstande Fastholdt inputdata Opsummering Pladseksperiment Standard Hirschberg & Topo Checkpoint Opsummering

9 INDHOLD vii 5 Konklusion Fremtidig arbejde Litteratur 61

10

11 Kapitel 1 Indledning Skjulte Markov modeller er statistiske modeller, som efterhånden har været brugt til at analysere sekventiel data gennem flere årtier. Skjulte Markov modeller blev oprindeligt udviklet til tale genkendelse, men har siden vundet stor indpas i bioinformatikken, hvor de blandt andet bruges til sekvens alignment og genfinding. Mængden af sekventiel data er stærkt voksende, og kræver derfor flere og flere resurser. Udviklingen indenfor hardware kan slet ikke følge med, og der er derfor stor brug for at optimere algoritmerne, både med hensyn til tidsforbrug og pladsforbrug. Indenfor skjulte Markov modeller findes en lang række algoritmer, de vigtigste er Forward, Backward og Viterbi. I dette speciale vil jeg beskrive, analysere og teste forskellige metoder til at gøre Viterbi algoritmen mere pladsbesparende. Jeg vil ikke forsøge at optimere algoritmen, hvad angår tidsforbruget. Jeg vil i stedet, se om det i praksis er muligt at se nogen forskel på tidsforbruget af de forskellige udgaver af algoritmen. Ligeledes vil jeg undersøge, hvor præcist det analyserede worst-case tidsforbrug er. 1.1 Struktur i dette speciale I kapitel 2 vil jeg beskrive den grundlæggende teori bag skjulte Markov modeller, og samtidig introducere de teoretiske begreber jeg vil bruge gennem resten af dette speciale. I kapitel 3 vil jeg beskrive fire udgaver af Viterbi algoritmen. Kapitlet inddeles derfor i fire afsnit. Disse afsnit består alle af en kort beskrivelse af baggrunden for algoritmen. Derefter kommer en grundig og meget implementeringsnær beskrivelse af algoritmen. Algoritmens tids- og pladsforbrug analyseres, og til sidst opsummeres afsnittet. 1

12 2 KAPITEL 1. INDLEDNING Først beskrives Standard udgaven af Viterbi algoritmen i afsnit 3.1. Denne udgave skal bruges som udgangspunkt for mine eksperimenter, og samtidig skal den bruges til at introducere de begreber der skal bruges til at beskrive de efterfølgende algoritmer. I afsnit 3.2 beskrives en udgave af Viterbi algoritmen, der er inspireret af Hirschberg s ide, [5], til parvis alignment. I afsnit 3.3 modificeres algoritmen fra afsnit 3.2, således at den kun virker for topologiske modeller, hvilket gør det muligt at udnytte egenskaberne ved en topologisk model til at gøre worst-case udførelsestiden mindre. I afsnit 3.4 beskrives en simpel udgave af Checkpoint algoritmen fra [4]. I kapitel 4 vil jeg udføre en række eksperimenter med mine algoritmer. Formålet med disse eksperimenter er at undersøge om forskellen i worst-case tiderne for de fire algoritmer er synlige i praksis. Desuden vil jeg i afsnit 4.5 lave et indirekte pladseskperiment. I stedet for at måle selve pladsforbruget af algoritmerne, vil jeg for forskellige modelstørrelser finde størrelsen på den maksimale inputstreng. I kapitel 5 vil jeg give en konklusion på hele specialet, samt en beskrivelse af hvornår de fire udgaver af Viterbi algoritmen gør sig nyttige. Ligeledes vil jeg give et par ideer til fremtidig arbejde. 1.2 Bidrag i dette speciale De grundlæggende ideer til de pladsbesparende algoritmer i dette speciale er alle beskrevet i andre forskningsartikler. Derfor er det primære bidrag her at give en samlet præsentation af disse algoritmer i en høj detaljegrad som ligger meget nær den endelige implementering. Desuden vil bidraget bestå af en række eksperimenter, hvor jeg vil forsøge at vise at algoritmernes worst-case tidsforbrug ligger tæt på deres praktiske tidsforbrug.

13 Kapitel 2 Hidden Markov Models En skjult Markov model, eller Hidden Markov Model (herefter HMM ), er en statistisk model for en Markovkæde med en uobserverbar sekvens af tilstande. Til hver af disse skjulte tilstande knyttes et observerbart symbol fra et endeligt alfabet, jævnført en sandsynlighedsfordeling over alfabetet, som er lokal for hver tilstand. HMM blev oprindeligt brugt til tale genkendelse tilbage i 1970 erne. I [6] findes en god introduktion til HMM og deres anvendelse til tale genkendelse. I slutningen af 1980 erne blev HMM også introduceret i bioinformatikken, hvor den i dag blandt andet bruges til profil Markov modeller, genfinding og generelt søgning af motiver. I [3] og [1] berøres dette. 2.1 Terminologi En første ordens Markovkæde er en sekvens af observationer over en mængde af tilstande, hvor sandsynligheden for at observere en tilstand et sted i sekvensen kun afhænger af den foregående tilstand. For HMM er denne sekvens uobserverbar, og der knyttes i stedet et observerbart symbol til hver tilstand. En HMM består af k tilstande og k 2 transitioner mellem tilstandene. Sandsynligheden for at gå fra tilstand j til tilstand j skrives som p(j j ). Ligeledes består en HMM af et alfabet med s symboler. Når en tilstand udskriver et symbol, kaldes dette for emission, og sandsynligheden for tilstand j udskriver symbol x skrives som p(x j). En transition kan have positiv eller ingen sandsynlighed. Hvis sandsynligheden for transitionen mellem tilstand j og tilstand j er 0, betyder dette at det ikke er muligt at gå fra tilstand j til tilstand j. Tilsvarende gælder for emissioner, der også kan have en positiv eller ingen sandsynlighed. 3

14 4 KAPITEL 2. HIDDEN MARKOV MODELS Altså vil det sige at en emission mellem en tilstand j og et symbol x, hvor sandsynligheden er 0, ikke tillader tilstand j at udskrive symbol x. En HMM kan visualiseres i et transitionsdiagram, hvor tilstande repræsenteres som knuder, og transitioner repræsenteres som kanter Repræsentation af en HMM En HMM repræsenteres ved hjælp af tre parametre, π, A og B, der henholdsvis er startsandsynligheder, transitionssandsynligheder og emissionssandsynligheder. Startsandsynlighederne π, angiver for hver tilstand sandsynligheden for at starte i denne tilstand. Disse sandsynligheder gemmes i en vektor med k indgange, hvor π j er sandsynligheden for at starte i tilstand j. Hvis en tilstand har startsandsynlighed 0, er det ikke muligt at starte sekvensen i denne tilstand. Alle indgange i vektoren skal summere til 1. Transitionssandsynlighederne A, angiver for alle par af tilstande sandsynligheden for at gå fra den ene tilstand til den anden. Disse sandsynligheder gemmes i en k k matrix, hvor A j,j er sandsynligheden for at gå fra tilstand j til tilstand j. Hvis en indgang i matricen har sandsynlighed 0, vil transitionen mellem de to pågældende tilstande ikke finde sted. Hver række i matricen skal summere til 1. Emissionssandsynligheder B, angiver for hver tilstand i modellen sandsynligheden for at udskrive hvert symbol fra alfabetet. Disse sandsynligheder gemmes i en k s matrix, hvor B i,j er sandsynligheden for at tilstand j udskriver symbol i. Hvis en indgang i matricen har sandsynlighed 0, vil emissionen mellem den pågældende tilstand og det pågældende symbol ikke være tilladt. I denne matrix skal både rækker og søjler summere til 1, da hvert symbol skal udskrives fra en tilstand, og hver tilstand skal udskrive et symbol Eksempel på en HMM I [3] gives et eksempel, hvor et casino skifter mellem at bruge en fair og en loaded terning. Den fair terning har sandsynlighed 1/6 for at slå hvert af de seks udfald, mens den loaded terning har en sandsynlighed på 1/2 for at slå seks, og dermed en sandsynlighed på 1/10 for hvert af de resterende udfald.

15 2.2. ANVENDELSE 5 Kun casinoet ved hvilken terning der bruges, så de skjulte tilstande er i dette eksempel fair og loaded, mens alfabetet består af de seks udfald 1, 2, 3, 4, 5, 6. På figur 2.1 ses transitionsdiagrammet for eksemplet. Figur 2.1: Transitionsdiagram for fair og loaded terning. Figuren er taget fra [3]. Herunder ses transitionssandsynlighederne og emissionssandsynlighederne for eksemplet. A = [ 19/20 1/20 1/10 9/10 ] B = 1/6 1/10 1/6 1/10 1/6 1/10 1/6 1/10 1/6 1/10 1/6 1/2 Dette kan anvendes til at estimere hvornår der bruges en fair terning, og hvornår der bruges en loaded terning. 2.2 Anvendelse Der findes en række standard algoritmer som bliver brugt i forbindelse med HMM. Jeg vil her kort beskrive de vigtigste, men i resten af dette speciale vil jeg kun beskæftige mig med Viterbi algoritmen Forward algoritmen Givet en model m og en inputstreng s over et endeligt alfabet, så beregner Forward algoritmen sandsynligheden for s givet m, som er summen hen over alle de stier der kan generere s. Forward algoritmen bruger O(k 2 n) tid og O(k n) plads, hvor k er antallet af tilstande i modellen og n er længden på inputstrengen.

16 6 KAPITEL 2. HIDDEN MARKOV MODELS Backward algoritmen Backward algoritmen minder meget om Forward algoritmen. Forskellen er at Backward algoritmen beregner sandsynligheden for at generere et suffiks af en streng startende i en given tilstand. Backward algoritmen bruger også O(k 2 n) tid og O(k n) plads, hvor k er antallet af tilstande i modellen og n er længden på inputstrengen Viterbi algoritmen Givet en model m og en streng s over et endeligt alfabet, så giver Viterbi algoritmen med backtracking den sekvens af tilstande der har størst sandsynlighed. Jeg vil herefter kalde en sekvens af tilstande for en sti. Den mest sandsynlige sekvens er derfor, det samme som den mest sandsynlige sti. Dog skal det nævnes at det er muligt at flere stier kan have den samme sandsynlighed, og at der derfor kan være flere mest sandsynlige stier. I dette tilfælde vælges blot en tilfældig af disse, da alle potentielt er lige gode i følge modellen. Viterbi algoritmen bruger også O(k 2 n) tid og O(k n) plads, hvor k er antallet af tilstande i modellen og n er længden på inputstrengen Træning af modellen For at bruge HMM skal modelparametrene vælges, altså emissions- og transitionssandsynlighederne. Dette gøres ved træning. Træning tager tit udgangspunkt i en fastlagt modelstruktur, altså transitionsdiagrammet, hvor det besluttes hvilke transitioner der skal have sandsynlighed 0, og hvilke transitioner der skal have positiv sandsynlighed. Derefter bruges eksempeleller træningsdata, til at estimere fornuftige modelparametre, hvilket betyder at træningsdataen vil få tildelt høj sandsynlighed. Dette kaldes expectation maximization. Et andet ofte brugt alternativ er Baum-Welch algoritmen, som er en variant af expectation maximization. Denne algoritme er en kombination af både Forward og Backward algoritmen.

17 Kapitel 3 Viterbi algoritmen I dette kapitel vil jeg beskrive fire forskellige udgaver af Viterbi algoritmen. Jeg har implementeret hver af de fire algoritmer i Java. Implementeringerne ligger meget tæt på beskrivelserne af algoritmerne. Jeg har ikke forsøgt at lave forbedringer i forhold til udførelsestiden i nogle af algoritmerne, da målet med implementeringerne har været at se om forskellene i worst-case tiderne også er synlige i praksis. I afsnit 3.1 vil jeg beskrive standard udgaven af Viterbi algoritmen, uden nogen form for forbedringer eller optimeringer. I afsnit 3.2 beskrives en udgave af Viterbi, der er inspireret af Hirschberg s ide til parvis alignment. I afsnit 3.3 beskrives en algoritme der bygger videre på algoritmen fra afsnit 3.2. I afsnit 3.4 vil jeg beskrive en simpel udgave af Checkpoint algoritmen. Disse fire algoritmer ses i tabel 3.1, sammen med deres udførelsestid og pladsforbrug. Algoritme Tidsforbrug Pladsforbrug Standard O(k 2 n) O(k n) Hirschberg O(k 2 n log n) O(k) Topo O(k 2 n + kn log n) O(k) Checkpoint O(k 2 n) O(k n) Tabel 3.1: Worst-case tids- og pladsforbrug Kildekoden kan downloades på Standard I dette afsnit vil jeg beskrive standard udgaven af Viterbi algoritmen. Dette vil jeg gøre af to grunde. For det første vil jeg bruge dette afsnit til at introducere 7

18 8 KAPITEL 3. VITERBI ALGORITMEN de begreber, jeg vil benytte til at beskrive andre udgaver af Viterbi algoritmen i afsnit 3.2 til 3.4. For det andet vil jeg senere bruge denne algoritme som udgangspunkt, når jeg skal sammenligne udførelsestiderne af mine algoritmer. Først gives baggrunden for Viterbi algoritmen i afsnit Derefter beskrives algoritmen i afsnit og en analyse heraf gives i afsnit Til sidst opsummeres i afsnit Baggrund Viterbi algoritmen der beskrives her svarer til standard beskrivelsen der kan findes i både [3] og [1] Algoritmen Viterbi algoritmen bruger en tabel, som jeg vil kalde den primære tabel, der består af n søjler og k rækker, hvor n er længden på inputstrengen og k er antallet af tilstande i modellen. Hver søjle indeholder en indgang for hver tilstand i modellen, og hvert symbol fra inputstrengen har en tilhørende søjle i tabellen. Indgang (i, j) i tabellen gemmer altså sandsynligheden for at en sti passerer tilstand j ved symbol i. Jeg vil tit bruge udtrykkene den aktuelle søjle og den foregående søjle. Med den aktuelle søjle menes der, den søjle som algoritmen er i gang med at beregne. Den forgående søjle bruges, når jeg skal henvise til en søjle der ligger umiddelbart før en anden søjle. Altså vil den foregående søjle til søjle i være søjle i 1. Tilsvarende vil jeg bruge den foregående tilstand, om den tilstand som stien passerede i den foregående søjle. Således at hvis stien der ender i tilstand j i søjle i, passerede tilstand j i søjle i 1, da vil tilstand j være den foregående tilstand til j. Viterbi algoritmens arbejde består i at udfylde den primære tabel. Dette gøres fra venstre mod højre, da sandsynligheden for tilstand j i søjle i, afhænger af sandsynlighederne for alle tilstandene i søjle i 1. Dette vil jeg ofte skrive som tilstand i, afhænger af tilstandene i den foregående søjle. For at beregne første søjle bruges formel 3.1. Her ganges sandsynligheden for at z 1 kan være en starttilstand med sandsynligheden for at tilstand z 1 udskriver sybol x 1. w(j, 0) = p(z j ) p(x 0 z j ) (3.1) Når første søjle er fundet, beregnes de resterende søjler ved hjælp af formel 3.2. Her ganges sandsynligheden for at tilstand z i udskriver symbol x i med den bedste sandsynlighed for at gå fra en tilstand i den foregående søjle til den nuværende tilstand.

19 3.1. STANDARD 9 Figur 3.1: Den primære tabel. De grå felter indikerer indgange der allerede er beregnet. I den aktuelle søjle i, ses det blå felt, som nu skal beregnes. Dette sker ved at den foregående tilstand findes blandt hver tilstand i den foregående søjle. ( ) w(j, i) = p(x i z j ) max j w(j, i 1) p(z j z j ) (3.2) Da Standard algoritmen husker hele den primære tabel, er det muligt at finde den mest sandsynlige sti ved hjælp af backtracking, når hele tabellen er fyldt ud. Algoritmerne jeg vil beskrive i de følgende afsnit, husker ikke på hele den primære tabel, og det er derfor nødvendigt at udfylde tabellen flere gange. Jeg vil kalde disse gentagne beregninger af den primære tabel for gennemløb. Standard algoritmen kan altså udføre backtrackingen efter et gennemløb. Pseudo kode Standard algoritmen beskrives ved hjælp af pseudo kode i algoritme 3.1. Algoritmen tager tre parametre, n, k og s, som er henholdsvis længden på inputstrengen, antal tilstande og selve inputstrengen. Desuden skal algoritmen kende til modellen, der repræsenteres via en transitions- og en emissionsmatrix, samt en transitionsvektor. Disse tre har jeg ikke givet med som parametre, da jeg i stedet antager at disse gemmes når algoritmen initialiseres. Tilsvarende vil k i praksis også gemmes under initialiseringen, men da k bruges eksplicit i pseudokoden, har jeg valgt at tage den med som parameter. Algoritmen består af to dele. På linje 2 til 4 i algoritme 3.1 udfyldes første søjle af den primære tabel, som i formel 3.1. For hver tilstand j laves et opslag i π j og B s[0],j, som er henholdsvis startvektoren og emissionsmatricen. Dette ganges sammen og gemmes i indgang j i første søjle. På linje 5 til 16 udfyldes de resterende søjler af den primære tabel. Dette sker ved hjælp af formel 3.2. For-løkken på linje 5 løber over søjlerne, mens de indre

20 10 KAPITEL 3. VITERBI ALGORITMEN for-løkker løber over alle tilstandene. Til tilstand j i søjle i, linje 6, findes den foregående tilstand, på linjerne 8 til 13. For hver tilstand l, ganges transitionen fra l til j med sandsynligheden for tilstand l i søjle i 1. Den bedste sandsynlighed gemmes i x, og ganges til sidst med sandsynligheden for at tilstand j udskriver symbol s[i], før resultatet gemmes i indgang (i, j). Algoritme 3.1 Standard algoritmen Require: n, k, s 1: table = new table[n][k] 2: for j = 0 k do 3: table[0][j] = π j B s[0],j 4: end for 5: for i = 1 n do 6: for j = 0 k do 7: x = 0 8: for l = 0 k do 9: t = table[i 1][l] A l,j 10: if t > x then 11: x = t 12: end if 13: end for 14: table[i][j] = B s[i],j x 15: end for 16: end for Log-space Viterbi algoritmen bruges til at beregne sandsynligheder, hvor værdimængden er [0, 1]. Dette betyder at resultatet af mange tal ganget sammen bliver meget lille, og derfor kan komme uden for det talområde der er muligt at repræsentere på en computer. For at løse dette problem, bruges log-space. Det vil sige at man tager logaritmen til alle værdier og derefter plusser i stedet for at gange. Nu bliver værdimængden af Viterbi algoritmen fra minus uendelig (svarende til 0) til 0 (svarende til 1). Det er nu muligt at repræsentere meget små tal, da det bliver repræsenteret som et numerisk stort tal. ( ) w(j, i) = log p(x i z j ) + max j w(j, i 1) + log p(z j z j ) Pseudo koden for Standard algoritmen med log-space ses i algoritme 3.2. Jeg vil benytte log-space i alle mine implementeringer, selvom jeg i afsnit 3.2 til 3.4 vil beskrive algoritmerne uden bruge af log-space.

21 3.1. STANDARD 11 Algoritme 3.2 Standard algoritmen Log-space Require: n, k, s table = new table[n][k] for j = 0 k do table[0][j] = log π j + log B s[0],j end for for i = 1 n do for j = 0 k do x = 0 for l = 0 k do t = table[i 1][l] + log A l,j if t > x then x = t end if end for table[i][j] = log B s[i],j + x end for end for Analyse Jeg vil her analysere plads- og tidsforbruget af Standard algoritmen ud fra min egen beskrivelse af algoritmen. Pladsforbrug Standard algoritmen gemmer hele den primære tabel i hukommelsen, og bruger derfor O(k n) plads. Tidsforbrug Standard algoritmen udfylder den primære tabel søjle for søjle. For hver tilstand findes den foregående tilstand blandt k mulige, og der skal derfor bruges O(k 2 ) tid på hver søjle. Samlet set bliver worst-case udførelsestiden for algoritmen O(k 2 n), da tabellen består af n søjler. Denne worst-case udførelsestid forventes at være meget tæt på den tid der skal bruges i praksis, da algoritmens udførelsestid ikke afhænger af inputstrengen, men kun længden på strengen. Dette gælder bestemt ikke algoritmer, som eksempel gives bubblesort. Bubblesort har en worst-case udførelsestid på O(n 2 ), men bruger kun lineær tid, hvis input allerede er sorteret. Omvendt bruges hele worst-case tiden, hvis input et er sorteret, men i omvendt rækkefølge.

22 12 KAPITEL 3. VITERBI ALGORITMEN Forbedringer Ovenfor forklarede jeg at udførelsestiden for Standard algoritmen ikke afhænger af inputstrengen, men jeg vil her beskrive nogle ændringer til algoritmen, der gør at udførelsestiden vil afhænge af inputstrengen og modellen. Kantlist repræsentationen gemmer for hver tilstand en liste over mulige indgående kanter. Dette benytter algoritmen så ved kun at lede efter den foregående tilstand, blandt tilstandene i listen. Kantlisten kan opbygges fra transitions matricsen i O(k 2 ) tid. Bruges denne repræsentation af modellen bliver worst-case udførelsestiden til størrelsen af modellen gange længden af inputstrengen. Mere præcist kan dette skrives som O(m n), hvor m er antallet af kanter i modellen. Modellen har derfor stor indflydelse på udførelsestiden. Hvis modellen er tynd, det vil sige at hver tilstand har få 1 indgående kanter, vil der bruges mindre tid på hver søjle og den samlede tid vil blive mindre. I en tyk model har hver tilstand mange indgående kanter og udførelsestiden vil derfor være den samme uanset om en kantlist repræsentation bruges eller ej. Emission tjek kan bruges hvis hvert symbol kun tillader en delmængde af tilstande, da det kan være en fordel kun at kigge på disse tilstande. Hvis et symbol ikke tillader en tilstand, vil indgangen til denne tilstand straks blive sat til nul 2, og der bruges altså ikke tid på at finde den bedste foregående tilstand. Det vil sige at der for hver ulovlig tilstand spares k beregninger. Denne forbedring afhænger igen meget af modellen. Hvis emissionsmatricen har 0 i mange indgange, vil det give store besparelser, hvis ellers disse symboler optræder i inputstrengen Opsummering Her i afsnit 3.1 har jeg beskrevet standard udgaven af Viterbi algoritmen. Det vil sige at den her er beskrevet på samme måde som i litteraturen og uden nogle former for forbedringer af algoritmen. En analyse af algoritmen gav en worst-case udførelsestid på O(k 2 n) og et pladsforbrug på O(k n). Endvidere har jeg her i afsnit 3.1 introduceret de begreber jeg vil benytte i afsnit 3.2 til 3.4, når andre versioner af Viterbi algoritmen skal beskrives. 1 Få kanter betyder mange transitioner med sandsynlighed nul 2 Minus uendelig for log-space

23 3.2. HIRSCHBERG Hirschberg I dette kapitel vil jeg beskrive en algoritme som bygger på ideen bag [5]. I afsnit beskrives baggrunden for Hirschberg s ide til parvis alignment. I afsnit beskrives en udgave af Viterbi algoritmen der bygger på samme ide. Denne algoritme analyseres i afsnit 3.2.3, og der opsummeres i afsnit Baggrund Hirschberg s ide til parvis alignment beskrives første gang af Daniel Hirschberg i [5]. Selve ideen er at der undervejs kun gemmes 2 søjler af den primære tabel, samtidig med at der huske på hvordan stierne krydser midten af tabellen. Efter første gennemløb, kaldes algoritmen rekursivt på første og anden halvdel af de to inputstrenge. Samlet set bruger denne algoritme kun O(m) plads, hvis længden på de to inputstrenge m og n, hvor m < n. Dette er en faktor n bedre end den originale algoritme, der bruger O(m n) plads. Tidsforbruget af Hirschberg er kun en faktor 2 langsommere end den originale algoritme, da hvert rekursive kald foregår på delstrenge der kun er halv så store som det foregående kald Algoritmen I dette afsnit vil jeg beskrive algoritmen, ved først at beskrive de datastrukturer der bruges. Derefter beskrives algoritmen ved hjælp af pseudokode, de rekursive kald forklares, og til sidst gives en argumentation for korrektheden af algoritmen. Datastrukturer Jeg vil nu beskrive opbygningen af de datastrukturer der bruges af algoritmen. Først beskrives den primære tabel svarende til tabellen fra Standard algoritmen og derefter den sekundære tabel, der bruges til at huske hvor stierne passerer den miderste søjle. Den primære tabel svarer til tabellen fra Standard algoritmen. Når den primære tabel skal udfyldes, afhænger alle beregningerne i en søjle kun af den foregående søjle. Derfor er det ikke nødvendigt at huske hele tabellen, for at finde sidste søjle. Det er nok at huske på to søjler; den aktuelle søjle og den foregående søjle. I algoritmen repræsenteres de to søjler af to arrays, previous og current. Som navnene indikerer, er current den aktuelle søjle, og previous er den foregående. Den aktuelle søjle, udfyldes næsten på samme måde som det skete i Standard algoritmen. Forskellen er, at her læses fra previous og skrives til current, hvor

24 14 KAPITEL 3. VITERBI ALGORITMEN det hele skete i den samme tabel i Standard algoritmen. ( ) current(z n ) = p(x n z n ) max previous(z n 1 ) p(z n z n 1 ) z n 1 (3.3) Når den aktuelle søjle er fyldt ud, gemmes current i previous og erstattes med et tomt array. Ulempen ved dette er, at hele tabellen skal bruges under backtracking, hvilket ikke er muligt når der kun huskes på to søjler. Derfor bruges den sekundære tabel til at huske hvordan en sti kom til sidste tilstand via den miderste søjle. Den sekundære tabel bruges til at huske hvilken tilstand stierne krydser i den miderste søjle. Den sekundære tabel tages først i brug når algoritmen når til søjle M + 1. Her gemmes den foregående tilstand, således at hver indgang i den sekundære tabel fortæller, hvilken tilstand der var den foregående i den primære tabel. For alle de efterfølgende søjler, opdateres den sekundære tabel ved at kopiere den indgang i den sekundære tabel der svarer til den foregående tilstand i den primære tabel. Sandsynligheden for hver tilstand i søjle M + 1 i den primære tabel, findes ved at maksimere over alle tilstande i søjle M. Første søjle af den sekundære tabel udfyldes med netop den tilstand, som blev valgt under maksimeringen. For alle efterfølgende søjler i den sekundære tabel, bruges den tilstand der blev valgt under maksimeringen til at kopiere indgangen fra den foregående søjle. Dette betyder at sidste søjle af den sekundære tabel, vil indeholde den miderste tilstand af den mest sandsynlige sti der første hertil. Præcis som for den primære tabel, er det kun den aktuelle og den foregående søjle der gemmes for den sekundære tabel. Eksempel På figur 3.2 ses et eksempel hvor den mest sandsynlige sti er markeret. Modellen består af fem tilstande, a, b, c, d, e. Længden af strengen er n, og M markerer den miderste søjle. De fuldt optrukne linjer markerer de to søjler der stadig er i hukommelsen, mens de stiplede linjer markerer de søjler der ikke længere huskes. På figur 3.2(a) fremgår det af søjle n at tilstand b er den mest sandsynlige sluttilstand. Men da hele tabellen ikke er til rådighed, er det ikke muligt at udføre backtracking. I stedet for kan figur 3.2(b) oplyse, at den mest sandsynlige sti passerede midtersøjlen i tilstand d. Pseudokode Algoritmen består af 3 dele. Første del sørger for at udfylde første søjle. Anden del sørger for at udfylde de resterende søjler. Og sidste del sørger for at de rekursive kald. De tre dele af algoritmen kan ses som pseudo kode i algoritme 3.3 til 3.5.

25 3.2. HIRSCHBERG 15 (a) Primær tabel (b) Sekundær tabel Figur 3.2: En tilfældig sti er indtegnet i den primære og sekundære tabel. På den primære tabel ses det at stien ender i tilstand b, og at den i næstsidste søjle passerer tilstand d. På den sekundære tabel ses det at stien der ender i tilstand b, passerer tilstand d i den miderste søjle, og at stien der ender i tilstand d i næstsidste søjle også passerer d i den miderste søjle. Basis-delen står for at oprette den første søjle. Hvis det aktuelle problem er et præfix af inputstrengen, a = 0, beregnes første søjle af basis tilfældet. Til dette bruges formel 3.1. Hvis det aktuelle problem ikke er et præfix af inputstrengen, a > 0, kendes starttilstanden for dette delproblem allerede, og første søjle beregnes ved hjælp af initial metoden. Alt hvad denne metode gør, er at sætte første søjle til at være 0 i alle indgange på nær starttilstanden for dette delproblem, denne indgang sættes til 1. Dette gør at algoritmen tvinges til kun at lede efter stier der starter i denne tilstand. Algoritme 3.3 Viterbi (Hirschberg) Basis delen Require: n, k, s, a, b, z, v 1: if a = 0 then 2: current = basis(s[0]) 3: else 4: current = initial(z) 5: end if Den dynamiske del fortsætter når første søjle er fyldt ud. I hver iteration benyttes den foregående søjle til at udfylde den aktuelle søjle. Men først skal den midterste søjle findes, dette sker på linje 6, hvor M = (a + b)/2. Her er a og b indeks for henholdsvis første søjle og sidste søjle i delproblemet.

26 16 KAPITEL 3. VITERBI ALGORITMEN Algoritme 3.4 Viterbi (Hirschberg) Den dynamiske del 6: M = (a + b)/2 7: for i = a + 1 b do 8: previous = current 9: current = new array[k] 10: if i > M then 11: secp revious = seccurrent 12: seccurrent = new array[k] 13: end if 14: for j = 0 k do 15: x = 0 16: y = 1 17: for l = 0 k do 18: t = previous[l] A l,j 19: if t > x then 20: x = t 21: y = l 22: end if 23: end for 24: current[j] = B s[i],j x 25: if i = M + 1 then 26: seccurrent[j] = y 27: else 28: if i > M + 1 then 29: seccurrent[j] = secp revious[y] 30: end if 31: end if 32: end for 33: if a = 0 i = n 1 then 34: v = laststate(current) 35: end if 36: if i = b then 37: m = seccurrent[v] 38: end if 39: end for

27 3.2. HIRSCHBERG 17 For-løkken på linje 7 sørger for at beregne den rette del af den primære tabel, da den løber fra søjle a + 1 til søjle b, søjle a blev jo beregnet af enten basis tilfældet eller initial metoden. Det første der sker er at current gemmes i previous, så der kan oprettes et nyt array til næste søjle. Det samme sker for den sekundære tabel, hvis løkken er nået forbi (a + b)/2. For-løkkerne på linje 14 og 17, bruges til at udfylde den aktuelle søjle. Dette foregår næsten på samme måde som i Standard algoritmen, forskellen er at der her læses fra previous og skrives til current, hvor det i Standard algoritmen foregik i den samme tabel. Derudover opretholdes den sekundære tabel, igen kun når for-løkken fra linje 7 er nået forbi (a + b)/2. Den rekursive del står for at kalde algoritmen rekursivt. Så længe der er flere søjler mellem midtersøjlen M og startsøjlen a, kalder algoritmen rekursivt på første halvdel af tabellen. Ligeledes kalder algoritmen rekursivt på sidste halvdel af tabellen, hvis der er flere søjler mellem M og slutsøjlen b. Algoritme 3.5 Viterbi (Hirschberg) Den rekursive del 40: if a + 1 < M (a = 0 a < M) then 41: viterbi(n, k, s, a, M, z, m) 42: end if 43: if M + 1 < b then 44: viterbi(n, k, s, M, b, m, v) 45: end if Første gennemløb ses på figur 3.3(a). Her beregnes hele den primære tabel. Men da algoritmen hele tiden kun husker de sidste to søjler, er det kun muligt at finde sluttilstanden, z n, via den primære tabel. Som beskrevet ovenfor er det muligt at finde den midterste tilstand, z M1, via den sekundære tabel. Det vil sige at algoritmen har fundet to tilstande fra den mest sandsynlige sti, efter første gennemløb. Andet gennemløb ses på figur 3.3(b). De to tilstande fundet i første gennemløb, bruges i dette gennemløb til at genberegne den primære tabel i to dele. På figuren er de to dele adskilt ved at første halvdel har en massiv ramme, mens anden halvdel er farvet, og har en stiplet ramme. Første halvdel beregnes på samme måde som ved første gennemløb; første søjle findes ved hjælp af basis tilfældet. Men når algoritmen når søjle M, kendes tilstanden for denne søjle allerede, og det er derfor muligt at finde tilstanden i søjle M 2 via den sekundære tabel. Når anden halvdel skal beregnes, er starttilstanden allerede kendt, så første søjle sættes via initial metoden til 0 i alle indgange på nær indgangen for

28 18 KAPITEL 3. VITERBI ALGORITMEN starttilstand der sættes til 1. På den måde sikres det at næste delsti starter i den rette tilstand, da sandsynligheden for at starte i en anden tilstand er 0. De to halvdele overlapper hinanden i den midterste søjle, da den første halvdel slutter ved denne søjle, og den anden halvdel starter ved denne søjle. Men det betyder ikke, at denne søjle beregnes to gange, da algoritmen benytter initial metoden til at udfylde første søjle af et delproblem der ikke er præfix. Tredje gennemløb ses på figur 3.3(c). Her er hver halvdel fra andet gennemløb blevet delt i to, således at den primære tabel nu er inddelt i fire dele. Igen startes første del med basis tilfældet, mens de tre efterfølgende dele startes af initial metoden. Igen ses tre overlappende søjler på figuren. I dette gennemløb findes tilstandene fra midtersøjlerne M 4, M 5, M 6 og M 7. Generelt vil der i det l te gennemløb være 2 l 1 delproblemer, og 2 l 1 1 overlappende søjler. For delproblemer som ikke er et præfix, fortsætter rekursionen så længe delproblemet er større end tre søjler, a + 1 < h eller h + 1 < b. I det tilfælde hvor et delproblem består af præcis 3 søjler, vil tilstanden fra den første og den sidste søjle være kendt, mens tilstanden fra den midterste søjle kan findes i den sekundære tabel. Hvis delproblemet er et præfix, fortsætter rekursionen indtil delproblemet kun består af to søjler, da første tilstand ikke på noget tidspunkt bliver gemt, og først kan findes i den sekundære tabel, når delproblemet kun består af to søjler. Korrekthed af algoritmen Det er let at se, at den mest sandsynlige starttilstand er den rette, da denne findes i første gennemløb, hvor den eneste forskel fra Standard algoritmen er at der kun gemmes to søjler. Når sidste søjle er fundet, kan den mest sandsynlige starttilstand findes heri, og det vil være samme tilstand som findes af Standard algoritmen. For at bevise at de rekursive kald også kun finder tilstande fra den mest sandsynlige sti, er det nok at vise at et rekursivt kald på to tilfældige tilstande fra stien resulterer i en delsti af netop den mest sandsynlige sti. Når der kaldes rekursivt på et præfix, beregnes første søjle på ny, ud fra samme grundlag som i første gennemløb. Derfor vil sidste søjle af dette delproblem også være den samme som tilsvarende søjle i første gennemløb. Endvidere er sluttilstanden z for dette delproblem også kendt, da denne blev fundet som den midterste tilstand i et tidligere kald. Derfor vil den mest sandsynlig sti der slutter i z være en delsti af den mest sandsynlig globale sti. I tilfældet hvor der kaldes rekursivt på en delstreng som ikke er et præfix, kendes både start- og sluttilstanden for dette delproblem. Da initial metoden bruges, ved vi at kun starttilstanden har sandsynlighed 1, mens alle andre til-

29 3.2. HIRSCHBERG 19 (a) Første gennemløb (b) Andet gennemløb (c) Tredje gennemløb Figur 3.3: De første tre gennemløb af Hirschberg algoritmen. (a) I første gennemløb beregnes hele tabellen. (b) I andet gennemløb beregnes to halvdele af tabellen, plus en overlappende søjle. Første halvdel er vist med fuldt optrukne linjer, mens anden halvdel er farvet. (c) I tredje gennemløb beregnes fire fjerdedele af tabellen, plus tre overlappende søjler. Den første og tredje del er vist med fuldt optrukne linjer, mens de to andre dele er farvede.

30 20 KAPITEL 3. VITERBI ALGORITMEN stande i første søjle har sandsynlighed 0. Det vil sige, at alle de mulige stier i dette delproblem vil starte i den rette tilstand. Sluttilstanden for delproblemet bruges til at finde den midterste tilstand via den sekundære tabel, igen må denne tilstand være en tilstand fra den mest sandsynlige globale sti, da den sekundære tabel er lavet sådan Analyse Pladsforbrug I denne pladsanalyse vil jeg se bort fra plads der skal bruges til input og modellen. Ligeledes vil jeg se bort fra diverse counter og andre variable der bruges i algoritmen, da disse kun forventes at bruge en konstant mængde plads. Tilbage er således kun at tælle hvor mange søjler der maksimalt ligger i hukommelsen på samme tid. Algoritmen husker hele tiden på de sidste to søjler i den primære tabel, hvilket gør at der i alt huskes på fire søjler når den sekundære tabel er i brug. Det samlede pladsforbrug er derfor O(4k) = O(k). Tidsforbrug For at analysere tidsforbruget af algoritmen, vil jeg først beskrive hvor meget tid der bruges, hver gang en søjle skal beregnes, og derefter hvor mange gange hver søjle beregnes. Hver gang en søjle skal beregnes bruges O(k 2 ) beregninger for at udfylde den primære tabel og den sekundære tabel, da hver tilstand skal tage højde for samtlige tilstande i den foregående søjle. I hvert rekursionslag beregnes hele tabellen. Første gang i et hug, anden gang som to halvdele, tredje gang som 4 fjerdedele og så videre. Derfor beregnes alle søjler i hvert rekursionslag. Derudover opstod nogle overlappende søjler, når to nabo delproblemer skulle dele en søjle, men denne søjle blev kun beregnet i det ene af de to delproblemer, da den i det andet blev initialiseret af initial metoden. Denne metode bruger kun O(k) beregninger, hvilket er domineret af O(k 2 ). Derfor har de overlappende søjler ingen betydning for tidsanalysen. Da størrelsen på delproblemerne halveres hver gang, vil der i alt være log n rekursionslag. Samlet set bliver dette altså O(k 2 n log n). Det er altså ikke muligt at begrænse pladsforbruget samtidig med at worstcase udførelsestiden forbliver den samme, som det var tilfældet for Hirschberg s ide til parvis alignment. Grunden til dette er, at hvert delproblem ikke kan udelukke nogle tilstande, så selvom at delstrengene bliver halveret i hvert kald, forbliver antallet af mulige tilstande det samme. Det vil sige at problemet inddeles i mindre delproblemer, men det er stadig samme antal beregninger der skal udføres. For parvis alignment, er det begge inputstrengene der bliver mindre i hvert rekursive kald og delproblemerne bliver derfor mindre hver gang. Hvis det samme skal gælde for Viterbi udgaven af Hirschberg algoritmen, skal der sættes en be-

31 3.3. TOPO 21 grænsning på modellen der gør at antallet af mulige tilstande også bliver mindre efterhånden som delproblemerne bliver mindre. Ligesom for Standard algortimen, afhænger tidsforbruget af Hirschberg algoritmen ikke af indholdet af inputstrengen, men kun af længden på inputstrengen. Tilsvarende vil sandsynlighedsfordelingen af modellen heller ikke have nogen indflydelse på udførelsestiden, kun antallet af tilstande påvirker tiden Opsummering I dette kapitel har jeg beskrevet en algoritme, som bygger på den samme ide som Hirschberg s algoritme til parvis alignment. Denne ide bestod i at finde midtertilstanden i den mest sandsynlige sti, således at der efterfølgende kunne kaldes rekursivt på første og anden halvdel af tabellen. Dette gjorde det muligt kun at huske på de sidste to søjler når tabellen eller en deltabel skulle beregnes, og algoritmen ender derfor med kun at have et pladsforbrug på O(k). Tilgengæld skal algoritmen bruge log n gennemløb, før hele stien er fundet. Derfor er worstcase tidsforbruget for algoritmen O(k 2 n log n). 3.3 Topo I dette afsnit vil jeg beskrive hvordan algoritmen fra afsnit 3.2 modificeres således, at den får et pladsforbrug på O(k), og kun bliver en konstant faktor langsommere end Standard algoritmen. Afsnit giver baggrund for denne modificerede algoritme. Afsnit præsenterer algoritmen. Afsnit præsenterer en analyse af algoritmen. Til sidst opsummeres dette i afsnit Baggrund Algoritmen der beskrives her i afsnit 3.3 bygger videre på algoritmen fra afsnit 3.2 og er derfor også inspireret af [5]. Algoritmen har fået navnet Topo, da den er designet til kun at virke for topologiske modeller. Topologisk model En topologisk model, er en model hvor alle tilstande har en ordnet relation. Dette kan for eksempel betyde at alle tilstandene er nummereret fra 1 til k, samtidig med at hver tilstand j kun kan have en positiv transition til tilstand j, hvis j j. Dette betyder også, at der ikke kan være cykler i en topologisk model, med mindre cyklen kun består af en tilstand. I HMM bruges topologiske modeller blandt andet til profil Markov modeller. På figur 3.4 ses et transitionsdiagram for en profil Markov model.

32 22 KAPITEL 3. VITERBI ALGORITMEN Figur 3.4: Profil Markov Model. Figuren er taget fra [3] Algoritmen I dette afsnit vil jeg først beskrive ændringerne af modellen og repræsentationen heraf. Derefter vil jeg, som i sidste afsnit beskrive algoritmen ved hjælp af pseudokode. Algoritmen beskrives igen ud fra de tre hoveddele, nemlig basis-delen, den dynamiske del, og rekursionen. Til sidst vil jeg argumentere for korrektheden af algoritmen. Ændringer af modellen For at kunne begrænse antallet af mulige tilstande, når algoritmen når dybere ned i de rekursive lag, er det nødvendigt at sætte nogle begrænsninger på modellen. Dette gøres ved at begrænse algoritmen til kun at virke for topologiske ordnede modeller, som i afsnit Figur 3.5: Eksempel på en topologisk model. Denne model består af fire tilstande. Hver tilstand kan gå til en tilstand med større nummerering. Denne begrænsning på modellen vil for det første gøre, at mange tilstande kan udlukkes når den foregående tilstand skal findes, da alle de mulige tilstande skal have en mindre nummerering. Men endnu vigtigere er det, at alle tilstandene i et delproblem skal være større end starttilstanden og mindre end sluttilstanden. Hvis en sti gennem et delproblem starter i tilstand j 1 og slutter i tilstand j 2, hvor j 1 j 2, vil alle tilstande i dette delproblem ligge mellem j 1 og j 2. Se figur 3.6.

33 3.3. TOPO 23 Figur 3.6: Mulige tilstande i et delproblem. Dette delproblem består af søjlerne i 1 til i 2. Start- og sluttilstanden er henholdsvis j 1 og j 2. Disse to tilstande afgrænser de mulige tilstande for delproblemet, da stien gennem startog sluttilstanden ikke kan gå gennem tilstand l, hvis l < j 1 eller l > j 2. Kantlist repræsentation For at gøre det let at frasortere tilstande og dermed kun tage de brugbare tilstande i betragtning, gemmes modellen som en kantliste i stedet for en matrix. Denne liste skal for hver tilstand indeholde en liste over mulige forgængere. Dette vil gøre det muligt for algoritmen kun at betragte de rette tilstande, når den primære tabel skal udfyldes. Kantlisten kan oprettes ud fra den matriks repræsentation der har været brugt indtil videre. Dette kan gøres i tid O(k 2 ). På figur 3.7 ses en kantlist repræsentation af modellen fra figur 3.5. Figur 3.7: Kantlist repræsentation af modellen fra figur 3.5. Hver tilstand har en liste over mulige foregående tilstande, altså de indgående kanter på modellen. Tilstand 1 har ikke nogle indgående kanter da den er starttilstanden, og derfor er listen tom.

34 24 KAPITEL 3. VITERBI ALGORITMEN Pseudokode Pseudokoden til algoritmen kan ses i algoritme 3.6 til 3.8. Algoritmen består af tre dele ligesom Hirschberg algoritmen fra kapitel 3.2. Første del er basis delen (algoritme 3.6), anden del er den dynamiske del (algoritme 3.7) og tredje del er den rekursive del (algoritme 3.8). Både basis delen og den rekursive del er identiske med de tilsvarende dele fra Hirschberg algoritmen. Alle ændringerne sker i den dynamiske del. Basis-delen står for at oprette den første søjle. Hvis det aktuelle problem er et præfix af inputstrengen, a = 0, vil første søjle blive fyldt ud af basis tilfældet. Hvis det aktuelle problem ikke er et præfix af inputstrengen, a > 0, kendes starttilstanden for dette delproblem allerede, og første søjle sættes til 0 i alle indgange, på nær den indgang der svarer til starttilstanden. Algoritme 3.6 Topologisk udgave af Viterbi (Hirschberg) Require: n, k, s, a, b, z, v 1: if a = 0 then 2: current = basis(s[0]) 3: else 4: current = initial(z) 5: end if Den dynamiske del fortsætter når første søjle er fyldt ud. I hver iteration benyttes den foregående søjle til at udfylde den aktuelle søjle. Men først skal den midterste søjle findes, dette sker på linje 6, hvor M = (a + b)/2. Husk at a og b er indeks for henholdsvis første søjle og sidste søjle i delproblemet. Forskellen på denne algoritme og algoritmen fra kapitel 3.2 er at finde på linje 14 til 33. For det første udfyldes søjlen kun i de tilstande der ligger mellem z og v, således, at stien ikke kan gå til en tilstand der har lavere værdi end starttilstanden eller højre værdi end sluttilstanden. Kantlist repræsentationen benyttes ved at for-løkken på linje 16, løber over alle mulige foregående tilstande, i stedet for alle tilstande. Det vil sige, at der for hver tilstand i, kun bruges tid på at undersøge tilstande j, hvor j i og P (j i) > 0. Men dette er ikke helt nok, til at udelukke alle de tilstande der ikke kan være foregående tilstande. Hvis der ikke er tale om første gennemløb, er det muligt, at der kaldes rekursivt på en del af tabellen, hvor z > 0. Dette betyder, at alle tilstande i, hvor i < z, ikke er gyldige tilstande i dette delproblem, da starttilstanden (i dette delproblem) er z. Derfor tjekkes der på linje 17 om z < j, hvis dette ikke er opfyldt, kan j ikke være den foregående tilstand, på grund af den topologiske ordning.

35 3.3. TOPO 25 Algoritme 3.7 Topologisk udgave af Viterbi (Hirschberg) 6: M = (a + b)/2 7: for i = a + 1 b do 8: previous = current 9: current = new array[k] 10: if i > M then 11: secp revious = seccurrent 12: seccurrent = new array[k] 13: end if 14: for j = z v do 15: x = 0 16: for l edgelist(j) do 17: if z l then 18: t = previous[l] A l,j 19: if t > x then 20: x = t 21: y = l 22: end if 23: end if 24: end for 25: current[j] = B symbol[z],j x 26: if i = M + 1 then 27: seccurrent[j] = y 28: else 29: if i > M + 1 then 30: seccurrent[j] = secp revious[y] 31: end if 32: end if 33: end for 34: if a = 0 i = n 1 then 35: v = laststate(current) 36: end if 37: if i = b then 38: m = seccurrent[v] 39: end if 40: end for

36 26 KAPITEL 3. VITERBI ALGORITMEN Den rekursive del fungerer på samme måde som i kapitel 3.2. Algoritme 3.8 Topologisk udgave af Viterbi (Hirschberg) 41: if a + 1 < M (a = 0 a < M) then 42: viterbi(n, k, s, a, M, z, m) 43: end if 44: if M + 1 < b then 45: viterbi(n, k, s, M, b, m, v) 46: end if I første gennemløb, beregnes hele tabellen, som i den normale udgave, se figur 3.8(a). Når der første gang kaldes rekursivt, er det kun to mindre dele af tabellen der beregnes på. På figur 3.8(b) ses de to dele af tabellen der beregnes her. Det ene rekursive kald finder den bedste sti fra starten til (i, j), altså symbol i og tilstand j. Da vi ved, at modellen er topologisk ordnet, må starttilstanden til stien der ender i (i, j), nødvendigvis ligge mellem 0 og j. Ligeledes ved vi, at denne sti aldrig vil gå gennem tilstande med højre topologisk værdi end j. Det sammen gælder for den anden del af det rekursive kald. Her starter stien i (i, j) og ender i en tilstand med topologisk værdi et sted mellem j og n. Igen ved vi, at stien ikke kan gå gennem tilstande med lavere værdi end j. Tredje gennemløb, sker når det første rekursive kald igen kalder reskursivt. Her vil hver af de to dele fra figur 3.8(b), igen blive delt i to, så der nu kun beregnes på fire endnu mindre dele af tabellen. Se figur 3.8(c). Korrekthed af algoritmen Argumentationen for korrektheden af denne algoritme er stort set den samme, som den er blev givet i afsnit Igen er det let at se, at første gennemløb virker på samme måde som Standard algoritmen, hvad angår valget af den bedste sti. Derfor består argumentet igen i at forklare hvorfor den bedste sti af et delproblem, er en delsti af den globale sti. Forskellen på de to algoritmer forekommer netop når et delproblem skal beregnes, da antallet af tilstande for denne algoritme afhænger af start- og sluttilstanden for delproblemet. Derfor er det nødvendigt at argumentere for, at stien ikke går gennem tilstande, der ligger udenfor det lovlige område. Men det er jo hele antagelsen bag modellen, da kravet til modellen er, at den skal være topologisk ordnet. Altså vil en delsti der starter i tilstand i aldrig kunne gå gennem tilstand j hvis j < i. Tilsvarende kan en delsti der slutter i tilstand i, ikke gå gennem tilstand j, hvis j > i.

37 3.3. TOPO 27 (a) Første gennemløb (b) Andet gennemløb (c) Tredje gennemløb Figur 3.8: De første tre gennemløb af Topo algoritmen. De farvede dele af figurene indikerer de indgange der skal udfyldes. (a) I første gennemløb beregnes hele tabellen. (b) I andet gennemløb beregnes to mindre dele af tabellen. Tilsammen udgør de to dele mere end halvdelen af tabellen, da sluttilstanden i første del også skal være starttilstanden i anden del. (c) I tredje gennemløb beregnes fire små dele af tabellen. Tilsammen udgør de fire dele mere end en fjerdedel af tabellen, da hver del må starte i samme tilstand som den forrige del sluttede.

38 28 KAPITEL 3. VITERBI ALGORITMEN Analyse I dette afsnit vil jeg analysere algoritmens tids- og pladsforbrug. Tidsforbrug I denne tidsanalyse vil jeg først beskrive antallet af celler der beregnes i hvert rekursionslag. Derefter vil jeg beregne det samlede antal af celler der skal beregnes, for til sidst at kunne give et overslag på, hvor meget tid algoritmen skal bruge. I første gennemløb udfyldes alle n k celler, svarende til figur 3.8(a), hvor n er længden på strengen, og k er antallet af tilstande i modellen. I det næste gennemløb, udfyldes et antal celler svarende til de farvede celler på figur 3.8(b). Dette antal kan beskrives med følgende formel, hvor j er tilstanden som stien passerede i midtersøjlen. n n n n j + (k j + 1) = (j + k j + 1) = (k + 1) I det tredje gennemløb udfyldes et antal celler svarende til de farvede celler på figur 3.8(c). Dette antal kan beskrives med følgende formel, hvor j 1, j 2 og j 3 svarer til tilstandene som stien passerede i henholdsvis søjle i 1, i 2 og i 3. n n n n j 1 + (j 2 j 1 + 1) + (j 3 j 2 + 1) + (k j 3 + 1) n ( ) 4 = n = 4 = j 1 + (j 2 j 1 + 1) + (j 3 j 2 + 1) + (k j 3 + 1) ( ) j 1 j 1 + j 2 j 2 + j 3 j 3 + k + 3 n 4 (k + 3) Generelt kan antallet af celler der skal udfyldes i det i te rekursionslag beskrives af følgende formel. n 2 i 1 (k + 2 i 1 1) Det samlede antal celler der skal udfyldes i alle lag bliver derfor log n i=1 n 2 i 1 (k + 2 i 1 1) For at kunne regne videre på dette resultat, sættes n 2 = n, hvor n = n i 1 2 i 1 hvis n er lige og n = n + 1 hvis n er ulige.

39 3.3. TOPO 29 log n i=1 = = n 2 i 1 (k + 2i 1 1) log n i=1 log n i=1 n k 2 i 1 + n (2 i 1 1) 2 i 1 n log n k 2 i 1 + i=1 n (2 i 1 1) 2 i 1 log n log = n 1 n 2 i 1 1 k + n 2i 1 2 i 1 i=1 i=1 n k 2 + n log n For at udfylde en celle skal der maksimalt tilgåes k celler fra foregående søjle. Derfor bliver den samlede udførelsestid til O(nk 2 + kn log n). Da worst-case tidsforbruget består af to led, vil tidsforbruget afhænge af hvilket led der er det dominerende led. Altså vil tidsforbruget være O(n k 2 ), hvis antallet af tilstande er større end log n. Omvendt vil tidsforbruget være O(kn log n), hvis antallet af tilstande er mindre end log n. Kantlist repræsentationen vil for nogle modeller være en fordel, mens den for andre vil være en ulempe. Hvis modellen er tynd 3, vil der i første gennemløb blive frasorteret mange tilstande, og tiden vil derfor blive O(n (k + E) + kn log n), hvor E er det samlede antal kanter i modellen. Hvis modellen ikke er tynd, men stadig opfylder det topologiske krav, vil algoritmen være hurtigere i de dybe rekursive lag, hvis kantlist repræsentationen udskiftes med matriks repræsentationen samtidig med at der kun ledes efter foregående tilstande i det rette interval, det vil sige mellem starttilstanden for det aktuelle delproblem og den aktuelle tilstand. Dette vil ikke gøre nogen forskel i første gennemløb, men i alle de følgende gennemløb er det ikke nødvendigt at springe over tilstande, hvor nummereringen er mindre end starttilstanden. Pladsforbrug Pladsforbruget i denne algoritme er det samme i Hirschberg algoritmen, da datastrukturerne er de samme. Der gemmes kun to søjler af den primære tabel, og to søjler af den sekundære tabel. Det vil sige, at der maksimalt bruges 4k plads, hvilket giver et worst-case pladsforbrug på O(k). 3 Som beskrevet i afsnit 3.1.3

40 30 KAPITEL 3. VITERBI ALGORITMEN Opsummering I dette kapitel har jeg beskrevet en algoritme, Topo, som var en specificeret udgave af Hirschberg algoritmen fra kapitel 3.2. Denne algoritme var begræset til topologiske modeller, hvilket gjorde det muligt at se bort fra visse tilstande i mindre delproblemer. Dette betød, at de rekursive kald kunne begrænses både med hensyn til tilstandene og inputstrengen. Resultatet af analysen var, at worst-case udførelsestiden, som bestod af to led, afhang af forholdet mellem k og log n. Hvis k > log n ville første led være det dominerende led, og tidsforbruget vil i så fald være O(k 2 n). Hvis derimod k < log n, ville det andet led dominere, og tidsforbruget ville være O(kn log n). Pladsforbruget forblev O(k), som i Hirschberg algoritmen. Altså en væsentlig forbedring i forhold til Standard algoritmen, der brugte O(k n) plads. 3.4 Checkpoint Her i afsnit 3.4 vil jeg beskrive en simpel udgave af Checkpoint algoritmen fra [4]. I afsnit gives baggrunden for denne algoritme. I afsnit beskrives min udgave af algoritmen. I afsnit gives en analyse af algoritmen og til sidst opsummeres der i afsnit Baggrund I [4] beskrives en algoritme, hvor nogle søjler, kaldet checkpoints, gemmes så det er muligt at genberegne dele af tabellen under backtracking. Først gemmes søjlerne som i Standard algoritmen, men når hukommelsen bliver fyldt, slettes alle søjler på nær den sidst nye, som så bliver det første checkpoint. Herefter fortsætter algoritmen med at huske alle efterfølgende søjler indtil der igen bliver pladsproblemer, og alle søjler slettes på nær den sidste søjle samt tidligere checkpoints. Sådan bliver algoritmen ved indtil sidste søjle er fundet og backtrackingen kan begynde. På denne måde er der hele tiden lige plads nok til at genberegne de slettede søjler mellem to checkpoints, når der skal backtackes. Tabellen backtrackes ved at dele heraf genberegnes. Disse dele svarer til søjlerne mellem to checkpoints. Således at der først backtrackes fra sidste søjle til sidste checkpoint, og derefter mellem de sidste to checkpoints, og så videre. Hvis der stadig ikke er hukommelse nok, selvom der kun huskes på checkpoints, kan algoritmen oprette checkpoints i forskellige levels. Hvis hukommelsen bliver fyldt op af checkpoints på level 1, slettes alle disse på nær det sidste, som bliver et level 2 checkpoint. Ligeledes kan der oprettes et level 3 checkpoint, hvis hukommelsen er fyldt op af level 2 checkpoints. [7] giver et bud på hvordan denne algoritme kan optimeres, i de tilfælde hvor en l-level algoritme lige præcis ikke er tilstrækkelig, så det bliver nødvendigt at bruge en l+1-level algoritme. Dette gør, at information bliver slettet, uden at det er strengt nødvendigt. Derfor beskriver

41 3.4. CHECKPOINT 31 [7] en algoritme de kalder l, l +1-level algoritmen. Forskellen fra algoritmen beskrevet i [4] er at denne algoritme forsøger at undgå at slette checkpoints, hvis det ikke er nødvendigt. Det vil sige, at hvis hukommelsen er fyldt op af checkpoints, slettes kun det antal checkpoints som gør det muligt at gennemføre resten af beregningen. Fordelen ved Checkpoint algoritmen frem for Hirschberg algoritmen er, at det er muligt at udføre post processering på tabellen, da man via Forward og Backward algoritmerne kan tage udgangspunkt i et checkpoint og derfra genberegne de slettede søjler. Dette er ikke muligt med Hirschberg algoritmen, da den kun kan finde den mest sandsynlige sti, og ikke husker på andre søjler end de to sidste Algoritmen I stedet for at lade antallet af checkpoints afhænge af den hukommelse der er til rådighed, vil jeg i min udgave af Checkpoint algoritmen, lade antallet af checkpoints afhænge af størrelsen på n. Helt præcis, vil jeg lade min algoritme huske på n checkpoints, hvilket betyder at der bruges n n k = n k plads til at gemme checkpoints. Ligeledes bruges n k plads når tabellen genberegnes mellem to checkpoints. Altså bruges der lige meget plads til at gemme checkpoints og til at genberegne tabellen under backtrackingen. Flere checkpoints vil resultere i at der bruges mere plads på at gemme checkpoints, og færre checkpoints vil resultere i at der bruges mere plads på genberegningen. Pseudo kode Pseudo kode for algoritmen kan ses i algoritme 3.9 og Algoritmen tager tre parametre, n, k og s. Her er n størrelsen på inputstrengen, k er antallet af tilstande og s er selve strengen. I algoritme 3.9 foretages første gennemløb, hvor de n checkpoints findes og gemmes. På linje 1 beregnes første søjle ved hjælp af basis metoden ligesom i Hirschberg algoritmen. På linje 2 oprettes en kø, der skal bruges til at gemme de søjler, der skal være checkpoints. Fra linje 4 til 20 sker beregningen af søjlerne 1, 2,..., a, hvor a er det sidste checkpoint. Dette sker stort set på samme måde som i Hirschberg algoritmen. To arrays previous og current, bruges til at repræsentere den aktuelle og den foregående søjle. Først gemmes current i previous, da current allerede er fyldt ud via basis metoden eller via forrige iteration. Alle indgange i current, udfyldes ved at finde den bedste foregående tilstand fra previous, præcis som det blev gjort i Hirschberg. På linjerne 17 til 19 gemmes current som et checkpoint, hvis i mod n = 0. I algoritme 3.10 genberegnes tabellen i mindre dele, og disse dele backtrackes. Dette skel mellem søjlerne a og b. Først er a det sidste checkpoint, og b er n. Standard algoritmen køres så på denne deltabel og der backtackes efterfølgende.

42 32 KAPITEL 3. VITERBI ALGORITMEN Algoritme 3.9 Checkpoint Første del Require: n, k, s 1: current = basis(s[0]) 2: checkpoints = empty queue 3: a = n 1 n n 4: for i = 1 a do 5: previous = current 6: current = new array[k] 7: for j = 1 k do 8: x = 0 9: for l = 1 k do 10: t = previous[l] A l,j 11: if t > x then 12: x = t 13: end if 14: end for 15: current[j] = B symbol[z],j x 16: end for 17: if i mod n = 0 then 18: checkpoints.push(current) 19: end if 20: end for Algoritme 3.10 Checkpoint Anden del 21: b = n 22: while a 0 do 23: viterbi (s, a, b, current) 24: backtrack (s, a, b) 25: b = a 26: a = a n 27: current = checkpoints.pop() 28: end while

43 3.4. CHECKPOINT 33 På linjerne 25 til 27 opdateres a og b, så de nu hver især peger på det forrige checkpoint. Ligeledes sættes current til at være det forrige checkpoint. Første gennemløb Første gennemløb består i at finde n checkpoints, som huskes gennem hele algoritmen. Se figur 3.9. Resten af søjlerne gemme ikke, og skal derfor genberegnes under backtracking. Som Hirschberg beregnes søjlerne i første gennemløb ved kun at huske på to søjler, current og previous. Når den aktuelle søjle er fundet, ved hjælp af den foregående, smides den foregående væk og den aktuelle flyttes til previous. Hver n te søjle er et checkpoint og gemmes derfor i en sekundære tabel. Figur 3.9: Første gennemløb. De farvede søjler er checkpoints, kun disse søjler gemmes. Jeg har valgt at lade første søjle være et checkpoint, selvom denne søjle let kan genberegnes under backtrackingen. Min udgave af Checkpoint lader Standard algoritmen genberegne alle søjler under backtrackingen, dette er grunden til at jeg alligevel har valgt at lade den første søjle være et checkpoint, da dette formindsker antallet af modificeringer der skal laves på Standard. Backtracking Når sidste checkpoint er fundet, kan backtrackingen begynde. Her bruges Standard til at beregne alle søjlerne fra sidste checkpoint til søjle n, hvorefter der backtrackes på denne del af tabellen. Se figur 3.10(a). Herefter fortsætter algoritmen med at genberegne søjlerne mellem de to sidste checkpoints, så denne del også kan backtrackes. Se figur 3.10(b). Her starter backtrackingen i samme tilstand, som backtrackingen sluttede i, i den forrige del. Dette gentages indtil hele stien er fundet. Se figur 3.10(c). Før Standard algoritmen kan bruges til dette formål, er det nødvendigt at lave nogle små ændringer af denne. For det første skal den ikke beregne hele tabellen, men kun mindre dele heraf. Så det skal være muligt at specificere hvilket område

44 34 KAPITEL 3. VITERBI ALGORITMEN (a) Sidste del (b) Midterste del (c) Første del Figur 3.10: Backtracking. De blå felter er de genberegnede søjler, de grå søjler er checkpoints. (a) Alle søjlerne efter sidste checkpoint beregnes med Standard algoritmen, hvorefter deltabellen backtrackes fra den mest sandsynlige sluttilstand. (b) Alle søjlerne mellem de sidste to checkpoints genberegnes, og backtrackingen fortsætter fra den tilstand hvor backtracking sluttede i (a). (c) Alle søjler mellem de første to checkpoints genberegnes, og backtrackingen fortsætter fra den tilstand hvor backtracking sluttede i (b).

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

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

Læs mere

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

Sortering af information er en fundamental og central opgave.

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

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

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

Læs mere

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

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

Læs mere

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

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

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

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

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet 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

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

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

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

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. Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges).

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

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

Selvstudium 1, Diskret matematik

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

Læs mere

Grundlæggende køretidsanalyse af algoritmer

Grundlæggende køretidsanalyse af algoritmer Grundlæggende køretidsanalyse af algoritmer Algoritmers effektivitet Størrelse af inddata Forskellige mål for køretid Store -notationen Klassiske effektivitetsklasser Martin Zachariasen DIKU 1 Algoritmers

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. Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges).

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. Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges).

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. Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges).

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

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

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

Læs mere

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

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

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

Introduktion. Philip Bille

Introduktion. Philip Bille Introduktion Philip Bille Plan Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Algoritmer og datastrukturer Hvad er det? Algoritmisk problem: præcist defineret relation mellem

Læs mere

Sommeren 2001, opgave 1

Sommeren 2001, opgave 1 Sommeren 2001, opgave 1 Vi antager at k 3, da det ellers er uklart hvordan trekanterne kan sættes sammen i en kreds. Vi ser nu at for hver trekant er der en knude i kredsen, og en spids. Derfor er n =

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} Eksempel 1: Længste fælles delstreng Alfabet = mængde af tegn: {a,b,c,...,z},

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

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

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

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

Læs mere

Algoritmer og invarianter

Algoritmer og invarianter Algoritmer og invarianter Iterative algoritmer Algoritmen er overordnet set een eller flere while eller for-løkker. Iterative algoritmer Algoritmen er overordnet set een eller flere while eller for-løkker.

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

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

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

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti. Korteste veje Korteste veje i vægtede grafer Længde af sti = sum af vægte af kanter på sti. Korteste veje i vægtede grafer Længde af sti = sum af vægte af kanter på sti. δ(u, v) = længden af en korteste

Læs mere

Danmarks Tekniske Universitet

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

Læs mere

Danmarks Tekniske Universitet

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

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

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

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

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

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

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 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

DM507 Algoritmer og datastrukturer

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

Læs mere

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

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti. Korteste veje Korteste veje i vægtede grafer Længde af sti = sum af vægte af kanter på sti. Korteste veje i vægtede grafer Længde af sti = sum af vægte af kanter på sti. δ(u, v) = længden af en korteste

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

Skriftlig Eksamen Algoritmer og Datastrukturer 2 (2003-ordning)

Skriftlig Eksamen Algoritmer og Datastrukturer 2 (2003-ordning) Skriftlig Eksamen Algoritmer og Datastrukturer 2 (2003-ordning) Datalogisk Institut Aarhus Universitet Fredag den 28. maj 2004, kl. 9.00 13.00 Opgave 1 (20%) En (r, k) kryds-graf er en orienteret graf

Læs mere

Danmarks Tekniske Universitet

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

Læs mere

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

DM507 Algoritmer og datastrukturer

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

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

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

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

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

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 Eksamen 005, F0 side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 00. Kursusnavn Algoritmik og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Alle skriftlige hjælpemidler.

Læs mere

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

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

Læs mere

Søgning og Sortering. Philip Bille

Søgning og Sortering. Philip Bille Søgning og Sortering Philip Bille Plan Søgning Linæer søgning Binær søgning Sortering Indsættelsesortering Flettesortering Søgning Søgning 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50 1 2 3 4 5 6 7 8 9 10

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

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

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

DATALOGISK INSTITUT, AARHUS UNIVERSITET

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

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

DM517:Supplerende noter om uafgørlighedsbeviser:

DM517:Supplerende noter om uafgørlighedsbeviser: DM517:Supplerende noter om uafgørlighedsbeviser: Jørgen Bang-Jensen October 9, 2013 Abstract Formålet med denne note er at give en form for kogebogsopskrift på, hvorledes man bygger et uafgørlighedsbevis

Læs mere

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel: Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel: Opbyg løsningen skridt for skridt ved hele tiden af vælge lige

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

Mm7: A little bit more about sorting - and more times for exercises - November 4, 2008

Mm7: A little bit more about sorting - and more times for exercises - November 4, 2008 Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm: A little bit more about sorting - and more times for exercises - November 4, 2008 1 Algorithms and Architectures

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

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

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

DATALOGISK INSTITUT, AARHUS UNIVERSITET

DATALOGISK INSTITUT, AARHUS UNIVERSITET DATALOGISK INSTITUT, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Algoritmer og Datastrukturer (00-ordning) Antal sider i opgavesættet (incl. forsiden): 7 (syv) Eksamensdag:

Læs mere

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n+logn logn (logn) 7 (3/2) n

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n+logn logn (logn) 7 (3/2) n Side af sider Opgave (%) Ja Nej n er O( n )? n er O(log n)? n er O(n )? n + er O(0n)? nlogn er O(n / )? Opgave (%) Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: nlogn logn

Læs mere

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning Søgning og Sortering Søgning og Sortering Philip Bille Søgning. Givet en sorteret tabel A og et tal x, afgør om der findes indgang i, så A[i] = x. Sorteret tabel. En tabel A[0..n-1] er sorteret hvis A[0]

Læs mere

Matematisk modellering og numeriske metoder. Lektion 16

Matematisk modellering og numeriske metoder. Lektion 16 Matematisk modellering og numeriske metoder Lektion 16 Morten Grud Rasmussen 6. november, 2013 1 Interpolation [Bogens afsnit 19.3 side 805] 1.1 Interpolationspolynomier Enhver kontinuert funktion f på

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

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

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

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

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

Læs mere

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

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af)

Læs mere

Sammenhængskomponenter i grafer

Sammenhængskomponenter i grafer Sammenhængskomponenter i grafer Ækvivalensrelationer Repetition: En relation R på en mængde S er en delmængde af S S. Når (x, y) R siges x at stå i relation til y. Ofte skrives x y, og relationen selv

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

Danmarks Tekniske Universitet

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

Læs mere

Introduktion 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

dpersp Uge 40 - Øvelser Internetalgoritmer

dpersp Uge 40 - Øvelser Internetalgoritmer Øvelse 1 dpersp Uge 40 - Øvelser Internetalgoritmer (Øvelserne 4 og 6 er afleveringsopgaver) a) Hver gruppe får en terning af instruktoren. Udfør 100 skridt af nedenstående RandomWalk på grafen, som også

Læs mere

Søgning og Sortering. Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering. Philip Bille

Søgning og Sortering. Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering. Philip Bille Søgning og Sortering Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering Philip Bille Søgning og Sortering Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering

Læs mere

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

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

Læs mere

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 5. 5n 2 5 logn. 2 logn

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 5. 5n 2 5 logn. 2 logn Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side af sider Opgave (%) n +n er O(n )? Ja Nej n er O(n )? n+n er O(n. )? n+n er O(8n)? n logn er O(n )? Opgave (%) Opskriv følgende funktioner

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

Deobfuskering af ord i forbindelse med spamfiltrering

Deobfuskering af ord i forbindelse med spamfiltrering Deobfuskering af ord i forbindelse med spamfiltrering Benjamin Toft Jakobsen Årskort nr. 20022151 Master s Thesis Vejleder: Christian Nørgaard Storm Pedersen Datalogisk Institut Aarhus Universitet Danmark

Læs mere

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

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

Læs mere

I M P L E M E N T A T I O N A F S K J U L T E

I M P L E M E N T A T I O N A F S K J U L T E I M P L E M E N T A T I O N A F S K J U L T E M A R K O V M O D E L L E R M E D F O K U S P Å T Y N D E M O D E L L E R SPECIALE AFLEVERET MAJ 2010 MADS BAGGESEN - 20042326 MADS@BAGGESEN.NET VEJLEDER:

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

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer.

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer. Merging og Hashing Tilgang til data To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer. API for sekventiel tilgang (API =

Læs mere

DRONNINGER (QUEENS) Opgave 1

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

Læs mere

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

Normalfordelingen og Stikprøvefordelinger

Normalfordelingen og Stikprøvefordelinger Normalfordelingen og Stikprøvefordelinger Normalfordelingen Standard Normal Fordelingen Sandsynligheder for Normalfordelingen Transformation af Normalfordelte Stok.Var. Stikprøver og Stikprøvefordelinger

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

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

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET INSTITUT FOR DTLOGI, RHUS UNIVERSITET Science and Technology EKSEN lgoritmer og Datastrukturer (00-ordning) ntal sider i opgavesættet (incl. forsiden): 11 (elleve) Eksamensdag: Torsdag den 1. juni 01,

Læs mere