Traducciones de esta página?:

Tiempo de ejecución

Existen distintos modos de medir el tiempo de ejecución de un algoritmo. Dada una entrada de tamaño N, se les puede describir del siguiente modo.

NombreTiempoDescripciónFormulaEjemplo
factoriallentisimosu tiempo de ejecución es proporcional a N elevado a la N-ésima potencia N! Solución de fuerza bruta al problema del vendedor viajero
exponenciallentosu tiempo de ejecución es proporcional a una constante elevada a la N-ésima potencia KN Solución de fuerza bruta al cubo mágico (Rubik's Cube)
polinomialrápidosu tiempo de ejecución es proporcional a N elevado a una constante NK Ordenación por comparación (algoritmos de burbuja, inserción y selección)
logarítmico linealmás rápidosu tiempo de ejecución esta entre el lineal y el polinomial N * log(N) Ordenación logaritmica lineal (quicksort, heapsort, mergesort)
linealaún más rápidosu tiempo de ejecución es proporcional a N K * N El recorrido de un arreglo
logarítmicomucho más rápidosu tiempo de ejecución es proporcional al logaritmo de N K * log(N) Búsqueda binaria
constanterapidisimosiempre toma el mismo tiempo sin importar cuán grande sea N K Visualización de el elemento i-ésimo en un arreglo

Analisis de Complejidad

Una operación puede tener diversos tiempo de ejecución/complejidad para distintos órdenes o conjuntos de datos de entrada. Estos son los diferentes métodos para analisis de complejidad:

NombreDescripciónEjemplo
mejor caso (best-case)Es es el caso en el que la operación se ejecuta tan rapido como es posible La ordenación por burbuja tiene una complejidad de tiempo de mejor caso N
caso promedio (average-case) Es el caso donde la operación se ejecuta en un periodo de tiempo comparable a la mayoría de los casos posiblesEl algoritmo quicksort tiene un tiempo de complejidad promedio de N * log(N)
peor caso (worst-case)Es donde la operación se ejeucta lo mas lento posible El algoritmo quicksort tiene un tiempo de complejidad en el peor de los casos de N2
peor caso amortizadoSeria el promedio de el peor caso sobre un conjunto infinito de datos de entrada vector::push_back() tiene un tiempo de complejidad amortizado en el peor de sus casos de K (tiempo constante)

La elección de el mejor algoritmo depende de que casos se espera que la aplicación encuentre. Por ejemplo, una aplicación que deba protegerse a si misma de entradas maliciosas siempre evitara malas implementaciones de quickort que tiene un peor caso de complejidad de N2 aun cuando en su caso promedio mas rapido es mejor comparado con los otros algoritmos de ordenación.