Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side af sider Opgave (%) n er Ω(n)? n er O( n )? n er O(8logn)? + er O(n)? n er O(n / )? Opgave (%) Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) n / n /n logn n /logn logn (logn) n / n /logn n /n Opgave (%) I det følgende angiver f og g positive ikke-aftagende funktioner. Hvilke af følgende udsagn medfører at f(n) er O(g(n))? Der findes n N så f(n) g(n) For alle n N er f(n) g(n) For alle N N findes n N så f(n) g(n) Der findes N N så for alle n N er f(n) g(n) g(n) = Ω(f(n))
Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side af sider Opgave (%) Angiv for hver af nedenstående algoritmer udførselstiden som funktion af n i O-notation. Algoritme Loop(n) i = while i n i = i+i+i Algoritme Loop(n) i = while i n j = while j n j = j +j i = i+ Algoritme Loop(n) for i = to n j = while j i j = j + Svar Loop: O(log n) Svar Loop: O(n) Svar Loop: O(n ) Opgave (%) Angiv for hver af nedenstående algoritmer udførselstiden som funktion af n i O-notation. Algoritme Loop(n) i = j = while i n j = j + i = i+j Algoritme Loop(n) i = while i n i = i+i j = while j i j = j Algoritme Loop(n) i = while i n i = i i j = while j i j = j + Svar Loop: O( n) Svar Loop: O((logn) ) Svar Loop: O(n )
Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side af sider Opgave 6 (%) Tegn hvordan nedenstående binære max-heap ser ud efter indsættelse af elementet. Tegn hvordan nedenstående binære max-heap ser ud efter en heap-extract-max operation. Opgave (%) Tegn den binære max-heap efter indsættelse af elementerne,,,,, i den givne rækkefølge, startende med den tomme heap. Opgave 8 (%) Angiv hvordan nedenstående array ser ud efter anvendelsen af build-max-heap for arrayet. 6 8 8 6 6 8 8 6
Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side 6 af sider Opgave (%) Betragt radix-sort anvendt på nedenstående liste af tal (d =, k = ). Angiv den delvist sorterede liste efter at radix-sort har sorteret tallene efter de to mindst betydende cifre. 8 00 0 0 00 0 8 0 Opgave (%) Angiv resultatet af at anvende Partition(A,,) på nedenstående array. 6 8 6 8 0 A 8 6 6 8 Opgave (%) 6 8 6 8 0 8 6 6 8 Tegn hvordan nedenstående ubalancerede binære søgetræ ser ud efter indsættelse af elementet. Tegn hvordan nedenstående ubalancerede binære søgetræ ser ud efter slettelse af elementet.
Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side af sider Opgave (%) Angiv hvorledes knuderne i nedenstående binære søgetræ kan farves røde og sorte, således at det resulterende træ er et lovligt rød-sort træ. 8 8 6 6 6 6 Opgave (%) Tegn hvordan nedenstående rød-sorte træ (dobbeltcirkler angiver røde knuder) ser ud efter indsættelse af elementet. Opgave (%) Tegn en hashtabel hvor der anvendes kædede lister til at håndtere kollisioner, når hashfunktionen er h(k) = k mod og der indsættes elementerne,,,,,, og i den givne rækkefølge. 0 6
Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side 8 af sider Opgave (%) Tegn hvordan en hashtabel der anvender linear probing ser ud efter at elementerne 6,, 0,, 8,,, og indsættesidengivnerækkefølge, nårhashfunktionenerh(k) = k mod. 0 6 8 0 6 8 0 8 6 Opgave 6 (%) Tegn hvordan en hashtabel der anvender dobbelt hashing ser ud efter at elementerne,,, 8,, 6, og indsættes i den givne rækkefølge, når hashfunktionerne er h (k) = k mod og h (k) = k mod, og hashtabellen har størrelse. 0 6 8 0 6 8 6 8 Opgave (%) Angiv for hver af nedenstående datastrukturer indeholdende n elementer, hvor lang tid det tager at rapportere elementerne i datastrukturen i sorteret rækkefølge, som funktion af n i O-notation. Rød-sort søgetræ? O(n) Binær max-heap? O(n log n) Hashtabel med linear probing ved 0% fyldningsgrad? O(n log n)
Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side af sider Opgave 8 (%) For en sorteret liste af tal x,...,x n, definerer vi F.eks. er sep(x,...,x n ) = min{x n x n,x n x n,...,x x,x x } sep(,,8,,,) = min{,, 8,8, } = Betragt et søgetræ hvor hver knude v ud over et element v.e, gemmer v.sep som er lig sep(elementerne i v s undertræ), og v.min og v.max som er hhv. det mindste element og største element i v s undertræ. Angiv hvorledes disse værdier kan beregnes når den tilsvarende information er kendt ved de to børn v.left og v.right (det kan antages at disse begge eksisterer). F.eks. betegner v.right.min det mindste element i v s højre undertræ. v.left v v.right Svar v.min = Svar v.max = v.left.min v.right.max Svar v.sep = min{v.left.sep, v.right.sep, v.e v.left.max, v.right.min v.e} Opgave (%) Angiv den resulterende union-find struktur efter nedenstående sekvens af operationer, når der anvendes union-by-rank og stikomprimering. Angiv for hver knude rangen af knuden. makeset(a) makeset(b) makeset(c) makeset(d) makeset(e) makeset(f) union(a,b) union(a,c) union(d,e) union(b,d) union(c,f) a 0 e 0 0 b c d f 0
Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side af sider Transitionssystem Halver-og-kvadrer Konfigurationer: {[i,j] heltal i,j i 0 j 0} [i,j] [i/,j j] if i i lige [i,j] [i,j] if i [i,j] [i,j ] if j Opgave 0 (%) For hvert af nedenstående udsagn, angiv om de er en invariant for ovenstående transitionssystem Halver-og-kvadrer. Startkonfigurationen antages at være [n, ] hvor n 0. i n j i j n j i n i+j n+ Opgave (%) For hver af nedenstående funktioner, angiv om de er en termineringsfunktion for ovenstående transitionssystem Halver-og-kvadrer. µ(i,j) = i µ(i,j) = i+j µ(i,j) = j i µ(i,j) = i+j i µ(i,j) = n
Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side af sider Algoritme Loglog(n) Inputbetingelse : heltal n Outputkrav : r = log (log (n)) Metode : p r 0 {I} while p p n do r r + p p p Opgave (%) For hvert af nedenstående udsagn, angiv om de er en invariant I for ovenstående algoritme Loglog. p r p = r p = r n r = p p n Opgave (%) For hver af nedenstående funktioner, angiv om de er en termineringsfunktion for ovenstående algoritme Loglog. µ(r,p) = n p µ(r,p) = p µ(r,p) = n p µ(r,p) = n r µ(r,p) = n r
Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side af sider Opgave (%) Givet et sorteret array A med n tal, n, beregner nedenstående algoritme antal forskellige elementer i A. Denne værdi betegnes SetSize(A) = + {i A[i ] A[i] < i n} For at vise gyldigheden af algoritmen skal I i og I s være invarianter omkring variablerne i og s. Angiv invarianter hvormed gyldigheden af algoritmen kan bevises (bevis for invarianterne kræves ikke). Svar I i : Algoritme ComputeSetSize(n) Inputbetingelse : sorteret array A med n tal, n Outputkrav : s = SetSize(A) Metode : i ; s ; {I i I s } while i < n do if A[i] A[i+] do s s+; i i+; i n Svar I s : s = SetSize(A[..i]) For at kunne bevise at algoritmen terminerer, kræves en passende termineringsfunktion. Angiv en termineringsfunktion (bevis for at termineringsfunktionen har de nødvendige egenskaber kræves ikke). Svar µ: Opgave (%) n i Antag en kø implementeres ved to stakke Front og Tail, og at operationerne på køen er implementeret som: Algoritme Enqueue(x) Metode : Tail.push(x) Algoritme Dequeue() Metode : if Front.empty() then while not Tail.empty() do Front.push(Tail.pop()) return Front.pop() For at argumentere at operationerne tager amortiseret O() tid kræves en potentiale funktion. Angiv en potentiale funktion hvorved tiden kan bevises. Argumentation for tiden kræves ikke. Svar Φ(Front,Tail) : Tail