Desde el punto de vista del comportamiento asintótico, ¿qué se considera un algoritmo "eficiente"? ¿Cuál es el estándar / razón para dibujar la línea en ese punto? Personalmente, pensaría que cualquier cosa que sea ingenuamente llamaría "subpolinomio", de modo que como sería eficiente y cualquier cosa que sea sería "ineficiente". Sin embargo, he escuchado que todo lo que sea de cualquier orden polinómico se llama eficiente. ¿Cuál es el razonamiento?n 1 + ϵ Ω ( n 2 )
algorithms
terminology
asymptotics
landau-notation
Robert S. Barnes
fuente
fuente
Respuestas:
Eso depende del contexto. En informática teórica, generalmente cada algoritmo de tiempo polinómico se considera "eficiente". En algoritmos de aproximación, por ejemplo, un tiempo de ejecución de se consideraría eficiente, aunque en la práctica no se podrá utilizar para ningún valor razonable de . Un algoritmo para SAT que se ejecuta en sería un avance sorprendente. ϵ n 2 100norte1 / ϵ1 / ϵ ϵ norte2100
En algoritmos clásicos, es decir, algoritmos de los años 80 y anteriores, los tiempos de ejecución inferiores a o menos (piense en la multiplicación de matrices, la coincidencia de costos mínimos, los flujos, la programación lineal) se consideran eficientes. Todavía son considerados eficientes por la mayoría de las personas, diría. Por supuesto, un algoritmo no se considera eficiente si se conoce un algoritmo , como por ejemplo para la clasificación.n 2 n log nnorte3 norte2 n lognorte
Hoy en día existe una tendencia hacia algoritmos sublineales o algoritmos de transmisión que pueden manejar terabytes de datos. Intente usar la multiplicación de matrices para calcular el rango de página de todas las páginas en el índice de Google. Eso no funcionará.
Por supuesto, aunque ciertamente es útil, el tiempo de ejecución asintótico de un algoritmo no cuenta toda la historia. Hay algoritmos que tienen un buen tiempo de ejecución asintótico, pero constantes que son tan grandes que efectivamente no se pueden usar. Siempre. Lipton los llama Algoritmos Galácticos . Robert Sedgewick incluso afirma que los límites del peor de los casos son "a menudo inútiles para la predicción, a menudo inútiles para las garantías" y "el análisis del peor de los casos es inútil para predecir el rendimiento" en su discurso Poniendo la ciencia de nuevo en informática .
fuente
Mis 2 centavos desde el ángulo de los algoritmos distribuidos: cuando se observan redes a gran escala (P2P, redes sociales, etc.), un algoritmo distribuido se considera eficiente si su tiempo de ejecución es para alguna constante c > 0 y el algoritmo utiliza mensajes de bits O ( log n ) . Tenga en cuenta que el requisito sobre el tamaño de los mensajes suele tener incluso más importancia que el tiempo de ejecución, en particular para problemas "globales" que tienen un límite inferior más grande en el tiempo de ejecución, por ejemplo, MST distribuido.O ( logCn ) c > 0 O ( logn )
fuente
El razonamiento detrás es que, desde la perspectiva del comportamiento asintótico, una tasa de crecimiento polinomial es trivialmente menor que una tasa de crecimiento superpolinomial. En la práctica, un algoritmo de tiempo polinomial se ejecuta mucho más rápido que un algoritmo de tiempo superpolinomial cuando aumenta el tamaño de entrada.
Por supuesto, nadie diría que un algoritmo con una complejidad polinómica de, por ejemplo, es "eficiente", pero la mayoría de los algoritmos rara vez excede una complejidad de O ( n 5 ) .O ( n2000) O ( n5 5)
fuente
En teoría, se dice que un algoritmo es eficiente si su peor tiempo de ejecución está limitado por un polinomio en su longitud de entrada. El razonamiento es que los polinomios tienen buenas propiedades de cierre. Agregar, multiplicar y componer polinomios son operaciones que producen polinomios y son buenas si se reducen los problemas entre sí.
Por supuesto, la brecha entre polinomio y exponencial se vuelve muy grande a medida que aumenta la longitud de entrada, por lo que los algoritmos de tiempo polinomial son mucho mejores. En la práctica, un algoritmo de tiempo polinómico puede tardar mucho tiempo antes de la terminación, pero podría ser el caso de que sea un algoritmo óptimo (el mejor posible), en cuyo caso diría que es eficiente.
fuente
fuente