2011-12-23 58 views
9

Tôi đang cố gắng tìm độ phức tạp thời gian của hàm này trong ký hiệu Theta. Bây giờ, n là một số nguyên dương và lst là một danh sách có 2 số.Độ phức tạp thời gian của hàm này trong sơ đồ là gì?

(define (func n lst) 
    (if (= n 0) lst 
     (accumulate append null 
        (map (lambda (x) 
         (func (- n 1) (list x x))) 
         lst)))) 

Như bạn đã biết, thời gian phức tạp của phụ thêm là Θ (n) trong đó n là kích thước tổng thể của danh sách. Tôi đã cố gắng để xem điều gì sẽ xảy ra nếu tôi xử lý phụ thêm và tích lũy dưới dạng hàm Θ (1), sau đó tôi nhận được:

T (n) = 2T (n-1) + Θ (1) -> Θ (2^n)

Điều này có nghĩa là độ phức tạp thời gian thực của điều này trong ký hiệu Theta có lớn hơn Θ (2^n) không?

Tôi thậm chí không chắc chắn rằng tôi đúng với giả thiết này một mình, và dù sao, tôi tránh khỏi thất bại trên phải làm gì nếu tôi cần phải đi vào xem xét cả tích lũy và thêm ...

tôi đã lãng phí thời gian trên này, và tôi thực sự không hiểu tại sao tôi không thể tìm ra nó trên của riêng tôi ... Bất kỳ trợ giúp sẽ được vui vẻ đánh giá cao.

btw, đây là mã của tích lũy:

(define (accumulate op init lst) 
    (if (null? lst) 
     init 
      (op (car lst) 
      (accumulate op init (cdr lst))))) 
+0

Tôi đang cố gắng để có được câu trả lời chính xác hơn và hợp lý nhưng bây giờ tôi nghĩ rằng bạn đang đi đúng hướng, vì bạn đang sinh ra 2 cuộc truy tìm mới trong mọi cuộc gọi này đến O (2^n) phức tạp. – ivanjovanovic

Trả lời

2

Nghe có vẻ hợp lý, nếu bạn có một cái nhìn tại đầu ra.

(func 3 (list 1 2 3)) 
=> (1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3) 

Đối với mọi thành phần của phần tử 2^n được tạo là l * 2^n. Thuật toán chỉ có thể tồi tệ hơn.

Và rõ ràng là xấu. Hàm tích lũy không phải là đệ quy đuôi và func do đó không. Hàm đệ quy 2^n không đuôi khá vô ích.

+0

Firts of all, cảm ơn sự giúp đỡ của bạn. Tôi biết rằng đó là một chức năng vô dụng, nhưng nó đã được trao cho tôi như một câu hỏi bài tập về nhà. (và nó thậm chí còn tồi tệ nhất trong câu hỏi ban đầu, tôi đã không nói gì về n và lst, vì vậy lst có thể là một danh sách với 20 hoặc nhiều số) –

Các vấn đề liên quan