Algoritmer og Datastrukturer 2 (Sommer 2004)

Relaterede dokumenter
Ë Ö ØÐ Ñ Ò ÙØÓÑ ØØ ÓÖ Ó Ö Ò Ð Å½ µ ÁÒ Ø ØÙØ ÓÖ Å Ø Ñ Ø ² Ø ÐÓ ËÝ Ò ÍÒ Ú Ö Ø Ø ß Ç Ò ÍÒ Ú Ö Ø Ø Ä Ö Ò ½ º ÒÙ Ö ¾¼¼ ÐÐ Ú ÒÐ ÐÔ Ñ Ð Ö Ð Ö Ó ÒÓØ Ø Ö Øºµ Ñ

ÌÖÝ Ø ÁÅÅ ÌÍ

ÒØÖÓÔÝ Ó Ò Ò ÂÈ Ø ÐÐ Ñ ÓÑÔÖ ÓÒ Â Ò ÎÓ Ð Ò Ë ÔØ Ñ Ö ¼Ø ¾¼½½ ½» ½

deta = A = deta = a 11 deta 11 a 12 det A 12 + a 13 deta 13 deta = deta = 1(0 2) 5(0 0) + 0( 4 0) = 2 deta = a i,j deta i,j

ÁÒ ØÖÙØ ÓÒ Ë Ø Ö Ø ØÙÖ ÁÒØÖÓ ÙØ ÓÒ ÁÒ ØÖÙØ ÓÒ Ë Ø ÁÒØ Ö ØÛ Ò Ó ØÛ Ö Ò Ö Û Ö Ú Ð ØÓ ÔÖÓ Ö ÑÑ Ö ËØ Ô ØÓ Ò ÁÒ ØÖÙØ ÓÒ Ë Ø ÓÖ Ú Ò Óѹ ÔÙØ Ö Û Ø Ø Ú Ð Ð ÐØ

½ Ë Ë ÔÐ Ý Ñ Ò Ö ÔÖÓ Ö ÑÑ Ö Ò µ ÔÖÓ Ö Ñ ÐÓ ÓÙØÔÙØ Ú Ò Ù Ö Ö ÔÖÓ Ù Ö ÖØ Ò ÐØ Ø Ó ÙÑ ÒØ Ö Ë Ë Æ Ä ËÌ Ñ ÒÙ» Ñ ¹ÓÖ ÒØ Ö Ø ÓÚ Ö Ý Ò Ò Ö Ú Ö Ó Ö Ö ÔÖÓ Ö ÑÑ

ÇÚ Ö Ø ½ ¾ ÀÝÔÓØ Ø Ø ¹ Ò Ö Ô Ø Ø ÓÒ ÀÝÔÓØ Ø Ø Ó ÓÒ Ò ÒØ ÖÚ ÐÐ Ö ËØÝÖ Ó Ø ÔÖ Ú Ø ÖÖ Ð ÀÝÔÓØ Ø Ø ÓÖ ØÓ ÒÒ Ñ Ò Ø ÑÔ Ð ½ Ò Ö Ð ÓÖÑÙÐ Ö Ò Å Ò Ø Ú Ö Ò Å Ù Ò

ÇÚ Ö Ø ½ ÈÖ Ø ÁÒ ÓÖÑ Ø ÓÒ ¾ ÁÒØÖÓ Ù Ø ÓÒ Ø Ð ËØ Ø Ø ËÓ ØÛ Ö Ê Ö Ú Ò Ø Ø Ø Æ Ð Ø Ð Ö Ö Ñ Ø ÐÐ Ò Â Ò Ãº Å ÐÐ Ö Ñ ÑѺ ØÙº µ ÁÒØÖÓ Ù Ø ÓÒ Ø Ð ËØ Ø Ø ÓÖ Ð

q 1 q 2 x 1 x 2. E(x, p, X, P) = 1 2M P x X.

ÁÒ ÓÐ ½ ÇÔÖ Ø Ò ÖÙÔÔ º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º ½º½ ÑÖ º º º º º º º º º º º º º º º º º º º º º º


Sommeren 2001, opgave 1


ÇÚ Ö Ø ½ ¾ ÅÓØ Ú Ö Ò ÑÔ Ð Ø Ñ ØÓÖ ÓÖ Ú Ö Ò Ö χ 2 ¹ ÓÖ Ð Ò Ò ÃÓÒ Ò ÒØ ÖÚ Ð ÓÖ Ò Ú Ö Ò ÀÝÔÓØ Ø Ø Ú Ö Ò Ö Ì Ø Ò Ú Ö Ò Ì Ø ØÓ Ú Ö Ò Ö F ¹ ÓÖ Ð Ò Ò ÀÝÔÓØ Ø

ÇÚ Ö Ø ½ ¾ ÃÓÒØ ÒÙ ÖØ ËØÓ Ø Ú Ö Ð Ó ÓÖ Ð Ò Ö ÌØ ÙÒ Ø ÓÒ ÓÖ Ð Ò ÙÒ Ø ÓÒ Å ÐÚÖ Ò ÓÒØ ÒÙ ÖØ ØÓ Ø Ú Ö Ð Î Ö Ò Ò ÓÒØ ÒÙ ÖØ ØÓ Ø Ú Ö Ð ÍÒ ÓÖÑ ÓÖ Ð Ò Ò ÑÔ Ð

