Algorytmy i Struktury Danych, 1. ćwiczenia
2016-10-07
Spis treści
1 Algorytmy zachłanne, dziel i rządź, programowanie dynamiczne 1
2 Liczby Fibonacciego 2
3 Złożoność obliczeniowa - definicje 3
1 Algorytmy zachłanne, dziel i rządź, programo- wanie dynamiczne
• dzieli i zwycieżaj: wyszukiwanie binarne.
• dynamiczne: najdłuższy podciąg rosnący, fibonacci
• zachłanne: wydawanie monet, scalanie elementów (koszt scalenia x i y to x + y),
Mnożenie dużych liczb
Function Mult(a, b)
niech n oznacz długość liczb a, b if n ≤ 1 then
użyj zwykłego mnożenia else
niech a = a1 a2(|a1| = |a2| = n/2) niech b = b1 b2 (|b1| = |b2| = n/2) A = mult(a1, b1)
B = mult(a2, b2)
C = mult(a1+ a2, b1+ b2)
D = C − (A + B) (co jest równoważne D = a1b2+ a2b1) return A ∗ 10n+ D ∗ 10n/2+ B;
1
Function LCS(A, B) n = |A|, m = |B|
lcs[0, 0..m] = lcs[0..n, 0] = 0 for i = 1, . . . , n do
for j = 1, . . . , m do
wyznaczamy lcs[i,j]: najdłuższy wspólny podciąg A[1..i] i B[1..j]
if A[i] = B[j] then
lcs[i, j] = 1 + lcs[i − 1, j − 1]
else
lcs[i, j] = max(lcs[i − 1, j], lcs[i, j − 1]) return lcs[n, m]
2 Liczby Fibonacciego
F0= 0, F1= 1, Fn= Fn−1+ Fn−2(dla n ≥ 2)
1 1 1 0
n
=
Fn+1 Fn Fn Fn−1
Function FibRecursive(n) if n == 0 then
return 0
else if n == 1 then return 1
else
return FibRecursive(n − 1)+FibRecursive(n − 2)
Function FibDynamic(n) if n == 0 then
return 0 f0= 0, f = 1
for i = 1 . . . n − 1 do f00= f0+ f f0= f f = f00 return f
Function FibMatrix(n) if n == 0 then
return 0 oblicz M =
1 1 1 0
n
używając O(log n) mnożeń macierzy return M [0][1]
Jak zmienia się złożność w zależności od:
• dane wejściowe jako liczba binarna, dane wejściowe jako liczba unarna,
2
• algorytm dynamiczny i z mnożeniem macierzy,
• koszt operacji arytmetycznych stały, albo zależny od rozmiaru liczb.
3 Złożoność obliczeniowa - definicje
Θ(g(n)) = {f (n) : istnieją dodatnie stałe c1, c2i n0, takie, że 0 ≤ c1g(n) ≤ f (n) ≤ c2g(n) dla wszystkich n ≥ n0}
O(g(n)) = {f (n) : istnieją dodatnie stałe c i n0, takie, że f (n) ≤ cg(n) dla wszystkich n ≥ n0}
Ω(g(n)) = {f (n) : istnieją dodatnie stałe c i n0, takie, że 0 ≤ cg(n) ≤ f (n) dla wszystkich n ≥ n0}
o(g(n)) = {f (n) : dla każdej dodatniej stałej c > 0 istnieje stała n0 > 0, taka, że 0 ≤ f (n) < cg(n) dla wszystkich n ≥ n0}
ω(g(n)) = {f (n) : dla każdej dodatniej stałej c > 0 istnieje stała n0> 0, taka, że 0 ≤ cg(n) < f (n) dla wszystkich n ≥ n0}
3