Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El concepto de complejidad
(aritmética en notación O)
Ingeniería en Software
Facultad de Ingeniería
2014
El concepto de complejidad
(aritmética en notación O)
2
El concepto de complejidad
(aritmética en notación O)
Los órdenes de magnitud más comunes son los que se observan en la tabla inferior,
donde los algoritmos más eficientes en cuanto a tiempo de ejecución son los de
orden de magnitud constante, y los menos eficientes son los de orden de magnitud
exponencial.
void llenarCubo( ){
//Se asume que la variable entera n tiene un valor consistente.
cubo = new double[n] [n] [n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
for (int k = 0; k < n; k++){
Consola.imprimir(“Digite un número real:”);
cubo [i] [j] [k] = Consola.leerReal();
}
} 3
Orden de magnitud: O(n )
4
El concepto de complejidad
(aritmética en notación O)
Algoritmo de complejidad logarítmica:
Ejemplos:
log2(32) = 5 porque 25 = 32
log10(100) = 2 porque 102 = 100
En otras palabras: el logaritmo de un número x es el número de veces que
hay que dividir dicho número, por otro llamado base (b), hasta obtener un
cociente de uno (1).
5
El concepto de complejidad
(aritmética en notación O)
Un algoritmo clásico de complejidad logarítmica en base 2, es el algoritmo de la búsqueda
binaria sobre un vector ordenado.
vec
3 5 8 13 19 23 31 36 45 50 57 61 72 81 93
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
El algoritmo es el siguiente:
i) O(log2(n))
void metodoLogaritmico1( ){
int n, cont, i;
n = 32, cont = 0, i = 32;
while (i > 1){
cont = cont + 1;
i = i / 2;
}
Consola.imprimir(n + “\n” + cont);
}
O también:
7
El concepto de complejidad
(aritmética en notación O)
ii) O(log2(n))
void metodoLogaritmico2( ){
int n, cont, i;
n = 32, cont = 0, i = 1;
while (i < n){
cont = cont + 1;
i = i * 2;
}
Consola.imprimir(n + “\n” + cont);
}
8
El concepto de complejidad
(aritmética en notación O)
iii) O(log3(n))
void metodoLogaritmico3( ){
int n, cont, i;
n = 81, cont = 0, i = 81;
while (i > 1){
cont = cont + 1;
i = i / 3;
}
Consola.imprimir(n + “\n” + cont);
}
void sumatoria( ){
int n, suma = 0, i;
Consola.imprimir(“Ingrese un número entero positivo:”);
n = Consola.leerEntero( );
for (i = 1; i <= n; i++)
suma += i;
Consola.imprimir(“Suma enteros desde 1 hasta ” + n + “: ”+ suma);
}
void sumatoriaConFormula( ){
int n, suma;
Consola.imprimir(“Ingrese un número entero positivo:”);
n = Consola.leerEntero( );
suma = n*(n + 1) / 2;
Consola.imprimir(“Suma enteros desde 1 hasta ” + n + “: ”+ suma);
}
Este método es: O(1)
12
Análisis de Algoritmos
El concepto de complejidad
(aritmética en notación O)
Ingeniería en Software
Facultad de Ingeniería
2014