¿Se puede ordenar una lista de números en un número menor de pases que el indicado por la notación Big-O?

Su pregunta destaca la diferencia entre la complejidad del peor de los casos y la mejor de las mejores. La complejidad en el peor de los casos de un algoritmo es [matemática] f (n) [/ matemática] si el algoritmo utilizará como máximo [matemática] f (n) [/ matemática] pasos en cualquier entrada de tamaño [matemática] n [/ mates]. La complejidad del mejor caso de un algoritmo es [matemática] f (n) [/ matemática] si el número mínimo de pasos que utilizará el algoritmo en cualquier entrada de tamaño [matemática] n [/ matemática] es [matemática] f ( n) [/ matemáticas]. Muy a menudo, estas dos medidas de complejidad no coinciden.

Hablando estrictamente, su pregunta puede ser respondida sin usar la notación O grande. La notación Big-O es una notación para medir la tasa de crecimiento asintótico de las funciones de valor real sobre los números naturales y es anterior a la teoría de la complejidad computacional por varias décadas. De hecho, esta notación se desarrolló en el marco de la teoría analítica de números; Fue introducido por los matemáticos alemanes Paul Bachmann y Edmund Landau antes de la Primera Guerra Mundial.

En la teoría de la complejidad computacional, las medidas de complejidad son casi siempre funciones de valor real sobre los números naturales, y es por eso que la notación O grande se ha convertido en el enfoque estándar para medir las tasas de crecimiento.

Hay algunas ideas erróneas con respecto a la notación O grande y lo que realmente significa que un algoritmo tiene complejidad O (f (n)).

En primer lugar, la notación no tiene en cuenta factores como el almacenamiento en caché, el tiempo de acceso a la memoria, etc.

Además, no dice con precisión cuánto tiempo llevará completar un algoritmo; solo proporciona un límite superior como relación. Eso significa que para bubbleort, duplicar el tamaño de entrada cuadruplicará (en lugar de duplicar) el tiempo de ejecución.

Finalmente, el límite superior solo puede contener (arbitrariamente) grandes tamaños de entrada.

Entonces, en total, en una computadora real , para un tamaño de entrada pequeño, la respuesta es sí, es completamente posible que un algoritmo pueda tener un tiempo de ejecución que “viole” la notación O grande.

SÍ, puede tener un tiempo de ejecución más rápido de lo que dicta la notación big-O. Big-O es un límite superior asintótico, que significa para entradas GRANDES, que es aproximadamente qué tan rápido, a lo sumo, el algoritmo se ejecuta hasta un multiplicador constante y una suma de términos más pequeños de crecimiento más lento. (EG, [matemáticas] .5 N ^ 2 + N – log (N) = O (N ^ 2) = O (N ^ 3) [/ matemáticas])

¡Espera, hay más! Hay algo llamado big-theta, que establece un asintótico EXACTO unido a una constante. Entonces, incluso entonces, si la función se ejecuta en [matemática] .5 N [/ matemática], es decir [matemática] \ Theta (N) [/ matemática] asintóticamente. ¡Dado eso, se ejecutaría en la mitad del tiempo de lo que diría la notación big-theta (o, incluso, qué big-O) diría!

La notación es una indicación del peor caso posible. En un algoritmo O (N), en el peor de los casos, tendrás que hacer algo N veces. En el mejor de los casos, es posible que solo tenga que hacer la cosa una vez, pero eso * no * significa que el algoritmo es O (1) en general. Sin embargo, un tipo de burbuja no optimizado siempre será O (N ^ 2) por naturaleza de los bucles utilizados:

para (0 para (0 hacer algo con la colección

Debería ser obvio que “hacer algo con la colección” se ejecuta N ^ 2 veces.

Mucha más información sobre el tipo de burbuja.

La notación Big-O es una forma de describir hechos. No impone ningún límite en sí mismo.

La notación Big-O describe un límite superior a medida que crece el número de . Cualquier función que sea O (n) también es O (n ^ 2), aunque si la describe así a las personas, pensarán que está equivocado y le preguntarán por qué no acaba de decir O (n).

Para la ordenación de burbujas en particular, puede comenzar con elementos que están ordenados (por suerte) y poder decir que todos están ordenados en una sola pasada. Eso significa que esto es O (n) para datos ya ordenados. Para el peor de los casos, estás haciendo mucho más comparación / intercambio que eso.

Para los algoritmos en general, puede haber un O () diferente para el peor de los casos, el mejor de los casos, el caso típico, etc. No tiene que haber un solo O () para todo el algoritmo. También puede especificar la complejidad en términos de tiempo o espacio.

Por definición, no puede ser más rápido que el mejor de los casos.

A Dijkstra se le ocurrió un algoritmo de clasificación que tiene una complejidad más cercana a la lineal si la lista está más cerca de ser ordenada.

Smoothsort

PD: la notación big-oh solo dicta el comportamiento hasta una constante. Por lo tanto, no puede razonar a partir de un solo ejemplo.

  • La notación O grande es solo una notación para el comportamiento asintótico de una función, no “declara” nada sobre listas de números de clasificación de burbujas bubble
  • Big O es un límite superior, por lo que si dice “bubbleort utiliza O (2 ^ n) pasa sobre la matriz”, entonces eso es cierto a pesar de que también es O (n). Y si usted dice, “el tipo de burbuja tiene O (n) pasa”, eso también es cierto incluso si para algunas entradas es menor que eso.

More Interesting

¿Qué es el algoritmo de soporte?

¿Dónde puedo encontrar a alguien dispuesto a enseñarme estructura de datos y algoritmos de forma gratuita o a un costo muy barato?

1,000 participantes toman un examen que consta de 100 preguntas y 5 opciones por pregunta. ¿Cuál es el mejor enfoque (algoritmo) para encontrar todos los pares posibles de participantes con al menos un 80% de coincidencia en las opciones que eligieron?

¿Qué algoritmo usa Google Knowledge Graph? ¿Con qué precisión funciona?

¿Cuál es la diferencia entre la implementación de HPLC y FTIR?

Creamos un algoritmo de software único para medir / cuantificar las diferencias de las imágenes a escala nano-planetaria. ¿Cómo monetizamos esto?

¿Qué tecnología utiliza X ?: ¿Cómo implementan las empresas de análisis (Mixpanel, KISSMetrics, etc.) el análisis de embudos?

Dado que solo quedan 2 meses para las regiones regionales de ACM ICPC, ¿cuántos problemas podría resolver allí si comenzara a practicar ahora, teniendo solo la idea más básica sobre algoritmos?

Si usamos un algoritmo np para el problema del vendedor ambulante donde la gente va en cada ruta. ¿Por qué hay 2 ^ n personas en total? ¿Es porque una persona está viajando una ruta o no está viajando una ruta?

Cómo escribir algoritmos de mapas de ruta como Google Maps

¿Podemos implementar la estructura de datos de la cola usando la estructura de datos de la pila?

¿Cuál es el curso / certificación mejor pagado disponible para estructuras de datos y algoritmo?

¿Por qué a la mayoría de la gente le cuesta resolver problemas de algoritmos?

¿Qué es una explicación intuitiva de la complejidad del tiempo de ejecución del algoritmo?

¿Cuáles son los algoritmos propuestos para la detección de revisiones falsas en el análisis de sentimientos?