• Nie Znaleziono Wyników

Algorytmy i Struktury Danych, 1. ćwiczenia

N/A
N/A
Protected

Academic year: 2021

Share "Algorytmy i Struktury Danych, 1. ćwiczenia"

Copied!
3
0
0

Pełen tekst

(1)

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

(2)

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

(3)

• 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

Cytaty

Powiązane dokumenty

[r]

Jeśli graf nie jest regularny, to należy dodać nowe krawędzie i ewentualnie wierz- chołki tak by przerobić go na regularny.. Algorithm

Algorytmy i Struktury

Wstarczy tak długo jak drzewo zawiera węzeł z lewym synem, wykonujemy na nim (i lewym synie) prawą

• v należy do poddrzewa p.right, jednak zauważmy, że liczba kroków tego typu nie może przekroczyć O(log n). 3

[r]

Ponieważ M jest najliczniejszym skojarzeniem, nie wśród nich

[r]