DATALOGISK INSTITUT, AARHUS UNIVERSITET

ËÓÑ ³ Ü ³ ÚÐ ÖÓÙÔº ËÓÑ ³ Ü ³ ÚÐ Ñ Ö Ò ÐÐ Ö Ú Ö Ú Ö Ö Ø Ó ÔÖÓ ÔÐÓØ Ø Ù ÖºÞ Ð ÞÓ ÔÐÓØ Ñ Ö Ò ÖÓÙÔ» Ü Ü ½ Ú Ü Ü ¾ Ö Ñ Ü ½ Ó Ø µ Ð Ð À µ Ú ÐÙ À ¾µ Ñ ÒÓÖ ÆÇ

w j p j 1 w j / p / = 1

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Skriftlig Eksamen Algoritmer og Datastrukturer 2 (2003-ordning)

ÓÖÓÖ ØØ ÔÖÓ Ø Ö Ö ÙÐØ Ø Ø Ø Ñ Ö Ñ ÈÓ Ø ÒÑ Ö ÓÑ Ø ÐÓ ¹ Ð Ö Ò ÔÖÓ Ð Ñ ÓÖ Ô ÒØÖ ÆÓÖ ÐÐ Ò º Î Ð Ø Ø Ù Ö ÚÓÖ Ñ Ò ÔÖÓ Ø Ñ Ö Ñ Ò Ú Ö ÓÑ Ö ÓÖ ÚÓÖ Ú ÓÑÑ Ò ÚÖ Ø

ÌÖ È Ö Ò ÓÖ Ó Ë Ð Ø ÓÒ ÌÖ È Ö Ò ÓÖ Ó Ë Ð Ø ÓÒ Ê Ò Ö Ï Ð ÐÑ ÍÒ Ú Ö ØØ Ë ÖÐ Ò Û Ð ÐÑ ºÙÒ ¹ º ½ º Þ Ñ Ö ¾¼¼

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Definition : Et træ er en sammenhængende ikke-orienteret graf uden simple kredse. Sætning : En ikke-orienteret graf er et træ hvis og kun hvis der er


Danmarks Tekniske Universitet

DATALOGISK INSTITUT, AARHUS UNIVERSITET

JOB-SHOP- SKEDULERING OG TOGSKEDULERING Christian Sc hmidt L YNGBY 2002 EKSAMENSPR OJEKT NR. 34/02 IMM

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Faggruppe Landmåling og faggruppe trafikstudier. Jakob Jakobsen c958320

¾

Danmarks Tekniske Universitet

xi ; ˆσ 2 =, s/ n t(n 1)

Ð ÓÖ ØÙ Ö Å Ø Ñ Ø ¹ ÓÒÓÑ Ó ËØ Ø Ø ½ º Ö Ò ÒÖº ½ Ó ØÓ Ö ¾¼¼

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Danmarks Tekniske Universitet

DATALOGISK INSTITUT, AARHUS UNIVERSITET

ÇÚÖ Ø ½ ¾ ÁÒØÖÓ ÃÓÒÒ ÒØÖÚÐ ÓÖ Ò ÒÐ ÑÔÐ ½ ØÑÑÐ ØÔÖÚ ØÖÖÐ ÑÔÐ ½ ¹ ÓÖØ Ø ÀÝÔÓØ Ø Ø ÓÖ Ò ÒÐ ÑÔÐ ½ ¹ ÓÖØ Ø ÀÝÔÓØ Ø Ø ÓÖ ØÓ ÒÐ ÑÔÐ ¾ ÀÝÔÓØ Ø Ø ÓÖ Ö ÒÐ ÑÔÐ ¾

Danmarks Tekniske Universitet

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Prioritetskøer og hobe. Philip Bille

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

ÇÚÖ Ø ÁÒÖÒ ÓÖ ÒÒÑ ÒØ ÇÒ¹ ÑÔÐ ØÙÔµ ½ ÁÒØÖÓ Ó ÒÖÐÐ ÖÖ ¾ Å ÑÐ Ð Ô Ø ØÑØ ØÑÑÐ ØÔÖÚ ØÖÖÐ ÃÓÒÒ ÒØÖÚÐ ÍÚÐ ØÐ ÙÒØ ÚÖÒ ¹ ØÙÔ ÃÒØ ÐÐÖ ÙÒØ ÚÖÒ Ê Ê ÒÓØ µ ÂÒ Ãº ÅÐ

