Вы находитесь на странице: 1из 10

Anlisis de Complejidad de Algoritmos

Unidad 7

Introduccin

La notacin "Big-O" y el anlisis de complejidad de algoritmos es simplemente una forma de evaluar qu tan rpido un programa o un algoritmo se ejecutan. La complejidad de algoritmo est diseada para comparar dos algoritmos en un nivel conceptual, de idea, antes de elegir el hardware y software con que se va a ejecutar. Pofilers miden el tiempo de ejecucin en milisegundos y ayudan a optimizar nuestro cdigo, al identificar los cuellos de botella que podra haber en l.

Instrucciones de Conteo

El elemento mximo en un array puede encontrarse usando este sencillo cdigo. Dado como entrada un array A de tamao n:
1.- Contar las instrucciones siguientes:

var M = A[ 0 ]; for ( var i = 0; i < n; ++i ) { if ( A[ i ] >= M ) M = A[ i ]; }

Asignar un valor a una variable Buscar el valor de un elemento en particular en un array Comparar dos valores Incrementar un valor Operaciones aritmticas bsicas tales como adicin y multiplicacin

Instrucciones de Conteo

El elemento mximo en un array puede encontrarse usando este sencillo cdigo. Dado como entrada un array A de tamao n:
Esto requiere 2 instrucciones: una para buscar A[ 0 ] y otra para asignar el valor a M. Asumimos que n siempre es al menos. El bucle o for loop tambin tiene que correr siempre. Esto da dos instrucciones ms: asignacin y comparacin: i = 0; i < n;

var M = A[ 0 ]; for ( var i = 0; i < n; ++i ) { if ( A[ i ] >= M ) M = A[ i ]; }

Estas dos instrucciones siempre son requeridas por el algoritmo, independiente del valor de n y corrern antes de la primera iteracin for loop. Despus de cada iteracin for loop, se necesitan ejecutar dos instrucciones ms: un incremento de i y una comparacin para chequear si nos mantenemos en el bucle: ++i; i < n;

Instrucciones de Conteo

El elemento mximo en un array puede encontrarse usando este sencillo cdigo. Dado como entrada un array A de tamao n:

var M = A[ 0 ]; for ( var i = 0; i < n; ++i ) { if ( A[ i ] >= M ) M = A[ i ]; }


Entonces, si ignoramos el cuerpo del bucle, el nmero de instrucciones que necesita este algoritmo son 4 + 2n. Esto es, 4 instrucciones al comienzo del forloop y dos instrucciones al final de cada iteracin de la que obtenemos n. Ahora, podemos definir una funcin f( n ), la cual, dado un n,nos entrega el nmero de instrucciones que el algoritmo necesita. Para un cuerpo for vaco tenemos f( n ) = 4 + 2n.

Instrucciones de Conteo

Anlisis Worst-Case o del Peor Caso

var M = A[ 0 ]; for ( var i = 0; i < n; ++i )

{
if ( A[ i ] >= M ) M = A[ i ];
Ahora, si nos fijamos en el cuerpo del for hay una operacin de bsqueda en array y una comparacin que ocurre siempre.
Pero el cuerpo del if podra correr o no correr, dependiendo de cules son los valores del array. Si ocurriese que A[ i ] >= M, entonces se ejecutan dos instrucciones adicionales: una bsqueda en array y una asignacin: M = A[ i ]

Instrucciones de Conteo

Anlisis Worst-Case o del Peor Caso

var M = A[ 0 ]; for ( var i = 0; i < n; ++i )


Pero ahora no podemos definir una f(n) tan fcilmente, porque la cantidad de instrucciones no depende solamente de n sino que tambin de la entrada (los datos del arreglo). Por ejemplo, para A = [ 1, 2, 3, 4 ] el algoritmo necesitar ms instrucciones que para A = [ 4, 3, 2, 1 ].

{
if ( A[ i ] >= M ) M = A[ i ];

Instrucciones de Conteo

Anlisis Worst-Case o del Peor Caso


Qu es lo peor que puede ocurrir con nuestro algoritmo? En qu caso nuestro algoritmo requiere la mayor cantidad de instrucciones para correr? En este caso, es cuando tenemos un array en orden ascendente del tipo A = [ 1, 2, 3, 4 ]. En este caso, M necesita ser reemplazado cada vez y entonces eso entrega la mayor cantidad de instrucciones. Los cientficos computacionales usan un vistoso trmino para referirse a esto y lo llaman "worst-case analysis" o anlisis del peor escenario. Esto no es nada ms que considerar el escenario en que tenemos ms mala suerte. Entonces, en el peor de los casos, tenemos 4 instrucciones para ejecutar dentro del cuerpo del for por lo que tenemos: f( n ) = 4 + 2n + 4n = 6n + 4.
Esta funcin f, dado un tamao n del problema, entrega el nmero de instrucciones que seran necesarias en el peor de los casos. mm

var M = A[ 0 ]; for ( var i = 0; i < n; ++i )

{
if ( A[ i ] >= M ) M = A[ i ];

Instrucciones de Conteo

Anlisis Worst-Case o del Peor Caso


De los trminos que estamos considerando, haremos a un lado todos aquellos que crecen lentamente y slo mantendremos los que crecen rpidamente, a medida que n se hace mayor.
Claramente un 4 sigue como un 4, n crece, pero 6n aumenta y aumenta, por lo tanto su influencia crecer de igual forma en problemas de mayor tamao. Por esto, lo primero que haremos ser eliminar el 4 y dejaremos la funcin como f( n ) = 6n. El segundo aspecto que ignoraremos ser la constante que multiplica a n, por lo que nuestra funcin quedar en f( n ) = n.

var M = A[ 0 ]; for ( var i = 0; i < n; ++i )

{
if ( A[ i ] >= M ) M = A[ i ];

Ejercicio 1

Analiza el cdigo y calcula f( n ) para el peor caso

for(int i = 2; i < arreglo.length; i++) { for(int j = 0;j < arreglo.length-1;j++)

{
if(arreglo[j] > arreglo[j+1]) {

auxiliar = arreglo[j];
arreglo[j] = arreglo[j+1]; arreglo[j+1] = auxiliar; } } }