Non capisco di questo algoritmo complessità temporale

voti
3

In un esercizio che ho avuto si è constatato che un algoritmo con complessità: T (n) = c + 2T (n-1)

può essere data da T (n) = c⋅2n che è dell'ordine complessità O (2 ^ n).

Qualcuno capire come?

È pubblicato 03/04/2016 alle 18:23
fonte dall'utente
In altre lingue...                            


2 risposte

voti
3

Abbiamo una relazione di ricorrenza T(n) = c+2*T(n-1)per una costante c>0. Abbiamo anche bisogno di una condizione al contorno, altrimenti la ricorrenza non è ben definito . Supponiamo che T(1) = c.

Calcolando i primi valori, T(2)=c+2c, T(3)=c+2c+4c, siamo tentati di ipotizzare che T(n) = c * (2^n-1).

Proviamo questo per induzione su n. Per il caso base, quando n=0, abbiamo T(1)=c*(2^1-1)=c*1=c, che va bene.

Ora supporre che T(k) = c*(2^k-1)per tutti k<=n. Per il passo induttivo, calcoliamo T(n+1) = c+2*T(n) = c + 2*(c * (2^n-1)) = c + c * 2^{n+1} - 2*c = c * 2^{n+1}-c = c*(2^{n+1}-1). Questo dimostra la domanda.

Asintoticamente abbiamo T(n) = O(2^n).

Risposto il 03/04/2016 a 18:54
fonte dall'utente

voti
3

@ Risposta di blazs sembra corretto. Se questo ti aiuta a capire, che è grande. Ecco una risposta per studenti visivo come me ...


La ricorrenza che hai fornito è: T(n) = c + 2T(n−1)

  • Quindi, in ogni nodo della struttura di recidiva, si fa un lavoro costante c. Dato che il lavoro che state facendo in ciascun nodo è costante, se si può trovare il limite superiore del numero totale di nodi dell'albero, avete trovato la complessità!

  • Secondo il vostro ricorsione, si rompe in modo efficace un problema di dimensione n a due problemi di dimensione n - 1 . Così, ad ogni livello l'albero cresce in realtà ad un massimo di due volte la sua dimensione al livello precedente. Si tratta di un albero binario completo con la profondità di n . 2 Il numero totale di nodi di un albero binario completo è dato dalla semplice formula (2 n - 1 - 1).

Moltiplicandola per 2, ci dà numero di nodi è proporzionale 2 n - 2. Pertanto, la complessità rappresentata dalla ricorrenza è = O (2 n ) .


Alcuni punti utili:

1. Nel metodo di alberi ricorsione, la complessità dell'algoritmo è uguale alla somma del lavoro svolto ad ogni livello dell'albero.

2. La semplice formula per il numero di nodi di un albero binario completo di altezza n .

3. Una bella spiegazione di riepilogo di potenze di due in binario è dato sulla matematica StackExchange.

4. Vedete come si sta risolvendo un problema di dimensione n risolvendo due problemi di dimensione n - 1. E poiché a risolvere ogni sottoproblema più volte, si finisce con la complessità esponenziale. Che cosa accadrebbe se si desidera risolvere il n - 1 problema di dimensioni solo una volta e poi in cache per ricerca futura? Si potrebbe ridurre notevolmente la complessità di questo problema da O (2 n ) a O (n) !! Questa cache è chiamato Memoizzazione e questo approccio alla soluzione dei sottoproblemi ha solo una volta che il popolare e temibile nome Programmazione Dinamica .

Risposto il 04/04/2016 a 14:49
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more