Vid övningen ska du vara beredd att muntligt presentera och diskutera dina lösningar och din programkod.
- Gör (minst) en fil per uppgift och lägg filerna i katalogen
username-ovn2
i organisationen grudat22 på KTH GitHub. - Utgå från mallarna i /grudat22/ovn0/.
- Lösningar ska vara inlämnade före deadline.
Du väljer själv vilket av programspråken Python, Go eller Java du vill använda. Observera att all kod på den här kursen ska dokumenteras och testas.
Gör antingen uppgift 2.3 eller 2.5, inte båda.
Ordna funktionerna i följande lista i växande ordning med avseende på tillväxtstakt. Funktionen f(n) ska alltså komma före funktionen g(n) i listan om f(n) är O(g(n)).
- f1(n) = n1.5
- f2(n) = 10n
- f3(n) = n log n
- f4(n) = n +100
- f5(n) = 2n
Vilka av följande påståenden är sanna? Motivera dina svar.
- n(n + 1) / 2 = O(n3)
- n(n + 1) / 2 = O(n2)
- n(n + 1) / 2 = Θ(n3)
- n(n + 1) / 2 = Ω(n)
Indata är en heltalsvektor A med n element. Vi vill beräkna en vektor B, där B[i] = A[0] + A[1] + ... + A[i]. Här är en enkel algoritm som löser problemet.
for i = 0 to n-1
Add the numbers A[0] thru A[i].
Store the result in B[i].
-
Beräkna tidskomplexiteten för denna algoritm och uttryck den på formen O(f(n)), där funktionen f(n) är så liten och enkel som möjligt.
-
Visa att tidskomplexiteten också är Ω(f(n)).
-
Hitta på en algoritm med bättre asymptotisk tidskomplexitet. Beskriv algoritmen i pseudokod och ange dess tidskomplexitet med Θ-notation.
Implementera ett obalanserat binärt sökträd som lagrar textsträngar.
- Använd koden för den länkade listan i övning 1 som mall.
- Gör ett tydligt API med publika dokumenterade metoder.
- Skriv utförlig testkod.
Följande metoder ska finnas:
- Skapa ett tomt träd.
- Lägg till ett nytt element.
- Returnera antalet element i trädet.
- Returnerar en sträng med alla element i bokstavsordning.
Ange tidskomplexiteten i värstafall för samtliga operationer.
Tips och råd (Video)
Ge ett exempel på en positiv funktion f(n) sådan att f(n) varken är O(n) eller Ω(n).
Gör uppgift 2.3 med ett randomiserat binärt sökträd i stället för ett obalanserat träd.