V e l k o m m e n T i l M a t e m a t i k s t u d i e t! P P α ) ν xν αν ϕ(xν ϕ P P αν αν M a t e m a t i s k R u s m a p p e

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

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

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

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

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

Mindste udspændende træ

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Nogle anvendelser af programmel R, bl.a. til hypotesetest

LØSNING AF OPENSHOP OG FLO WSHOP PR OBLEMER Susanne Hjorth Tønder Rasm ussen L YNGBY 2001 EKSAMENSPR OJEKT NR. 00/00 IMM

Estimation og konfidensintervaller

Ý ÓÖ ÄÁ ½º Í Ú ËØ Ò À Ò Ò ÁÒ Ø ØÙØ ÓÖ ÖÙÒ Ú Ò Ó Å Ð Ø ÓÚ Ò Ð ÙÐØ Ø Ã Ò ÚÒ ÍÒ Ú Ö Ø Ø ¾¼¼

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

Danmarks Tekniske Universitet

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Danmarks Tekniske Universitet

.. if L(u) + w(u, v) < L(v) then.. begin... L(v) := L(u) + w(u, v)... F (v) := u.. end. med længde L(z)}

ÓÖÓÖ ØØ ÔÖÓ Ø Ö Ù Ö Ø ÓÑ Ø ÐÓÖ ÔÖÓ Ø Ó Ö Ö ØØ Ø ÑÓ Ô Ö ÓÒ Ö Ñ Ø Ò Ø Ð Ð Ñ Ò º Â Ú Ð ÖÒ Ø Ñ Ò Ú Ð Ö È Ø Ö ÌÓÙ ÓÖ ÓÖ Ø Ú Ø ÒÖ Ø Ö Ò Ú Ò Ø ÓÖ ÐØ Ø ÚÖ ØÖ

Susanne Ditlevsen Institut for Matematiske Fag susanne

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

ÓÖÑ Ð Ô Ø ÓÒ Ò ÔÖÓÓ ÓÖ Ø ØÓÔÓÐÓ Ý Ò Ð Ø ÓÒ Ó ÓÑ Ò ØÓÖ Ð ÙÖ Ö ØÓÔ Ð Ò Ö Ò Â Ò¹ Ö ÒÓ Ù ÓÙÖ Ä ÓÖ ØÓ Ö Á Í ÍÒ Ú Ö Ø ËØÖ ÓÙÖ ÆÊË ÈÐ ³ÁÒÒÓÚ Ø ÓÒ Ì ÒÓÐÓ ÕÙ Ó

DATALOGISK INSTITUT, AARHUS UNIVERSITET


DATALOGISK INSTITUT, AARHUS UNIVERSITET

αν x ν αν αν ϕ(x ν )

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

ÌÖÝ Ø ÁÅÅ ÌÍ

Danmarks Tekniske Universitet

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Datastrukturer (recap)

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Mindste udspændende træ

Sammenhængskomponenter i grafer

Susanne Ditlevsen Institut for Matematiske Fag susanne

Effektivisering af det industrielle byggeri

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Ð ÓÖ ØÙ Ö Å Ø Ñ Ø ¹ ÓÒÓÑ Ó ËØ Ø Ø ½½º Ö Ò ÒÖº ¾ Ñ Ö ½

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Minimum udspændende Træer (MST)

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

DM507 Algoritmer og datastrukturer

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

ÇÚÖ Ø ½ ¾ ÑÔÐ À Ó ÚØ ÃÓÖÖÐØÓÒ ÊÖ ÓÒ ÒÐÝ Ô ½½µ ÅÒ Ø ÚÖØÖ ÑØÓ ÁÒÖÒ ÖÖ ÓÒ ÑÓÐ ÁÒÖÒ ÓÖ ÖÒ Ó ÐÒÒ ÃÓÒÒ ÒØÖÚÐ ÓÖ ÐÒÒ ÈÖØÓÒ ÒØÖÚÐ ÓÖ ÐÒÒ ÃÓÖÖÐØÓÒ Ó ÖÖ ÓÒ Ê Ê

Danmarks Tekniske Universitet

Ñ ½¾º¾ Ñ Ö ½ º Ð ÓÖ ØÙ Ö¹ Å Ø Ñ Ø ¹ ÓÒÓÑ ¹ Ó ËØ Ø Ø ØÙ Ö Ò Ú Ã Ò ÚÒ ÍÒ Ú Ö Ø Øº Ê Ø ÓÒ ÖÙÔÔ À ÒÖ Ö Ø Ò ÖÓÚ Ò Ú ºµ È Ø Ö ÄÙÒ Ò Ö Ó Æ Ð Ò Ö Ì ÖÒÕÙ Ø ÁÒ

Ð ÓÖ ØÙ Ö Å Ø Ñ Ø ¹ ÓÒÓÑ Ó ËØ Ø Ø ½½º Ö Ò ÒÖº Ñ ÖØ ½


Transkript:

