TIEMPO DE EJECUCIÓN DE UN ALGORITMO

El tiempo de ejecución de un programa en función de N(numero de datos) se denomina T(N) y se calcula sobre el código contando las instrucciones a ejecutar y multiplicando por el tiempo requerido para cada instrucción.

Ejemplo:

S1; (sentencia = s)

For (int i = 0; i < N; i++)

S2;

Requiere: T(N) = t1 + t2 * N

Los algoritmos bien estructurados combinan las sentencias de algunas de las formas siguientes:

A) Sentencias sencillas. Contempla las sentencias de asignación, entrada y salida de datos y tienen una complejidad constante que se establece Orden 1 = O(1).

B) Secuencia de sentencias. La complejidad de ella es la suma de las complejidades individuales de cada una de ellas. O(1).

C) Decisión (if). Una condición es de complejidad O(1) ya sea en la rama then o en la rama else.

D) Decisión multiple (switch case). Se tomara la complejidad de la peor de las ramas.

E) Bucles de contador explicito (for). Si se realiza un numero fijo de veces independientemente de N sera el siguiente.

Ejemplo:

For ( i = 0 ; i < k; i++)

{algo de O(1)}

K * O(1) = O(1)

Dependiendo de N: ejemplo:

For (i = 0; i < N; i++)

{algo de O(1)}

N * O(1) = O(n)

F) Ciclos anidados:

Ejemplo:

For (i = 0; i < N; i++)

{For (j = 0; j<N; j++)

{algo de O(1)}

N * N * O(1) = O(n2)

G) Llamada a procedimiento. Su complejidad depende del contenido de las instrucciones que formen el cuerpo del procedimiento.

Ejemplo:

Int factorial (int n) O(1) entrada

{ int Fact = 1 O(1) asignación

for (int i = N; i > 0; i–) O(n) bucle dependiente de N

Fact = Fact * i; O(1) sentencia sencilla

Return Fact; O(1) sentencia sencilla

}

resultado complejidad mayor = O(n)

Ordenes de Complejidad:

O(1)ConstanteIdeal
O(n)LinealEficiente
O(log n)LogaritmicoEficiente
O(n log n)LogaritmicoEficiente
O(nK)PolinomialTratable
O(Kn)ExponencialIntratable
O(n!)FactorialIntratable
 




Google
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki
Politica de Privacidad