Análisis de algoritmos
Ejercicios: Análisis de algoritmos no recursivos
M. en C. Edgardo Adrián Franco Martínez 1
[Link]
edfrancom@[Link]
@edfrancom edgardoadrianfrancom
Ejercicios: Análisis de algoritmos no recursivos
1. Encuentre el orden 𝑂 de complejidad temporal y espacial
Análisis de algoritmos
Prof. Edgardo Adrián Franco Martínez
Ejercicios: Análisis de algoritmos no recursivos
del algoritmo de ordenamiento por BurbujaSimple.
Procedimiento BurbujaSimple(A,n)
para i=1 hasta (i<n) hacer
para j=0 hasta (j<n-1) hacer
si (A[j]>A[j+1]) hacer
temp = A[j]
A[j] = A[j+1]
A[j+1] = temp
fin si
fin para
fin para
fin Procedimiento
2
2. Encuentre el orden 𝑂 de complejidad temporal y espacial
del algoritmo de ordenamiento por Inserción.
Análisis de algoritmos
Prof. Edgardo Adrián Franco Martínez
Ejercicios: Análisis de algoritmos no recursivos
Procedimiento Insercion(A,n)
{
para i=1 hasta i<n hacer
temp=A[i]
j=i-1
mientras((A[j]>temp)&&(j>=0)) hacer
A[j+1]=A[j]
j--
fin mientras
A[j+1]=temp
fin para
fin Procedimiento
3
3. Encuentre el orden 𝑂 de complejidad temporal y espacial
del algoritmo de ordenamiento por Seleccion.
Análisis de algoritmos
Prof. Edgardo Adrián Franco Martínez
Ejercicios: Análisis de algoritmos no recursivos
Procedimiento Seleccion(A,n)
para k=0 hasta k<n-1 hacer
p=k;
para i=k+1 hasta i>n-1 hacer
si A[i]<A[p] hacer
p = i
fin si
si p!=k hacer
temp = A[p]
A[p] = A[k]
A[k] = temp
fin si
fin para
fin para
fin Procedimiento
4
4. Encuentre el orden 𝑂 de complejidad temporal y espacial
del algoritmo de ordenamiento Shell.
Análisis de algoritmos
Prof. Edgardo Adrián Franco Martínez
Ejercicios: Análisis de algoritmos no recursivos
Procedimiento Shell(A,n)
k = n / 2;
mientras k >= 1 hacer
para i=k hasta i>=n hacer
v = A[i]
j = i - k;
mientras j >= 0 && A[j] > v hacer
A[j + k] = A[j];
j -= k;
fin mientras
A[j + k] = v;
fin para
k/=2;
fin mientras
fin Procedimiento
5
5. El máximo común divisor de dos enteros positivos n y m;
denotado por MCD(n,m); es el único entero positivo k tal
que k divide a m y n y todos los demás enteros que dividen
Análisis de algoritmos
Prof. Edgardo Adrián Franco Martínez
Ejercicios: Análisis de algoritmos no recursivos
a m y n son menores que k. Encuentre el orden 𝑂 de
complejidad temporal y espacial del algoritmo.
func MaximoComunDivisor(m, n)
{
a=max(n,m);
b=min(n,m);
residuo=1;
mientras (residuo > 0)
{
residuo=a mod b;
a=b;
b=residuo;
}
MaximoComunDivisor=a;
return MaximoComunDivisor;
}
6
6. Evaluación de polinomios (Algoritmo 01). Realice el análisis
de complejidad temporal y espacial.
Análisis de algoritmos
Prof. Edgardo Adrián Franco Martínez
Ejercicios: Análisis de algoritmos no recursivos
class Polinomio
{
private double[] coeficientes;
Polinomio (double[] coeficientes)
{
[Link]= new double[[Link]];
[Link](coeficientes, 0, [Link], 0,[Link]);
}
double evalua_1 (double x)
{
double resultado= 0.0;
for (int termino= 0; termino < [Link]; termino++)
{
double xn= 1.0;
for (int j= 0; j < termino; j++)
xn*= x; // x elevado a n
resultado+= coeficientes[termino] * xn;
}
return resultado;
}
} 7
7. Evaluación de polinomios mejorada (Algoritmo 02). Realice
el análisis de complejidad temporal y espacial.
Análisis de algoritmos
Prof. Edgardo Adrián Franco Martínez
Ejercicios: Análisis de algoritmos no recursivos
double evalua_2 (double x)
{
double resultado= 0.0;
for (int termino= 0; termino < [Link]; termino++)
{
resultado+= coeficientes[termino] * potencia(x, termino);
}
return resultado;
}
private double potencia (double x, int n)
{
if (n == 0)
return 1.0;
// si es potencia impar ...
if (n%2 == 1)
return x * potencia(x, n-1);
// si es potencia par ...
double t= potencia(x, n/2);
return t*t;
}
8
8. Investigar, explicar y evaluar la complejidad temporal y
espacial del Algoritmo de Strassen para multiplicación de
Análisis de algoritmos
Prof. Edgardo Adrián Franco Martínez
Ejercicios: Análisis de algoritmos no recursivos
matrices.
*Incluir la redacción de cada ejercicio
*Portada con fotografía y encabezados de pagina.