Los problemas computacionales se describen como un conjunto (típicamente para problemas no triviales, es infinito). Desea capturar el comportamiento del algoritmo para cada instancia del problema que el algoritmo busca resolver. Como algunos podrían decir, podría decirle cómo funciona el algoritmo para entradas grandes, pero realmente se trata más de capturar la complejidad de tiempo del algoritmo para todas las instancias (recuerde, hay infinitas muchas que serán muy grandes donde las constantes no incluso importa con respecto a la entrada). En la práctica, puede que solo le interese un subconjunto de las instancias del problema (por ejemplo, cuando las entradas son pequeñas).
Asumiré que está utilizando estas notaciones asintóticas de manera adecuada en función de su análisis (pero en realidad, podría usar cualquiera de ellas para cualquier tipo de análisis). El tipo de análisis (el peor de los casos, el mejor de los casos, el caso promedio) es fácilmente más importante, así que tenga cuidado con esto ya que no hay “uno” para cada tipo; Este es un error común que cometen los estudiantes de pregrado de CS.
Como dije anteriormente, captura el comportamiento del algoritmo para todas las instancias . Eso significa que podría comparar su algoritmo de manera estándar con otros algoritmos dependiendo del análisis que realizó. Además, no depende de la máquina . Esta es una de las principales razones por las que esta notación es útil. Las personas que trabajan en Algoritmos comparan algoritmos de esta manera y los clasifican en clases usando este tipo de asintóticos. Los algoritmos en sí son matemáticos, por lo que los clasificamos matemáticamente según la naturaleza de los problemas que estudiamos. Si está buscando implementar algún algoritmo, es crucial tenerlo en cuenta.
- Si eligiera un número al azar en la recta numérica, ¿tendría mayores posibilidades de ser racional o irracional?
- ¿Alguien necesita ser bueno en matemáticas para ser un buen programador de computadoras?
- ¿Qué quiere decir uno con "Cada base es base 10"?
- ¿Por qué este bucle, usado para agregar caracteres adyacentes en un vector, produce una salida extraña?
- ¿Cuál es la negación de min y max?
Tenga en cuenta que también podemos clasificar los problemas en función de la notación asintótica. Un ejemplo clásico de esto es el límite inferior conocido [math] \ Omega (n \ log n) [/ math] en la clasificación basada en la comparación. Esto significa asintóticamente que ningún algoritmo que realice comparaciones intercambiando el problema de clasificación puede hacerlo mejor que [math] \ Omega (n \ log n) [/ math].
Tenga en cuenta que he sido exclusivo para la comparación de algoritmos anteriores, pero es importante tener en cuenta esta notación en general (ya que no es exclusiva para analizar algoritmos). En general, estos son conjuntos de funciones de crecimiento. Pueden permitirle clasificar funciones de crecimiento e indicar tendencias en su análisis (que es su uso original, y todavía se usa de esta manera en áreas como la teoría analítica de números).