Algoritmer og Datastrukturer 2 (Sommer 2004) 1a n = rk + 2. m = 2k + 2(r 1)(k 1). Dijkstra: O(m log n) = O((2k + 2(r 1)(k 1))log(rk + 2)) = O(rk log(rk)). 1b 2 / 1 t 1 2 1 / 1 3 / 3 1 3 s 0 / 0 På grafen er angivet Dijkstra s afstand / rigtige afstand. 1c Da en kryds-graf er acyklisk, kan de korteste afstande fra s til alle knuder findes vha. DAGshortestPath [GT, Algoritme 7.9] i tid O(n + m). Da m 2n er dette O(n). 2a Bellman-Ford: O(nm) = O((rk + 2)(2k + 2(r 1)(k 1) + 1)) = O(r 2 k 2 ). 2b Lad G være grafen G med kanten (t, s) fjernet. Afstanden fra u til v i grafen G kan beregnes som d G (u, v) = min{d G (u, v), d G (u, t) + w(t, s) + d G (s, v)}. Da G er en DAG, kan vi bruge DAGshortestPath [GT, Algoritme 7.9] to gange for at finde den kortest vej fra hhv. u og s til alle øvrige knuder i O(n + m) tid. De korteste afstande fra u kan nu beregnes i O(1) for hver af de n knuder vha. den nævnte formel. Da m 2n bliver den totale tid O(n). 2c Kør algoritmen fra 2b n gange, en gang for u værende hver af de n knuder. Da algoritmen fra 2b tager tid O(n), bliver den totale tid O(n 2 ). 3a i 1, j n while i < j fjern letteste kant e fra cycklen (u, v i, w, v j, u) if e incident til v i then i i + 1 else j j 1 Hver iteration af while-løkken fjerner en af de 2n kanter, dvs. O(n) iterationer der hver tager O(1) tid da man kun betragter 4 kanter i hver iteration while-løkken. 1

4a k \ s 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 0 S 1 S S S S 2 S S S S S S 3 S S S S S 4b procedure B(n, N) for k = 0 to n for s = 0 to N A[k, s] false if k = 0 then if s = 0 then A[k, s] true else if x k = 1 then if s > 0 and A[k 1, s 1] then A[k, s] true else p x k while p s if A[k 1, s p] then A[k, s] true p p x k return A[n, N] Da while-løkken forøger p med en faktor x k i hver iteration, gennemløbes denne højest log xk s log 2 N gange. De to for-løkker giver total tid O(nN log N). 4c Den sidste linie i pseudo-koden til 4b erstattes med nedenstående. Som argumenteret i 4b gentages while-løkken højest log 2 N gange, dvs. total yderligere tid i forhold til 4b er O(n log N). Den totale tid forbliver O(nN log N). if A[n, N] then s N for k = n downto 1 i 1, p x k while A[k 1, s p] = false i i + 1, p p x k d k i, s s p return d 1,...,d k else return Der findes ingen løsning 2

5a a a b a c # a c a b a b $ a b a b $ a b a c # a c a b a b $ a b $ a c a b a b $ a c # a c a b a b $ b a b $ b a c # a c a b a b $ b $ c a b a b $ c # a c a b a b $ # a c a b a b $ $ 5b a abac#acabab$ b c a $ abab$ #acabab$ b$ c#acabab$ b$ b c #acabab$ $ a $ abab$ #acabab$ c#acabab$ 5c Givet to strenge S 1 og S 2, hvor S 1 + S 2 = n, konstuer suffix-træet for S = S 1 #S 2 $ i O(n) tid ifølge antagelsen. I et postorder gennemløb af suffix-træet marker bladene S 1 eller S 2 hvis de svarer til suffixer startende i hhv. S 1 eller S 2. Indre knuder markeres S 1 og/eller S 2 hvis mindst et af børnene er markeret S 1 og/eller S 2. I et preorder gennemløb beregn for hver knude længden af strengen fra roden til og med knuden. Husk knuden svarende til den længste streng hvor knuden er markeret både S 1 og S 2. For knuden med det længste suffix i både S 1 og S 2 retuneres strengen. Foruden konstruktionen af suffix-træet, så tager både preorder og postorder gennemløbet tid O(n), så den totale tid bliver O(n). 3

