Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejercicios Prácticos de Complejidad en Tiempo PDF
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)