Está en la página 1de 13

Análisis de algoritmos

Ejercicio 02: Complejidad temporal y análisis de casos


M. en C. Edgardo Adrián Franco Martínez 1
http://www.eafranco.com
edfrancom@ipn.mx
@edfrancom edgardoadrianfrancom
Ejercicios: Complejidad de los algoritmos

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
A. Para los siguientes 5 algoritmos determine la función de complejidad
temporal y espacial en términos de n. *Considere las operaciones de:
asignación, aritméticas y condicionales.
1 2
for(i=1;i<n;i++) polinomio=0;
for(j=n;j>1;j/=2) for(i=0;i<=n;i++)
{ {
temp = A[j]; polinomio=polinomio*z + A[n-i];
A[j] = A[j+1]; }
A[j+1] = temp;
}

3
for i = 1 to n do
for j = 1 to n do
C[i,j] = 0;
for k = 1 to n do
C[i,j] = C[i,j] + A[i,k]*B[k,j];

4 5
anterior = 1; for (i = n – 1;j=0;i>=0;i--,j++)
actual = 1; s2[j]= s[i];
while (n>2)
{ for (k = 0,k<n;k++)
aux = anterior + actual; s[i]= s2[i];
anterior = actual; 2
actual = aux;
n = n - 1;
}
B. Para los siguientes 3 algoritmos determine el número de veces que se
imprime la palabra “Algoritmos”. Determine una función lo más
cercana a su comportamiento para cualquier n y compruébela

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
codificando los tres algoritmos (Adjuntar códigos). De una tabla de
comparación de sus pruebas para n’s igual a 10, 100, 1000, 5000 y
100000 y demostrar lo que la función encontrada determina será el
número de impresiones. 6
for(i=10;i<n*5;i*=2)
printf("\"Algoritmos\n\"");

7 n # #
for(j=n;j>1;j/=2) Impresion Impresion
es Reales es según la
{ función
if(j<(n/2))
{
for(i=0;i<n;i+=2) 10 --- ----
{
printf("\"Algoritmos\n\""); 100 ---- -----
}
1000 --- ----
}
}

8
i=n;
while(i>=0) 9
{ for (i =1;i<n*2;i*=6)
for (j=n;i<j;i-=2,j/=2) printf("\"Algoritmos\n\"");
{
3
printf("\"Algoritmos\n\"");
}
}
return 0;
C. Para los siguientes algoritmos determine las funciones de complejidad
temporal, para el mejor caso, peor caso y caso medio. Indique cual(es)
son las condiciones (instancia de entrada) del peor caso y cual(es) la del

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
mejor caso. *Señale las operaciones básicas que considerará para el análisis de cada algoritmo,
si no logra distinguirlas considere las operaciones de: asignación, aritméticas y condicionales.
*Recomendación: Usar como operaciones básicas: comparación entre
elementos del arreglo a y Asignaciones a temp y al arreglo a.
10 11
func Producto2Mayores(A,n) func OrdenamientoIntercambio(a,n)
if(A[1] > A[2]) for (i=0; i<n-1; i++)
mayor1 = A[1]; for (int j=i+1; j<n;j++)
mayor2 = A[2]; if (a[ j ] < a[ i ])
else {
mayor1 = A[2]; temp=a[ i ];
mayor2 = A[1]; a[ i ]=a[ j ];
i = 3; a[ j ]=temp;
}
while(i<=n) fin
if(A[i] > mayor1)
mayor2 = mayor1;
12
mayor1 = A[i]; *Recomendación: Usar como
func MaximoComunDivisor(m, n)
else if (A[i] > mayor2) operación básica la operación
{
mayor2 = A[i]; de modulo de a y b
a=max(n,m);
i = i + 1; *Notar de dos números consecutivos de
b=min(n,m); la serie de Fibonacci. ¿Qué propiedad
residuo=1; tiene?
return = mayor1 * mayor2;
mientras (residuo > 0)
fin
{
*Recomendación: Usar como operaciones básicas: residuo=a mod b;
a=b;
comparación entre elementos del arreglo A y Asignaciones
b=residuo;
4
a mayor1 y mayor 2.
}
MaximoComunDivisor=a;
return MaximoComunDivisor;
}
13
Procedimiento BurbujaOptimizada(A,n)
cambios = “No”
i=0

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
Mientras i< n-1 && cambios != “No” hacer
cambios = “No”
Para j=0 hasta (n-2)-i hacer
Si(A[i] < A[j]) hacer
aux = A[j]
A[j] = A[i]
A[i] = aux
cambios = “Si”
FinSi
FinPara
i= i+1
FinMientras
fin Procedimiento