Algoritmer og Datastrukturer 2 (Sommer 2005) 1a n = k + 2. m = 2k + 1. Kruskal: O(m log n) = O((2k + 1)log(k + 2)) = O(k log k). 1b Lad knuder fra venstre-mod-højre være v 1, v 2,..., v n, og lad G i bestå af delgrafen indeholdende knuderne v 1, v 2,..., v i, dvs. de i 2 første trekanter. Først konstrueres i O(1) tid et MST for G 3 ved at fjerne den tungeste kant fra den venstre trekant. Herefter konstrueres for i = 3, 4, 5,..., n 1 et MST for G i+1 ud fra et MST for G i. For G i huskes den tungeste kant e i MSTet på stien mellem v i 1 og v i. MST for G i+1 konstrueres nu ved et af følgende to tilfælde: a) Hvis w(v i, v i+1 ) max(w(e), w(v i 1, v i+1 )), så tilføjes (v i 1, v i+1 ) til MST og e sættes til den tungeste af kanterne e og (v i 1, v i+1 ). b) Hvis w(v i, v i+1 ) < max(w(e), w(v i 1, v i+1 )), så tilføjes (v i, v i+1 ) til MST. Hvis w(v i 1, v i+1 ) < w(e) fjernes e fra MST og (v i 1, v i+1 ) tilføjes. Til sidst sættes e til (v i, v i+1 ) v 2 v 4 v 6 v 8... v i 1 v i+1 v 1 v 3 v 5 v 7... e v i Tid: O(n) da vi bruger tid O(1) på hver af de k trekanter, og n = k + 2. 1c En simpel cykel identificeres entydigt ved knuden v i længst til venstre og knuden længst til højre v j. Vi betegner cyklen C i,j, f.eks er nedenstående C 8,15. v 2 v 4 v 6 v 8 v 10 v 12 v 14 v 16 v 18 v 20 v 22 v 1 v 3 v 5 v 7 v 9 v 11 v 13 v 15 v 17 v 21 v 23 Vi finder den letteste simple cykel ved at kigge på G 3, G 4,..., G n som i spørgsmål 1b), hvor man husker a) hvad den letteste simple cykel er i G i, og b) den letteste simple cykel i G i der indeholder v i. Den letteste simple cykel i G i+1 indeholdende v i+1 er enten trekanten C i 1,i+1 eller den letteste simple cykel C k,i i G i indeholdende v i hvor man fjerne kanten (v i 1, v i ) og tilføjer (v i 1, v i+1 ) og (v i, v i+1 ), i.e. C k,i+1. For hver af de nævnte cykeler huskes den første og sidste knude og vægten af cyklen. Disse kan vedligeholdes i O(1) tid når man går fra G i til G i+1. 1

2a n = st 4 m = 2st s t 4 Dijkstra: O(m log n) = O(st log(st)) 2b 2c Lav den tilsvarende orienterede graf, hvor knuder af graf 4 erstattes af 8 knuder, jvf. opgave 2b. Udfør et DFS (eller BFS) gennemløb fra hver af de 8 knuder der repræsenterer startknuden u. Hvis og kun hvis mindst ét af de otte gennemløb når en af de 8 knuder der repræsenterer v, så kan v nås fra u uden venstre sving. Da den nye graf har højst 8n knuder og højst 12n kanter, tager algoritmen tid O(n). 2d Lav en orienteret graf som i 2c, hvor alle kanter har vægt 0, og tilføj kanter svarende til venstre sving som har vægt 1. Kør Dijkstra s algoritme på den resulterende graf med hver af de 8 knuder repræsenterende startknuden u. Den fundne sti fra en knude repræsenterende u til en knude repræsenterende v med korteste afstand s, vil have netop s venstre sving og være en sti der har færrest mulige venstresving. Da grafen har højst 8n knuder og 16n kanter tager Dijkstra s algoritme O(n log n) tid, og den totale tid bliver O(n log n) (den totale tid kan reduceres til O(n) da alle kanter har vægt 0 eller 1, hvilket medfører at prioritetskøen altid kun kan indeholde to forskellige prioriteter). v v 0 0 0 0 1 1 0 0 0 0 0 0 2

3a for i = 1 to n B(i, i) 0 y min y i y max y i for j = i + 1 to n if y j < y min then y min y j if y j > y max then y max y j B(i, j) (x j x i ) (y max y min ) Tid: O(n 2 ) 3b s t 1 2 3 4 5 6 1 2 3 0 4 8 20 30 36 0 0 1 8 9 14 0 0 0 1 2 7 3c Beregn B(i, j) for alle i, j i tid O(n 2 ) (spørgsmål a) for t = 1 to n A(1, t) B(1, t) for s = 2 to k A(s, 1) B(1, 1) for t = 2 to n A(s, t) A(1, 1) + B(2, t) for i = 3 to t if A(s, t) > A(s 1, i 1) + B(i, t) then A(s, t) A(s 1, i 1) + B(i, t) return A(k, n) Tid: O(n 2 + n + k n n) = O(k n 2 ) = O(n 3 ) da vi kan antage k < n (for k n er A(k, n) = 0) 3

4a Søg efter S i strengen SS vha. KMP algoritmen. Hvis S forekommer på en position i, 2 i S, så er S = rotation i 1 (S), se eksempel hvor S = rotate 4 (S). Da KMP tager tid O(n + m), bliver tiden O( SS ) = O(n). SS i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 a b c d a b c d a b c d a b c d S a b c d a b c d 4b abaaaba abaaaba abaaaba abaaaba 4c aaaba$ aabaaaba$ aabaabaaaba$ aaba$ abaaaba$ abaabaaaba$ abaabaabaaaba$ aba$ a$ baaaba$ baabaaaba$ baabaabaaaba$ ba$ $ aba$ aba$ a ba a $ baaaba$ aba$ aba$ a ba $ ba $ a $ baa baaaba$ aba$ aba$ a $ baa baaaba$ 4d Hvis P forekommer som rotate i (P) i S på position j, så forekommer rotate i (P) på position i 1 og 2m+j i PPS$. I suffix-træet findes der så en knude v hvor strengen stavet ned til v er rotate i (P), og bladende svarende til suffixerne af PPS$ startende i position i 1 og 2m + j er i v s undertræ. 1 i 1 m 1 + 2m 2m + j P P S rotate i (P) rotate i (P) For at afgøre om P forekommer som rotation i S bygges suffix-træet for PPS$, og alle knuder annoteres med om der i deres undertræ findes 1) blade der er suffixer startende i position i hvor 2 i m og 2) blade der er suffixer startende i position j hvor 1 + 2m j. Der returneres at P forekommer som rotation i S hvis der findes en knude der er mareket både 1) og 2) og hvor strengen fra roden ned til knuden har længde m. Da annoteringen kan foretages i tid O(n) ved et postorder gennemløb af suffix-træet har vi total tid: O(2m + n) = O(n). 4

