2010-05-02 26 views

Respuesta

2

Piénselo de esta manera:
En cada "iteración" de la recursión, usted hace O (n) trabajo.
Cada iteración tiene n-1 trabajo por hacer, hasta n = caso base. (Supongo que el caso base es O (n) trabajo)
Por lo tanto, suponiendo que el caso base es una constante independiente de n, hay O (n) iteraciones de la recursión.
Si tiene n iteraciones de O (n) cada una, O (n) * O (n) = O (n^2).
Su análisis es correcto. Si desea obtener más información sobre esta forma de resolver recursiones, busque Árboles de recursión. Son muy intuitivos en comparación con los otros métodos.

+0

Estaba demasiado metido en todo esto, creo, y olvidé el hecho de que estamos lidiando con una recursión. Quizás es por eso que no lo entiendo del todo. Para lo anterior, obtuve T (n) <= 2n ¿sería correcto? –

+0

No entendí exactamente lo que está preguntando, hay mucho más de – Rubys

+0

@Tony: No, eso no es correcto. T (n) puede ser mayor que 2n para n pequeño. –

6

También necesita un caso base para su relación de recurrencia.

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

Para resolver esto, primero puede adivinar una solución y luego probar que funciona mediante inducción.

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

Primero la caja base. Cuando n = 1 esto da c como se requiere.

Por otra 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 

Así que la solución funciona.

Para obtener el conjetura, en primer lugar, observe que su relación de recurrencia genera la triangular numbers cuando c = 1:

T(1) = 1: 

* 

T(2) = 3: 

* 
** 

T(3) = 6: 

* 
** 
*** 

T(4) = 10: 

* 
** 
*** 
**** 

etc.. 

Intuitivamente un triángulo es aproximadamente la mitad de un cuadrado, y en notación Big-O el las constantes se pueden ignorar, por lo que O (n^2) es el resultado esperado.

+0

¿Podría decirme cómo llegó a la tercera ecuación que tiene en su respuesta? ¿Qué técnica matemática le aplicaste? –

+0

@Tony: es una "adivinanza". En realidad, es porque conozco la fórmula de los números triangulares: en realidad no lo adiviné, ya lo sabía. A menudo es más fácil "adivinar" la respuesta correcta y demostrar que es correcta en lugar de derivarla de los primeros principios. Esta es una técnica estándar para resolver relaciones recurrentes. –

+0

@Tony: el término técnico para una conjetura es "ansatz". Ver: http://en.wikipedia.org/wiki/Ansatz. Hay alguna información sobre el uso de una conjetura para resolver una relación de recurrencia en Wikipedia: http://en.wikipedia.org/wiki/Recurrence_relation.También se enumeran allí otros métodos posibles para resolver las relaciones de recurrencia. –

0

Parece correcto, pero dependerá de la caja base T (1). Suponiendo que hará n pasos para obtener T (n) a T (0) y cada vez que el término n esté entre 0 y n para un promedio de n/2, entonces n * n/2 = (n^2)/2 = O (n^2).

1

La solución es bastante fácil para esta. Usted tiene que desenrollar la recursividad:

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 

usted tiene aquí progresión aritmética y la suma se 1/2*n*(n-1). Técnicamente te estás perdiendo la condición de límite aquí, pero con cualquier condición de límite constante ves que la recursión es O(n^2).

Cuestiones relacionadas