Complejidad del tiempo

Complejidad del tiempo

La complejidad temporal representa de forma asintótica el tiempo que algoritmo para encontrar una solución.

Sea P un problema y M un método para resolver este problema. El algoritmo es una descripción con estructuras de control y datos que permiten escribir el método M en un lenguaje reconocible por cualquier individuo o máquina.

Como recordatorio, las estructuras de control son: una secuencia, una rama (o selección), un bucle (o iteración). Las estructuras de datos son: constantes, variables, matrices (o espacio de almacenamiento ordenado), estructuras recursivas (listas, gráficos, etc.).

Operación elemental

La complejidad consiste en evaluar la eficacia del método M y en comparar este último con otro método M'. Esta comparación es independiente del entorno (máquina, sistema, compilador, lenguaje, etc.). La eficiencia depende del número de operaciones elementales. Estos dependen del tamaño de los datos y la naturaleza de los datos.

Sea n el tamaño de los datos y T(n) el número de operaciones elementales. La evaluación de la eficacia se realizará en el mejor de los casos, en el peor de los casos y en el caso medio.

En el caso de una estructura de tipo secuencia, la evaluación es igual a la suma de los costos. Por ejemplo, si el algoritmo tiene un tratamiento T1(n) seguido de T2(n), entonces T(n)=T1(n)+T2(n).

En el caso de una sucursal, la evaluación es igual al máximo de las sucursales. Por ejemplo, el algoritmo ejecuta T1(n) sino T2(n), luego T(n)=max(T1(n), T2(n)).

En el caso de un bucle, la evaluación es igual a la suma de los costes de los pasajes sucesivos. Por ejemplo, si el algoritmo es un tiempo Ti(n) con la complejidad de Ti(n) dependiendo del número i de la iteración. Entonces la complejidad es T(n) = sum(i=1 to n) Ti(n).

Para una versión recursiva, los invito a ir a la página correspondiente. Sea C (n) el procesamiento realizado en una función de divide y vencerás. Entonces la complejidad es T (n) = 2 * T (n / 2) + C (n) = n log (n) si C (n) = n.

Notación Landau

La notación de Landau caracteriza el comportamiento asintótico de una función, es decir, el comportamiento de f(n) cuando n tiende a infinito.

Decimos que f (n) es una gran O de g (n) si .

Ejemplos de

Peor, mejor y promedio

Podemos calcular para la mayoría de los algoritmos una complejidad en el peor de los casos (el mayor número de operaciones elementales), el mejor y en promedio. El promedio es una suma ponderada por la probabilidad de la presencia de las posibles complejidades. La mayoría de las veces, usamos la complejidad del peor de los casos porque queremos conocer un límite superior en el tiempo de ejecución.

Considere un algoritmo para encontrar un elemento en una matriz en forma iterativa. El algoritmo se detiene cuando se ha encontrado el valor. El algoritmo se desglosa de la siguiente manera: asignación de 0 a i, siempre que i no haya atravesado la tabla, se incrementa i, si tab[i]=valor, se devuelve verdadero, si no, al final de la tabla se devuelve falso. Sea C la complejidad del cuerpo del bucle.

En el peor de los casos, el algoritmo atraviesa toda la matriz, es decir, T(n)=1+n*C=O(n). En el mejor de los casos, el elemento está al comienzo de la matriz, por lo que T(n)=1+C=O(1). Consideramos que, en promedio, existe una probabilidad de 50% de que el elemento no esté en la matriz y de 50% de que esté a la mitad de la matriz (esto, por supuesto, es absurdo, pero no analizaremos todas las posibilidades). En este caso, la complejidad promedio es T(n)=0.5*(1+n*C)+0.5*(1+n*C/2)=a*n+b con constantes a y b = O (no) . Notamos que el comportamiento asintótico en promedio es el mismo que en el peor de los casos.

Ejemplos de

Suponga que cada una de las siguientes expresiones da el tiempo de procesamiento T (n) empleado por un algoritmo para resolver un problema de tamaño n. Seleccione los términos dominantes con el mayor aumento en n y especifique la complejidad de Big-Oh más baja de cada algoritmo.

Expresión Dominante O (.)
5 + 0,001n3+ 0.025n 0.001n3 Nosotros3)
500n + 100n1.5 + 50n registro10 no 100n1.5 Nosotros1.5)
0.3n + 5n1.5 + 2,5 n1.75 2,5 n1.75 Nosotros1.75)
no2 Iniciar sesión2 n + n (registro2 no)2 no2 Iniciar sesión2 no Nosotros2 log n)
n registro3 n + n log2 no n registro3 n, n log2 no O (n log n)
  3 registro8 n + log2 Iniciar sesión2 Iniciar sesión2 no 3 registro8 no O (log n)
0. 100n + 0.01n2 0.01n2 Nosotros2)
0.01n + 100n2 100n2 Nosotros2)
2n + n0.5 + 0.5n1.25 0.5n1.25 Nosotros1.25)
0.01n log2 n + n (registro2 no)2 n (registro2 no)2 O (n (log n)2)
Registro de 100n3 n + n3 + 100n no3 Nosotros3)

Las instrucciones siguientes muestran algunas características de la notación “Big-Oh” para las funciones f ≡ f (n) y g ≡ g (n). Determine si cada afirmación es VERDADERA o FALSA y corrija la fórmula en el último caso.

Función ¿Verdadero o falso? Después de corregir
 O (f + g) = O (f) + O (g) FALSO O (f + g) = max {O (f), O (g)}
O (f g) = O (f) O (g) CIERTO  
 si g = O (f) y h = O (f) entonces g = O (h) FALSO si g = O (f) yf = O (h) entonces g = O (h)
5n + 8n 2 + 100n 3 = O (n 4) CIERTO  
5n + 8n 2 + 100n 3 = O (n 2 log n) FALSO Nosotros3 )

ES
FR
FR
EN
ES
Salir de la versión móvil