Ð ÓÖ ØÑ Ö Ó Ø ØÖÙ ØÙÖ Ö ¾ ËÓÑÑ Ö ¾¼¼ µ ½ ÒØ Ð ÒÙ Ö Ò ¾Ø ½º ÒØ Ð ÒØ Ö Ñ Øº ÃÖ٠г Ð ÓÖ ØÑ Ç Ø ÐÓ Øµº ½ Ð ÓÖ ØÑ ËÐ Ø Ò ØÙÒ Ø ÒØ Ú Ö ØÖ Òغ Ì ÀÚ Ö ÒØ ØÖ Ø ÔÖ Ò Ò Ú Ø Ç Ñµ Ç Òµ Ñ ¾Òº ½ Ð ÓÖ ØÑ Ò Ø Ñ Ò ÑÙÑ Ù Ô Ò Ò ØÖ ÓÖ Ø Ö ÒعØÖ Ø Ù Ò Ò ØÖ ÒØ Ú º Ð Ó¹ Ö ØÑ Ò Ö ½ º Ä Ú Ë ÓÖ Ø Ò Ø Ò Ë Ö Ù Ø Ð Ú ÓÑ Ò ÓÐ Ö ÒØ Ò Ù Úµº ÁÒ Ø Ò ØÖ ÒØ Ù Úµº ÖÒ Ò ØÙÒ Ø ÒØ Ö Ý Ð Ò Ö Ø Ö Ù Úµ Ó Ëº Ì Ç Òµ ½ Ó Ë Ø Ö Ø Ç Ñµ Ç Òµº ¾ Ð ÓÖ ØÑ Í Ö ØÖ ³ Ð ÓÖ ØÑ Ô ÝÒÐ Ö Ò Ñ ÓÑ Ð Ó ÚÓÖ Ð ÓÖ ØÑ Ò ÒÚ Ò Ö Ø ÖÖ Ý ÓÑ ÔÖ ÓÖ Ø Ø º Ì Ç Ñ Ò ¾ µ Ç Ò ¾ µº ¾ Ð ÓÖ ØÑ Í Ö ØÖ ³ Ð ÓÖ ØÑ Ô ÝÒÐ Ö Ò Ñ Ø ÓÑ Ð Ó ÚÓÖ Ð ÓÖ ØÑ Ò ÒÚ Ò Ö Ø ÖÖ Ý ÓÑ ÔÖ ÓÖ Ø Ø º Ê ØÙÒ Ö Ò ÖÓ ÓØ Ö Ö ÓÖØ Ø Ø Ò Ø Ð Øº Ì ÒØ Ð ÒÙ Ö Ò ¼ Ò ½ Ó ÒØ Ð ÒØ Ö Ñ ¼ Ç Ò µ ¾ µ Ú º Ø Ç Ñ ¼ Ò ¼¾ µ Ç Ò µ ¾ µº ¾ Á ÈÐ Ö Òµ ÒÙ Ö Ô Ò Ö Ð ÓÑ ÐÐ Ò Ò¹ Ò Òº ËÝÒÐ Ö Ò Ö Ò ¾ µ ÒØ Öº Á ÑÔÐ Ø Ö Ö ÙÒ Ò ÔÓÐÝ ÓÒ Ñ Ò Ö Ö Ò ÔÓÐÝ ÓÒ¹ ÔÙÒ Ø Ö Ö Ð Ö Ô Ò Ö Ð Ó ÓÑ ÐÐ Ò Ò Ò Òº 00000000000000 11 00000000000000000 11111 0000000000000 1 000000000000000 111 00000000000 11111 00000000000000 11 0000000000 1111 0000000000000 1 000000000 111 00000000000 11111 00000000 11 0000000000 1111 0000000 1 00000000 11 000000 00000000 11 00000 11111 0000000 1 00000 11111 0000000 1 0000 1111 0000000 1 0000 1111 0000000 1 0000 1111 0000000 1 0000 1111 000000 0000 1111 000000 000 111 000000 000 111 000000 000 111 00000 11111 000 111 00000 11111 00 11 00000 11111 00 11 00000 11111 00 11 0000 1111 00 11 0000 1111 01 0000 1111 01 0000 1111 01 0000 1111 01 000 111 01 000 111 000 111 000 111 01 000 111 01 0000 1111 01 0000 1111 01 0000 1111 00 11 0000 1111 00 11 00000 11111 00 11 00000 11111 00 11 00000 11111 00 11 00000 11111 000 111 000000 000 111 000000 000 111 000000 000 111 000000 0000 1111 000000 0000 1111 0000000 1 0000 1111 0000000 1 0000 1111 0000000 1 00000 11111 0000000 1 00000 11111 00000000 11 0000000 1 00000000 11 00000000 11 00000000 11 000000000 111 0000000000 1111 0000000000 1111 00000000000 11111 00000000000 11111 0000000000000 1 000000000000 00000000000000 11 0000000000000 1 000000000000000 111 000000000000000 111 00000000000000000 11111 Ø ½

