Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3 - Ejercicios Prácticos de Complejidad en Tiempo PDF
3 - Ejercicios Prácticos de Complejidad en Tiempo PDF
4.3. Bucles
Si es el mismo en todas las iteraciones en toda slas iteraciones y es constante, entonces podemos reducir
la fórmula de la siguiente forma:
Ejemplo Solución:
j=n;
Mientras( j>1) hacer //To(n)=C1; =
módulo A; //T1(n)=M;
j=j/2; //T2(n)=C3; Para saber cuántas iteraciones realiza el algoritmo analizamos el
FMientras comportamiento del mencionado
Suponga que la ejecución
del módulo A es una constante M Ejemplo:
Valores de j
j Cantidad de Valor Comportamiento
iteraciones
16 1 =8 =
8 2 =4 = =
4 3 =2
Repetir
<instrucciones>
hasta <condicion>
donde:
Si es el mismo en todas las iteraciones en toda slas iteraciones y es constante, entonces podemos reducir
la fórmula de la siguiente forma:
Ejercicio01: Solución
Repetir T(n)= TRepetir(n)
i=1; //T1(n)= C1 TRepetir(n)= )
Repetir
j=1; //T2(n)// C2 TRepetir(n)= T2(n)+TRepetir(n)
Repetir
k=1; //T3(n) = C3 TRepetir(n)=
modulo A;//T4(n) = C4 = n*(T3(n)+T4(n))+nC5
hasta k=j; //T5(n)=C5 = n*(C3+M)+nC5
hasta j=l; //T6(n)=C6 = nC3+nM+nC5
hasta i=n; //T7(n)=C7 => TRepetir(n)=
= n*(T2(n)+TRepetir(n))+n.C6
Suponga que la ejecución =n*(C2+nC3+nM+nC5)+n.C6
del módulo A es una constante M =nC2+ C3+
=>TRepetir(n)=
=n*(T1(n)+TRepetir(n))
=n*(C1+ nC2+ C3+ )+nT7(n)
=n*(C1+ nC2+ C3+ )+nC7
=nC1+ C2+ c3+ + + +nC7
=O(Max(nC1, C2 c3, nC7)) //regla suma
=O(Max(n, , , , )) // por regla producto
=>
Que el ciclo +interno realiza n iteraciones
Que el ciclo + externo realiza n iteraciones
Por lo que tendremos N * N * O(1) = O(n2)
Solución03:
el bucle exterior se realiza N veces, mientras que el interior se
realiza 1, 2, 3, ... N veces respectivamente. En total,
1 + 2 + 3 + ... + N = N*(1+N)/2 -> O(n2)
T(n)= (n-1)*(C2+C3)+2(n-1)*C
= c2n+c3n-c2-c3+2nc-2c
= O(Max(c2n,c3n,-c2,-c3,2nc,2c)) // por regla de la suma
= O(Max(n,n,-c2,-c3,n,2c)) // por regla del producto
= O(n) // por concepto de dominancia de funciones
El T(n)por definición es la complejidad en tiempo del algoritmo en el peor caso cuando se utiliza la notación big O
En este caso el T(n) es la suma de la complejidad de la instrucción del if + la complejidad del return true; + la complejidad
en tiempo asociada al ciclofor
Luego por regla del producto la constante C3 es despreciable lo que implica que
T(n)=O(n)
En los bucles con contador explícito, podemos distinguir dos casos, que el tamaño N forme parte de los límites o que no. Si
el bucle se realiza un número fijo de veces, independiente de N, entonces la repetición sólo introduce una constante
multiplicativa que puede absorberse.
Ejemplo04
c= 1; Valores de n y c
while (c < N) {
algo_de_O(1) N C
c= 2*c; 1 2
}
2 2*2
3 2*2*2
n
k
El valor inicial de "c" es 1, siendo "2 " al cabo de "k" iteraciones. El número de iteraciones es tal que
2k >=N =>k=(log2 (N)), [el entero inmediato superior]
y, por tanto, la complejidad del bucle es O(log n).
Ejemplo05
Un razonamiento análogo nos lleva a log2(N) iteraciones y, por tanto, a un orden O(log n) de complejidad.
¿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= => k=
=>T(n)= T( )+
=>T(n)= O(
Ejercicio03
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)= + *C2
Ejercicio04
Funcion Recursivo (entero n){
Si(n<=1) entonces
<-- 1;
sino
<-- Recursivo(n-1)+ Recursivo (n-1)+ Recursivo(n-1);
fsi
Ffuncion
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
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:
Quedando esto:
=
=> =
T(n)= +
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
=> T(n)= +
=> T(n)= +
=> T(n)= +
=> T(n)= +
=> T(n)= +
=> T(n)=O(Max( , ))
RECOMENDACIONES:
Practicar recurrencia
Aprenderse o deducir las fórmulas más comunes por inducción sobre n( ver apuntes de matemáticas discretas I)