Beruflich Dokumente
Kultur Dokumente
Ejercicio01
¿Cómo resolverlos?
1- Suponer una solución f(n) y usar la recurrencia para demostrar que T(n)=f(n).
La fórmula se hace generalmente por inducción sobre n.
Paso1: Sea
T(n)= C1 si n<=1 //este es el caso base
T(n-1)+C2 si n>1 //este es el caso cuando el algoritmo ejecuta la llamada recursiva
En este caso
C1 SI n<=1:Se define como el caso base de la función. Y se denomina C1 porque cuando n<=1 retorna un número <=1
T(n-1)+C2: Representa la llamada recursiva a la función con factorial(n-1)
=>T(n)= O(Max(C1,nC2,-C2)
=>T(n)= O(Max(C2,n,-C2) por regla del producto
=>T(n)= O(n) // por concepto de dominancia de funciones
En este caso se toma cual es la función que crece más
rápido para n. Entre la función C2, la función n, y la función
-C2, la que crece más rápido es n
Ejercicio02
Solución
- Suponer una solución f(n) y usar la recurrencia para demostrar que T(n)=f(n).
La fórmula se hace generalmente por inducción sobre n.
Paso1: Sea
T(n)= C1 SI n<=1 //este es el caso base
T(n/2)+C2 si n>1 //este es el caso cuando el algoritmo ejecuta la llamada recursiva
En este caso
C1 SI n<=1:Se define como el caso base de la función. Y se denomina C1 porque cuando n<=1 retorna un número <=1
T(n/2)+C2: Representa la llamada recursiva a la función con Rec3 (n/2). Esto se traduce como que es una función que
llama de forma genérica a una función que recibe por parámetro n/2 ( T(n/2)), y el C2 representa el tiempo que
adicionalmente se tarda el algoritmo en multiplicar *2. Por esto se escribe el caso como:
T(n/2)+C2
Igualamos el valor que recibe el T(n) al valor del caso base( igual a 1)
𝒏
=1 => n=2𝑘 => k= 𝒍𝒐𝒈𝟐 (𝒏)
𝟐𝒌
𝒏
=>T(n)= T( )+ 𝒍𝒐𝒈𝟐 (𝒏)
𝟐𝒍𝒐𝒈𝟐 (𝒏)
𝒏
=>T(n)= O(Max(𝟐𝒍𝒐𝒈𝟐(𝒏)), 𝒍𝒐𝒈𝟐 (𝒏) ) por regla de la suma
Solución
Sea
T(n)= C1 SI n<=1 //este es el caso base
2*T(n-1)+C2 si n>1 //este es el caso cuando el algoritmo ejecuta la llamada recursiva
T(n)=2*T(n-1)+C2
Para n=k
=> T(n)= 2𝑘 ∗ 𝑇(𝑛 − 𝑘)+ (2𝑘 − 1)*C2
Ejercicio04
Sea
T(n)= C1 SI n<=1 //este es el caso base
3*T(n-1)+C2 si n>1 //este es el caso cuando el algoritmo ejecuta la llamada recursiva
T(n)=3*T(n-1)+C2
3i ∗ C2
𝑖 =0
Para n=k
k
=> T(n)= 3𝑘 ∗ 𝑇(𝑛 − 𝑘)+ 𝑖 =1
3i ∗ C2
Pero necesitamos expresar toda la ecuación T(n) en función de n, por lo que necesitamos saber la fórmula general para la
sumatoria expresada a continuación:
k
3i
𝑖=0
Quedando esto:
k
−2 ∗ 𝑖=0
3i = 1 − 3k+1
k = 1−3 k +1
=> 𝑖=0
3i = 2
k
De la ecuación anterior de T(n)= 3𝑘 ∗ 𝑇(𝑛 − 𝑘)+ 𝑖 =1
3i ∗ C2, se tiene que:
1−3 k +1
T(n)= 3𝑘 ∗ 𝑇(𝑛 − 𝑘)+ 2 ∗ 𝐶2
La ecuación esta expresada en función de 2 variables( n y k) y necesitamos colocarla en función
de n por definición de complejidad en tiempo
por eso calcularemos en valor de k:
n-k=1 => k=n-1
1−3 k +1
=> T(n)= 3𝑘 ∗ 𝑇(𝑛 − 𝑘)+( ) ∗ 𝐶2
2
1−3 n −1+1
=> T(n)= 3𝑛 −1 ∗ 𝑇(𝑛 − (𝑛 − 1))+( ) ∗ 𝐶2
2
1−3 n
=> T(n)= 3𝑛 −1 ∗ 𝑇(𝑛 − 𝑛 + 1)+ ( ) ∗ 𝐶2
2
1−3 n
=> T(n)= 3𝑛 −1 ∗ 𝑇 1 + ∗ 𝐶2
2
1−3 n
=> T(n)= 3𝑛 −1 . 1+ 2
∗ 𝐶2 // T(1) es 1 por que cuando n<=1 retorna 1
1−3 n
=> T(n)= 3𝑛 −1 + 2
∗ 𝐶2
1−3 n
=> T(n)= O(Max(3𝑛 −1 , 2
𝐶2)) por regla de la suma
1 3𝑛
=> T(n)=O(Max(3𝑛−1 , 2
𝐶2, 2
𝐶2))
RECOMENDACIONES:
Practicar recurrencia
Aprenderse o deducir las fórmulas más comunes por inducción sobre n( ver apuntes de matemáticas discretas I)