Độ phức tạp của thuật toán Fibros đệ quy


13

Sử dụng thuật toán Fibonacci đệ quy sau:

def fib(n):
   if n==0:
      return 0
   elif n==1
      return 1
   return (fib(n-1)+fib(n-2))

Nếu tôi nhập số 5 để tìm sợi (5), tôi biết điều này sẽ xuất 5 nhưng làm cách nào để kiểm tra độ phức tạp của thuật toán này? Làm thế nào để tôi tính toán các bước liên quan?



Tôi đã tìm kiếm tương tự, và tôi tình cờ thấy video này bởi MyCodeSchool tôi khuyên bạn nên kiểm tra điều này.
snbk97

Câu trả lời:


23

Hầu hết thời gian, bạn có thể biểu diễn các thuật toán đệ quy bằng các phương trình đệ quy. Trong trường hợp này phương trình đệ quy cho thuật toán này là . Sau đó, bạn có thể tìm thấy dạng đóng của phương trình bằng phương pháp thay thế hoặc phương pháp mở rộng (hoặc bất kỳ phương pháp nào khác được sử dụng để giải quyết các đợt lặp lại). Trong trường hợp này, bạn nhận được T ( n ) = Θ ( ϕ n ) , trong đóT(n)= =T(n-1)+T(n-2)+Θ(1)T(n)= =Θ(φn)φlà tỷ lệ vàng ( ).φ= =(1+5)2

Nếu bạn muốn tìm hiểu thêm về cách giải quyết các đợt tái phát, tôi thực sự khuyên bạn nên đọc chương 4 của Giới thiệu về thuật toán .


0

như là một thay thế cho quan hệ lặp lại / phân tích toán học (nhưng không phải là thay thế ) một bài tập thực nghiệm đơn giản, dường như không được dạy rất thường xuyên trong các lớp học nhưng rất nhiều thông tin, là đếm số lần thực hiện của hàm, và sau đó vẽ biểu đồ cho một phạm vi của n đầu vào nhỏ , và sau đó đường cong phù hợp với kết quả. kết quả nói chung sẽ phù hợp chặt chẽ với phương pháp toán lý thuyết.

Tài liệu hỗ trợ tốt cho bài tập này có thể được tìm thấy trong chương 3 trực tuyến miễn phí, thời gian chạy các thuật toán / Cơ sở của Khoa học Máy tính , Ullman


1) Âm mưu không có cách nào thay thế phân tích chính thức. Nó dễ bị lừa. 2) Tôi nghĩ rằng bạn đang trình bày sai nguồn bạn trích dẫn. Họ có đề cập đến âm mưu, nhưng không phải là một cách để xác định "sự phức tạp". 3) FWIW, tôi không đồng ý với cách tiếp cận này và nó sử dụng như Ullman trình bày, nhưng đó không phải là lỗi của bạn.
Raphael

1
câu trả lời bắt đầu từ việc từ chối trách nhiệm của bạn, nói rằng âm mưu không phải là sự thay thế cho phân tích toán học . âm mưu là một phương pháp khoa học và để nói / quan sát đôi khi bị lừa là tìm hiểu về / gợi lên các khía cạnh thống kê của dữ liệu, đó là một khía cạnh quan trọng nhất của phân tích khoa học . Nghĩ rằng nó "dễ bị lừa" là khá kịch tính, có những trường hợp "bệnh lý" khi nó thất bại nhưng chúng thường bị "chiếm đoạt" ... câu hỏi là kiểm tra sự phức tạp của thuật toán và phân tích thực nghiệm là một khía cạnh quan trọng / góc trên đó, và rõ ràng không phải là góc duy nhất, v.v ...
vzn

0

Kết quả của sợi (n) là tổng của tất cả các cuộc gọi đệ quy đã trả về 1. Do đó, có chính xác các cuộc gọi đệ quy sợi (n) đánh giá sợi (1). Vì vậy, thời gian thực hiện là Ω (sợi (n)); bạn cần chứng minh rằng các cuộc gọi trả về 0 và các cuộc gọi đệ quy khác không thêm đáng kể vào cuộc gọi này.

Lý do tương tự sẽ áp dụng cho bất kỳ hàm được xác định đệ quy nào trả về 1 hoặc 0 hoặc kết quả của một cuộc gọi đệ quy khác.


Ω

Hãy thoải mái chỉnh sửa câu trả lời nếu bạn cảm thấy mạnh mẽ về nó.
gnasher729

0

T(n)= =T(n-1)+T(n-2) T(n)>2T(n-2)T(n-1)>T(n-2)T(n)= =Ω(cn)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.