½ ¾ Í µ ¼ ½ ½ ¾ ½ ¾ Ð ÓÖ ØÑ Í ½µ ¼ ÓÖ ¾ ØÓ Ò Í µ Í ½µ Ü Ü ½ Ï µ ¾ ÓÖ ¾ ØÓ ½ Í µ Ñ Ò Í µ Í µ Ü Ü Ï µ ¾ Ì Ç Ò ¾ µ Ò Ò Ö ÓֹРÒÒ ÑÐ Ò Ò ÓÖ Ú ÖØ º Í Ö Ð ÓÖ ØÑ Ò Ö Ó Ð ÔÖÓ ÙÖ Ò Ö ÔÓÖØ Òµº Ð ÓÖ ØÑ ÔÖÓ ÙÖ Ö ÔÓÖØ µ ½ Ø Ò Ù Ö Ú Ü ½ Ö ØÙÖÒ ÓÖ ½ ØÓ ½ Í µ Í µ Ü Ü Ï µ ¾ Ø Ò Ö ÔÓÖØ µ Ù Ö Ú Ü Ö ØÙÖÒ Ì Ç Ò ¾ µ Ö Ö Ò Ö ÙÖ Ú Ð ÓÖ Ö Ø Ò Ó ÓÖ¹Ð Ò Ø Ö ÙÖ ÚØ Ð Ø ÒÒ ÑÐ Ò Ò º ØÖ Ò ÔÓ Ø ÓÒ ¹ ½ ½ Ð ÓÖ ØÑ ÀÚ Ò Ñ ½ Ö ÔÔÓÖØ Ö Ò Ò ÓÖ ÓÑ Ø Ö º ÐÐ Ö Ö ÃÅÈ Ð ÓÖ ØÑ Ò Ñ Ì Ó È º ÓÖ ½ ¾ Ñ Ö ÃÅÈ Ñ Ì Ó È Ñ Ø Ø Ø Ò ÖÒ Øº ÌÓØ ÐØ Ö ÃÅÈ Ñ ½ Ò º Ì Ç ÑÒµ Ú ÖØ Ø Ñ ½ ÖÙ ÃÅÈ Ø Ö Ø Ç Òµº ¾

Ý Ø ÙÆÜ ØÖ ÓÖ Ì º Ë Ø Ö È ÙÆÜ ØÖ Øº ÓÖ ½ ¾ Ñ Ø Ö È Ñ Ø Ø Ø Ò ÖÒ Ø ÙÆÜ ØÖ Øº Å Ö Ö ÙÒ Ò ÒÙ Ö ÐÐ Ö ÖÒ Ò ÚÓÖ ØÙ ÐÐ ÒØ Ö Ö Ö Ò Ø Ðµº Ä ÙÆÜ ØÖ Ø ÒÒ Ñ Ó Ö ÔÔÓÖØ Ö ÐÐ Ð ÚÓÖ Ö Ö Ò Ñ Ö Ö Ø ÓÖ Öº Ì Ç Òµ ÓÖ Ø ÓÒ ØÖÙ Ö ÙÆÜ ØÖ Ø Ç Ñµ ÓÖ Ú ÖØ Ñ ½ Ò Ò Ö ÙÆÜ ØÖ Ø Ó Ç Òµ ÓÖ Ö ÔÔÓÖØ Ö Ò Òº ÌÓØ ÐØ Ç Ò Ñ ¾ µº Ð ÓÖ ØÑ µ Ë Ø Ö È Ì µ ÓÖ ½ ¾ Ñ Ì Ø Ö È Ñ Ø Ø Ø Ò ÖÒ Ø µ ÓÖ ÐÐ Ô Ö µ ÚÓÖ ½ Ñ Ì Ø Ö È Ñ Ø Ø Ó Ø Ø Ò ÖÒ Øº ÀÚ Ö Ò Ò Ò Ð Ú Ñ ÒØ Ò ÃÅÈ ÐÐ Ö Ò Ò Ò Ø ÓÖÙ Ö Ò Ø ÙÆÜ ØÖ ÓÖ Ì º Ì Î ÖÙ ÃÅÈ Ç ÒÑ ¾ µ ÐÐ Ö Ú ÖÙ Ø ÙÆÜ ØÖ Ç Ò Ñ µº

