Tôi bị mắc kẹt bằng cách phân tích độ phức tạp thời gian của thuật toán sau:
def fun (r, k, d, p):
if d > p:
return r
if d = 0 and p = 0:
r <- r + k
return r
if d > 0:
fun (r, k + 1, d - 1, p)
if p > 0:
fun (r, k - 1, d, p - 1)
Cuộc gọi gốc sẽ là fun (0, 0, n, n)
, và n
là kích thước của vấn đề.
Tôi đoán rằng: Mối quan hệ lặp lại là , tương đương với và do đó O (2 ^ m) \ iff O (4 ^ n) .T ( 2 n ) = 2 T ( 2 n - 1 )O ( 2 m )
Phân tích của tôi có đúng không (tôi biết nó không đầy đủ và chính xác)? Nếu nó có lỗi nghiêm trọng, xin vui lòng chỉ ra hoặc cho tôi thấy một bằng chứng chính xác và đầy đủ về độ phức tạp thời gian của thuật toán này.
d>0
và p>0
. Bạn không hiển thị những gì hàm trả về nếu chúng ta đạt đến câu lệnh thứ 3 và thứ 4. Bạn có nghĩa là có một return
tuyên bố sau mỗi lần gọi đệ quy fun
? (bạn ấy có ý fun (r, k + 1, d - 1, p)
là return fun (r, k + 1, d - 1, p)
?) Hoặc bạn đã có nghĩa là để có một return
tuyên bố vào cuối, của cơ quan chức năng? Vui lòng chỉnh sửa mã giả của bạn để làm rõ và đảm bảo bạn hiển thị những gì trả về trong tất cả các trường hợp có thể.
d<=p
và d>0
và p>0
tất cả các tổ chức. Điều gì sẽ xảy ra? Liệu thuật toán có thực hiện 2 lệnh đệ quy cho hàm không? Hoặc nó gọi đệ quy fun(r, k + 1, d - 1, p)
và sau đó ngay lập tức trở lại, mà không gọi đệ quy fun(r, k - 1, d, p - 1)
? Nếu tôi lấy mã giả của bạn theo nghĩa đen, có vẻ như nó tạo ra 2 lệnh đệ quy và sau đó trả về với giá trị trả về không xác định - nhưng điều đó có vẻ kỳ lạ và khiến tôi tự hỏi liệu có lỗi đánh máy / lỗi trong mã giả hay không.