johnchen902 là đúng:
alg(n)=Θ(φ^n)
nơi φ = Golden ratio = (1 + sqrt(5))/2
nhưng lập luận của ông là một chút quá tay vẫy, vì vậy chúng ta hãy làm cho nó nghiêm ngặt. Đối số ban đầu của ông là không đầy đủ, do đó tôi đã thêm tôi, nhưng bây giờ là he has completed the argument.
loop body = Θ(3n+1)
Chúng ta hãy biểu thị chi phí của cơ thể loop cho lập luận n
với g(n)
.Sau đó, g(n) ∈ Θ(n)
từ Θ(n) = Θ(3n+1)
.
Hơn nữa, hãy để T(n)
là tổng chi phí là alg(n)
cho n >= 0
. Sau đó, cho n >= 2
chúng ta có tái phát
T(n) = T(n-1) + T(n-2) + g(n)
Đối n >= 3
, chúng ta có thể chèn tái áp dụng cho T(n-1)
vào đó,
T(n) = 2*T(n-2) + T(n-3) + g(n) + g(n-1)
và cho n > 3
, chúng ta có thể tiếp tục, áp dụng tái phát để T(n-2)
. Đối với đủ lớn n
, do đó chúng ta có
T(n) = 3*T(n-3) + 2*T(n-4) + g(n) + g(n-1) + 2*g(n-2)
= 5*T(n-4) + 3*T(n-5) + g(n) + g(n-1) + 2*g(n-2) + 3*g(n-3)
...
k-1
= F(k)*T(n+1-k) + F(k-1)*T(n-k) + ∑ F(j)*g(n+1-j)
j=1
n-1
= F(n)*T(1) + F(n-1)*T(0) + ∑ F(j)*g(n+1-j)
j=1
với những con số Fibonacci F(n)
[F(0) = 0, F(1) = F(2) = 1
].
T(0)
và T(1)
là một số hằng số, vì vậy phần đầu tiên rõ ràng là Θ(F(n))
. Nó vẫn còn để điều tra tổng.
Kể từ g(n) ∈ Θ(n)
, chúng ta chỉ cần điều tra
n-1
A(n) = ∑ F(j)*(n+1-j)
j=1
Bây giờ,
n-1
A(n+1) - A(n) = ∑ F(j) + (((n+1)+1) - ((n+1)-1))*F((n+1)-1)
j=1
n-1
= ∑ F(j) + 2*F(n)
j=1
= F(n+1) - 1 + 2*F(n)
= F(n+2) + F(n) - 1
Tóm rằng, bắt đầu với A(2) = 2 = F(5) + F(3) - 5
, chúng tôi có được
A(n) = F(n+3) + F(n+1) - (n+3)
và do đó, với
c*n <= g(n) <= d*n
dự toán
F(n)*T(1) + F(n-1)*T(0) + c*A(n) <= T(n) <= F(n)*T(1) + F(n-1)*T(0) + d*A(n)
cho n >= 2
. Kể từ F(n+1) <= A(n) < F(n+4)
, tất cả các điều khoản tùy thuộc vào n
ở phần bên trái và bên phải của sự bất bình đẳng là Θ(φ^n)
, q.e.d.
Điều này tương tự với độ phức tạp của [chuỗi Fibonacci đệ quy] (http://stackoverflow.com/q/360748/1805388). – ValarDohaeris
Tôi không chắc lắm. Tôi có nghĩa là nó dễ dàng để tính toán độ phức tạp Fibonacci, nhưng bây giờ với cơ thể vòng lặp này = Θ (3n + 1) nó làm cho nó khó khăn hơn nhiều. – user2147971
Điều kiện đầu cuối của bạn là gì? – johnchen902