14
Procedimiento BurbujaSimple(A,n)
para i=0 hasta n-2 hacer
para j=0 hasta (n-2)-i hacer
si (A[j]>A[j+1]) entonces
aux = A[j]
A[j] = A[j+1]
A[j+1] = aux
fin si
fin para
fin para
fin Procedimiento

5
15
Procedimiento Ordena(a,b,c)
{
if(a>b)

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
if(a>c)
if(b>c)
salida(a,b,c);
else
salida(a,c,b);
else
salida(c,a,b);
else
if(b>c)
if(a>c)
salida(b,a,c);
else
salida(b,c,a);
else
salida(c,b,a);
}

16
Procedimiento Seleccion(A,n)
para k=0 hasta n-2 hacer
p=k
para i=k+1 hasta n-1 hacer
si A[i]<A[p] entonces
p=i
fin si
fin para
temp = A[p]
A[p] = A[k]
A[k] = temp
6
fin para
fin Procedimiento
17
Algoritmo FrecuenciaMinNumeros
Leer n

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
Dimension A[n]
i=1
Mientras i<=n
Leer A[i]
i=i+1
FinMientras

f=0
i=1
Mientras i<=n
ntemp=A[i]
j=1
ftemp=0
Mientras j<=n

si ntemp=A[j]
ftemp=ftemp+1
FinSi
j=j+1
FinMientras

si f<ftemp
f=ftemp
num=ntemp
FinSi

i=i+1
FinMientras
Escribir num
FinAlgoritmo 7
18
Proceso SumaNPrimerosPares
Leer N

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
contador=0
limite=N
Mientras (contador<limite) Hacer
si (N MOD 2==0) Entonces
suma=N+suma
contador=contador+1
FinSi
N=N+1
FinMientras
Escribir suma
FinProceso

19
Proceso CuentaMultiplosde2y3
Para num<-1 Hasta n Con Paso 1
si (num MOD 2==º o num MOD 3==0)
Entonces
Escribir num
FinSi
FinPara
FinProceso

8
20
Proceso ValidaPrimo
Leer n

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
divisores<-0
si n>0 Entonces
Para i<-1 Hasta n Hacer
si (n%i=0) Entonces

divisores=divisores+1
FinSi
FinPara
FinSi

si divisores=2
Escribir 'S'
SiNo
Escribir 'N'
FinSi

FinProceso

9
*Portada con fotografía y encabezados de pagina

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
*Análisis detallado de cada algoritmo

func Producto2Mayores(A,n)
if(A[1] > A[2])
mayor1 = A[1];
mayor2 = A[2];
else
mayor1 = A[2];
mayor2 = A[1];
i = 3;

while(i<=n)
if(A[i] > mayor1)
mayor2 = mayor1;
mayor1 = A[i];
else if (A[i] > mayor2)
mayor2 = A[i];
i = i + 1;

return = mayor1 * mayor2; 10


Lista cotejo de la evaluación del ejercicio
Indicador SI NO

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
Redacción del
Problema (Cuenta
con encabezados y los
datos están redactados
completamente)

Análisis del
Problema (Identifica
y explica las
instrucciones o variables
a considerar para el
análisis)
Desarrollo del
Problema (Explica el
análisis realizado y los
pasos con lo que llego al
resultado)

Secuencia Lógica
(Hay una correcta
interpretación de los 11
conceptos, cálculos y
formulas)
Fecha máxima de entrega en el sitio Web
• La entrega se realizará a través de la página:

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
http://www.eafranco.com
Entregar a más tardar el día lunes 04 de Marzo de 2019

12
• Grupo y contraseña

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Ejercicio 02: Complejidad temporal y análisis de casos
Grupo Contraseña
3CM3 analisis3cm3
3CM4 analisis3cm4

• Escribir y almacenar las claves de confirmación, para


aclaraciones a con respecto a la evaluación.

13

También podría gustarte