Documente Academic
Documente Profesional
Documente Cultură
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