Algoritmer og Datastrukturer 2 (Sommeren 2007) Opgave 1 Spørgsmål a: Antal knuder: n = k l. Antal kanter: m = k (l 1) + l (k 1) = 2lk l k. Dijkstra s algoritme: O(kl log(kl)). Spørgsmål b: Korteste vej fra P til E: P Q R Ŝ ˆN O J E Vægt: 2 + 4 + 3 + 2 + 2 + 3 + 1 = 17 Spørgsmål c: Korteste vej uden to sving: P Q R Ŝ N I ˆD C ˆB G ˆL M N Ô J E Vægt: 2 + 4 + 3 + 2 + 2 + 4 + 1 + 3 + 2 + 1 + 3 + 4 + 2 + 3 + 1 = 37 Spørgsmål d: En løsning er at repræsentere hver knude som 12 knuder, der repræsenterer de sidste to skridt taget man er kommet fra til en givet knude. Knuden H bliver til følgende 12 knuder, hvor pilene indikerer de sidste to skridt taget. H 1 : H 2 : H 3 : H 4 : H 5 : H 6 : H 7 : H 8 : H 9 : H 10 : H 11 : H 12 : Så knuden H 1 repræsenterer at man er gået to gange til højre, og derfor nu kan gå hvorhen man vil. Lad O være knuden over H, U knuden under H, L knuden til venstre for H, og R knuden til højre for H. Fra H 1 kan man gå til O 2 man kan gå til R 1 og til U 3. Fra knuden H 2 kan man gå til O 7. Fra knude H 3 kan man gå til U 10. Og så fremdeles. Hvis den nederste venstre knude betegnes s så findes en kortest sti ved at køre Dijkstra s algoritme med s 1 og s 7 som start knuder. Udførselstid for Dijkstra på denne graf bliver O(lk log(lk)) da hver knude skaleres til O(1) knuder. 1

Opgave 2 Spørgsmål a: V 1 = {A, E, J, K} V 2 = {B, C, D, F, G, H, I} Spørgsmål b: Vælg en tilfældig knude s. Lav DFS gennemlæøb af grafen startende i s. Lad V 1 være knuder med en lige dybde i DFS træet og V 2 knuder med en ulige dybde i DFS træet. Grafen er todelt hvis og kun hvis der ikke findes en kant der forbinder to knuder med lige dybde i DFS træet eller to knuder med ulige dybde. Løses med DFS i tid O(m). Opgave 3 Spørgsmål a: Minimum udspændende træ: (B, C), (A, C), (F, H), (D, F), (B, D), (G, H),(A, I), (J, K),(E, G), (E,J) Vægt: 56 Spørgsmål b: Givet G = (V, E) og MST(G). Hvis e MST(G) gøres intet. Ellers fjern e fra MST(G). Lav DFS fra en knude u i MST(G) og marker alle knuder der findes med V 1. Lad V 2 være resten. V 1 og V 2 definerer et snit(opdeling). Skan E og find kant e mellem V 1 og V 2 med mindst vægt. Indsæt e i MST(G). Udførselstid O(m). Opgave 4 Spørgsmål a: Tabel: L(i, j) 0 1 2 3 0 0 1 2 3 1 1 2 3 3 2 2 2 3 4 3 3 3 4 4 4 4 4 4 5 2

Spørgsmål b: Følgende pseudkode skulle du: Maketable(S,T) for i=0 to m for j=0 to n if (i = 0) L[i,j] := j else if (j = 0) L[i,j] := i else if (x_i!= y_j) L[i,j] := 1 + min{l[i-1,j],l[i,j-1]} else L[i,j] := 1 + L[i-1,j-1] return L[m,n] Udførselstid for Maketable: O(n m) Spørgsmål c: Følgende metode tager tabellen L lavet i opgave b: og tallene n, m. Print(L,i,j) if (i = 0 and j = 0) return if (i = 0) write(y_1,...y_j) return if (j = 0) write(x_1,...x_i) return if (x _i!= y_j) if (1 + L[i-1,j] = L[i,j]) Print(L,i-1,j) write(x_i) else Print(L,i,j-1) write(y_j) else Print(L,i-1,j-1) write(x_i) Udførselstid for Print(L,m,n): O(n + m) Samlet udførselstid: O(n m) Opgave 5 Spørgsmål a: Suffixerne i sorteret orden: 3

Streng Start Index ANANAS 2 ANAS 4 AS 6 BANANAS 1 NANAS 3 NAS 5 S 7 Det giver suffix array: 2 4 6 1 3 5 7 Spørgsmål b: Suffix-træ: 2,2 1,7 3,4 7,7 3,4 7,7 5,7 5,7 5,7 7,7 Spørgsmål c: To løsninger: 1) Den letteste. Iterer over alle delstrenge af S af længde k. Der er n k+1 af dem. For hver kør Knuth-Morris-Pratt algorithmen og tæl alle forekomster. Returner den der forekommer flest gange. Udførselstid: O(n 2 ). 2) Den hurtigste. Lav suffixtræ for S i O(n) tid. For alle knuder i træet hvor stien fra roden til og med knuden repræsenterer en streng af længde k eller mere. Tæl antal blade i undertræet. Returner for den knude, der har flest blade under sig, de k første tegn langs stien fra roden til knuden. Alt dette kan klares i et konstant antal lineære gennemløb af træet. Udførselstid O(n). 4