2010-05-02 22 views

risposta

2

Pensateci in questo modo:
In ogni "iterazione" della ricorsione eseguite O (n).
Ogni iterazione ha n-1 lavoro da fare, fino a n = caso base. (Sto assumendo che il caso base sia O (n) lavoro)
Pertanto, assumendo che il caso base sia un costante indipendente da n, ci sono O (n) iterazioni della ricorsione.
Se avete n iterazioni di O (n) funzionano ciascuna, O (n) * O (n) = O (n^2).
L'analisi è corretta. Se desideri maggiori informazioni su questo modo di risolvere le ricadute, guarda su Alberi di ricorsione. Sono molto intuitivi rispetto agli altri metodi.

+0

Ero troppo in gamba per tutto ciò che penso, e ho dimenticato il fatto che abbiamo a che fare con una ricorsione. Forse è per questo che non lo capisco. Per quanto sopra ho ottenuto T (n) <= 2n sarebbe corretto? –

+0

Non ho ben capito cosa stai chiedendo, c'è molto più sopra – Rubys

+0

@Tony: No, non è corretto. T (n) può essere maggiore di 2n per il piccolo n. –

6

È necessario anche un caso base per la relazione di ricorrenza.

T(1) = c 
T(n) = T(n-1) + n 

Per risolvere questo, è possibile prima indovinare una soluzione e quindi dimostrare che funziona utilizzando l'induzione.

T(n) = (n + 1) * n/2 + c - 1 

Prima il caso base. Quando n = 1 questo dà c come richiesto.

Per gli altri n:

T(n) 
= (n + 1) * n/2 + c - 1 
= ((n - 1) + 2) * n/2 + c - 1 
= ((n - 1) * n/2) + (2 * n/2) + c - 1 
= (n * (n - 1)/2) + c - 1) + (2 * n/2) 
= T(n - 1) + n 

Quindi la soluzione funziona.

Per ottenere l'ipotesi, in primo luogo, notare che il vostro rapporto ricorrenza genera il triangular numbers quando c = 1:

T(1) = 1: 

* 

T(2) = 3: 

* 
** 

T(3) = 6: 

* 
** 
*** 

T(4) = 10: 

* 
** 
*** 
**** 

etc.. 

Intuitivamente un triangolo è circa la metà di un quadrato, e in notazione O-grande della le costanti possono essere ignorate, quindi O (n^2) è il risultato atteso.

+0

Potresti dirmi come sei arrivato alla terza equazione nella tua risposta? Quale tecnica matematica hai applicato ad essa? –

+0

@Tony: è una "ipotesi". In realtà è perché conosco la formula per i numeri triangolari - non l'ho davvero indovinato, lo sapevo già. Spesso è più facile "indovinare" la risposta corretta e dimostrare che è corretta invece di derivarla dai primi principi. Questa è una tecnica standard per risolvere i rapporti di ricorrenza. –

+0

@Tony: il termine tecnico per un'ipotesi istruita è "ansatz". Vedi: http://en.wikipedia.org/wiki/Ansatz. Vi sono alcune informazioni sull'uso di un'ipotesi per risolvere una relazione di ricorrenza in Wikipedia: http://en.wikipedia.org/wiki/Recurrence_relation.Qui sono elencati anche altri possibili metodi per risolvere le relazioni di ricorrenza. –

0

Sembra giusto, ma dipenderà dal caso base T (1). Supponendo che tu faccia n passi per ottenere T (n) a T (0) e ogni volta che il termine n è ovunque tra 0 e n per una media di n/2 quindi n * n/2 = (n^2)/2 = O (n^2).

1

La soluzione è abbastanza semplice per questo. È necessario srotolare la ricorsione:

T(n) = T(n-1) + n = T(n-2) + (n - 1) + n = 
= T(n-3) + (n-2) + (n-1) + n = ... = 
= T(0) + 1 + 2 + ... + (n-1) + n 

Hai progressione aritmetica qui e la somma è 1/2*n*(n-1). Tecnicamente qui manca la condizione al contorno, ma con qualsiasi condizione al contorno costante si vede che la ricorsione è O(n^2).

Problemi correlati