2011-12-23 3 views
9

Sto cercando di trovare la complessità temporale di questa funzione nella notazione Theta. Ora, n è un numero intero positivo, e lst è una lista con 2 numeri.Qual è la complessità temporale di questa funzione in Scheme?

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

Come sapete, la complessità temporale di accodamento è Θ (n), dove n è la dimensione complessiva delle liste. Ho provato a vedere cosa succede se tratto App e accumulo come Θ (1) funzioni, poi ottengo:

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

Ciò significa che la complessità temporale attuale di questa cosa nella notazione Theta è molto più grande di Θ (2^n)?

io non sono nemmeno sicuro che ho ragione con questo assunto da solo, e in ogni modo, io sono all'oscuro su cosa fare se ho bisogno di prendere in considerazione sia accumulano e aggiungere ...

I Ho perso ore su questo, e davvero non capisco perché non riesco a capirlo da solo ... Qualsiasi aiuto sarebbe gradito.

btw, ecco il codice di accumulo:

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

Sto provando anche a ottenere la risposta più precisa e ragionevolmente spiegata ma per ora penso che tu sia sulla strada giusta, dal momento che stai generando 2 nuove ricorsioni in ogni chiamata questa va a O (2^n) complessità. – ivanjovanovic

risposta

2

Sembra plausibile, se si dà un'occhiata in uscita.

(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) 

Per ogni elemento di lst 2^n vengono creati elementi che è l * 2^n. L'algoritmo potrebbe essere solo peggio.

E ovviamente è male. La funzione accumula non è ricorsiva della coda e quindi non funziona. Una funzione ricorsiva non a coda 2^n è abbastanza inutile.

+0

Prima di tutto, grazie per il tuo aiuto. So che è una funzione inutile, ma mi è stata data come una domanda a casa. (ed era anche peggiore nella domanda iniziale, non mi è stato detto nulla su n e lst, quindi potrei essere una lista con 20 o più numeri) –