Upload
rezzaca
View
15.966
Download
1
Embed Size (px)
Citation preview
1.1.- Concepto de complejidad de un algoritmo.
Cuando se resuelve un problema
Algoritmo
Fácil de entender, codi
ficar y depurar.
Uso efectivo de los recursos del
computador + menor tiempo de
ejecución
Tiempo de ejecución de un programa.
Tiempo de ejecución
Datos de entrada
Calidad del código generado para crear el código objeto.
Naturaleza y rapidez de las instrucciones
maquinaComplejidad de tiempo del algoritmo
Tiempo de ejecución de un programa. T(n). Tiempo de ejecución de un programa con una
entrada de tamaño n.
T(n) como tiempo de ejecución del “peor caso”. Máximo valor del tiempo de ejecución para entradas de tamaño n.
No es posible expresar T(n) en unidades de tiempo. ¿Por qué?.
Asíntotas Comportamiento asintótico de un algoritmo es cuando
el tamaño de las entradas N tiende a infinito.
A un conjunto de funciones que comparten un mismo comportamiento asintótico le denominaremos un orden de complejidad
Ordenes de complejidadRepresentación Nombre
O(1) orden constante
O(log n) orden logarítmico
O(n) orden lineal
O(n log n)
O(n2) orden cuadrático
O(na) orden polinomial (a > 2)
O(an) orden exponencial (a > 2)
O(n!) orden factorial
1.2 Aritmética de la notación O. La notación O conocida también como notación
asintótica, se utiliza para hacer referencia a la velocidad de crecimiento de los valores de una función.
Ejemplo: T(n) = O(n2). Se lee “o de n al cuadrado”.
Significa que existen constantes enteras c y n0 tales que para n mayor o igual que n0, se tiene que T(n) ≤ cn2.
1.2 Aritmética de la notación O. Regla de la suma: T1(n) + T2(n) = O(max(f(n),g(n))).
Calcula el tiempo de ejecución de una secuencia de pasos de programa, donde cada paso de programa puede contener ciclos y ramificaciones.
Ejemplo: Se tienen O(n2), O(n3), O(nlogn) => O(max(n2,n3) ) es O(n3); y O(max(n3, nlogn)) es O(n3). Por lo tanto la suma de los tres es igual a O(n3).
1.2 Aritmética de la notación O. Regla del producto: T1(n)T2(n) = O(f(n)f(g)).
Según esta regla O(cf(n)) es lo mismo que O(f(n)).
Ejemplo: O(n2/2) = O(n2).
Reglas prácticas para el cálculo de la complejidad de un algoritmo. Los algoritmos bien estructurados combinan las
sentencias de alguna de las formas siguientes
sentencias sencillas
secuencia (;)
decisión (if)
bucles
llamadas a procedimientos, que en nuestro caso pudiera ser llamadas a métodos de alguna clase.
Reglas prácticas para el cálculo de la complejidad de un algoritmo. Sentencias sencillas => O(1).
Estructura IF/ELSE => O(1).
Bucles o ciclos. Cuando existe un número limitado de veces que se repite un grupo de sentencias, su complejidad es O(1). Pero si N forma parte del límite de iteraciones, entonces es O(n).
Cuando tenemos dos bucles anidados es O(n2).
Bucles multiplicativos donde la variable de control no es lineal es O(log n).
O(nlogn) es un bucle interno multiplicativo anidado a otro que es normal.
Las llamadas a procedimientos o métodos generan una orden de complejidad según el análisis de sentencias de cada uno de ellos.
Ejemplosint cont = 0;
for (int i = 2; i <= 1000; i++){for (int j = 1; j <= i; j++){
if (i % j == 0){cont = cont + 1;
}}if (cont < 3){
Console.Write(i+", ");}cont = 0;
}Console.ReadKey();