Digamos que queremos analizar el tiempo de ejecución de los algoritmos. A veces decimos que queremos encontrar el tiempo de ejecución de un algoritmo cuando el tamaño de entrada es n y, en el peor de los casos, se denota por O (n). A veces, aunque veo libros / documentos que dicen que necesitamos encontrar el tiempo esperado de un algoritmo. También a veces se usa el tiempo de ejecución promedio .
¿Qué es el "tiempo esperado"? ¿En qué casos es útil encontrar el tiempo esperado en lugar del peor de los casos?
Editar : Creo que hay una sutil diferencia entre el tiempo de ejecución esperado y el tiempo de ejecución promedio, pero no estoy seguro. A través de esta publicación quiero saber la diferencia exacta si la hay.
Respuestas:
El tiempo esperado es solo el tiempo promedio, esperado , de ejecución del algoritmo usando el objetivo entrada .
Digamos que tiene algunos millones de registros de usuarios y desea ordenarlos, es posible que desee utilizar un algoritmo que sea el más adecuado para su entrada y, como tal, ofrezca el mejor tiempo de ejecución esperado , en lugar de un algoritmo que tenga mejores resultados. peor tiempo de ejecución pero peor esperado tiempo de ejecución .
A veces, por ejemplo, los factores constantes para la complejidad en el tiempo de un algoritmo son tan altos que tiene sentido usar algoritmos con peor complejidad en el tiempo pero factores constantes más pequeños, ya que le da una mejor expectativa tiempo de ejecución con una entrada pequeña, aunque ser superado horriblemente con mayor aporte.
Quizás un mejor ejemplo sería el clásico algoritmo de clasificación rápida, que tiene el peor tiempo de ejecución de O (n²) pero el tiempo de ejecución promedio esperado de O (n log n), independientemente de la entrada . Esto se debe a que el algoritmo usa (o mejor dicho, puede usar , según la implementación) la aleatorización. Entonces es un llamado algoritmo aleatorio . Funciona un poco diferente con cada invocación incluso con la misma entrada. Como tal, no hay una entrada universal en el peor de los casos para la implementación, porque la entrada en el peor de los casos depende de la forma en que el algoritmo elige el pivote para dividir la entrada dada. Y como tal, uno no puede simplemente proporcionar alguna entrada predefinida que causa el peor tiempo de ejecución. Este suele ser el caso con algoritmos aleatorios, que apuntan a un mejor tiempo de ejecución promedio esperado independientemente de la entrada.
Se trata de usar el algoritmo correcto para la entrada en cuestión.
fuente
El tiempo de ejecución esperado de un algoritmo aleatorio es un concepto bien definido, al igual que el peor tiempo de ejecución. Si un algoritmo es aleatorio, su tiempo de ejecución también es aleatorio, lo que significa que podemos definir el valor esperado de su tiempo de ejecución.
Un ejemplo bien conocido es Quicksort: si seleccionamos los pivotes al azar, podemos demostrar que su tiempo de ejecución esperado se convierte en O (n log n), a pesar de que su peor tiempo de ejecución sigue siendo O (n ^ 2). Un ejemplo en el que la aleatorización es muy poderosa es el problema más pequeño del círculo cerrado: hay un algoritmo simple cuyo peor tiempo de ejecución es O (n ^ 3), pero en expectativa, su tiempo de ejecución es solo O (n).
El tiempo de ejecución promedio generalmente se usa cuando se habla del comportamiento de un algoritmo 'para la mayoría de las entradas'. Definimos alguna forma de generar aleatoriamente una entrada, por ejemplo, llenamos una matriz con números aleatorios, o permutamos aleatoriamente los números del 1 al n (por lo que no hay duplicados), o lanzamos una moneda y obtenemos un conjunto descendente o ascendente de números. El tiempo de ejecución promedio de un algoritmo para esa distribución aleatoria de entradas es entonces el tiempo de ejecución esperado del algoritmo (en cuyo caso el algoritmo puede no ser aleatorio, pero la entrada sí lo es).
Como ejemplo: hay problemas geométricos para los cuales existen algoritmos que parecen funcionar bien a primera vista, hasta que descubres una forma muy extraña de distribuir, por ejemplo, las líneas de entrada. Si asume que las líneas están distribuidas al azar, entonces puede ser que estos escenarios extraños sean extremadamente improbables, por lo que su algoritmo termina siendo bueno.
Contraste: el tiempo de ejecución esperado se trata de cómo funciona un algoritmo 'a menos que tenga mala suerte': volver a intentar el mismo algoritmo en la misma entrada pero con diferentes opciones aleatorias puede hacer que se resuelva mucho más rápido. El tiempo de ejecución promedio habla sobre qué tan bien se desempeña un algoritmo 'para la mayoría de las entradas'; probar el mismo algoritmo nuevamente en la misma entrada no lo ayudará (excepto quizás si el algoritmo también es aleatorio).
fuente