¿Cómo se analizan los algoritmos? ¿Qué hace que quicksort tenga un rendimiento en el peor de los casos O(n^2)
mientras que merge sort tiene un peor rendimiento en el O(n log(n))
?Análisis de algoritmos (complejidad)
Respuesta
Ese es un tema para todo un semestre. En definitiva, estamos hablando del límite superior en el número de operaciones que deben completarse antes de que el algoritmo finalice en función del tamaño de la entrada. No incluimos los coeficientes (es decir, 10N vs 4N^2) porque para N es lo suficientemente grande, ya no importa.
Cómo demostrar lo que es el gran oh de un algoritmo puede ser bastante difícil. Requiere una prueba formal y hay muchas técnicas. A menudo, una buena forma ad hoc es simplemente contar cuántos pases de datos hace el algoritmo. Por ejemplo, si su algoritmo ha anidado bucles, entonces para cada uno de los N elementos debe operar N veces. Eso generalmente sería O (N^2).
En cuanto a la clase de fusión, divide los datos por la mitad una y otra vez. Eso requiere log2 (n). Y para cada división haces un pase en los datos, lo que da N log (n).
ordenar rápidamente es un poco más complicado porque en el caso promedio también es n log (n). Debe imaginarse qué sucede si su partición divide los datos de tal forma que cada vez que obtiene solo un elemento en un lado de la partición. Luego deberá dividir los datos n veces en lugar de registrar (n) veces, lo que lo convierte en N^2. La ventaja del quicksort es que se puede implementar y que, por lo general, nos acercamos más al rendimiento de N log (n).
quicksort y merge sort dividen la matriz en dos, ordene cada parte recursivamente, luego combine el resultado. Quicksort se divide al elegir un elemento "pivote" y dividir la matriz en más pequeña o más grande que el pivote. Merge sort se divide arbitrariamente y luego combina los resultados en tiempo lineal. En ambos casos, un solo paso es O (n), y si el tamaño de la matriz se reduce a la mitad cada vez, esto daría un número logarítmico de pasos. Entonces, esperaríamos O (n log (n)).
Sin embargo, el quicksort tiene el peor caso en el que la división es siempre desigual, por lo que no obtendrá una cantidad de pasos proporcionales a la logarítmica de n, sino una cantidad de pasos proporcionales a n. Merge sort se divide exactamente en dos mitades (o lo más cerca posible) por lo que no tiene este problema.
- ordenamiento rápido tiene muchas variantes en función de selección de pivotes
- Asumamos siempre seleccionamos primero elemento de la matriz como pivote
Si la matriz de entrada se ordena a continuación, ordenar rápida será sólo será tipo de selección tipo! Porque no está realmente dividiendo la matriz ... solo está seleccionando el primer artículo en cada ciclo
Por otro lado, merge sort siempre dividirá la matriz de entrada de la misma manera, independientemente de su contenido.
También tenga en cuenta: el mejor rendimiento en dividir y conquistar cuando las divisiones de longitud son casi iguales!
Este es un análisis introductorio del material del curso de algoritmos.
Se define una operación (es decir, multiplicación) y el análisis se realiza en términos de espacio o tiempo.
Esta operación se cuenta en términos de espacio o tiempo.Por lo general, los análisis se realizan como Tiempo siendo la variable dependiente del Tamaño de entrada.
Ejemplo pseudocódigo:
foreach $elem in @list
op();
endfor
Habrá n operaciones realizadas, donde n es el tamaño de @list
. Cuente usted mismo si no me cree.
Para analizar quicksort y mergesort se requiere un nivel decente de lo que se conoce como sofisticación matemática. Sin apretar, se resuelve una ecuación diferencial discreta derivada de la relación recursiva.
- 1. Analizando algoritmos para la complejidad del tiempo
- 2. Análisis de la complejidad de la imagen
- 3. Complejidad de algoritmos de diferentes paradigmas de programación
- 4. base de logaritmos en algoritmos de complejidad de tiempo
- 5. Herramientas de análisis de complejidad de código más allá de la complejidad ciclomática
- 6. Algoritmos para Big O Analysis
- 7. Diferentes algoritmos de árbol de decisión con comparación de complejidad o rendimiento
- 8. Recurso sobre la complejidad del tiempo de cálculo de los algoritmos
- 9. Solicitud de libro: algoritmos distribuidos
- 10. Algoritmos de detección de acordes?
- 11. Complejidad de los lenguajes de programación
- 12. ¿Hay alguna herramienta que pueda determinar realizar análisis de código para la complejidad de Big-O?
- 13. ¿Cómo calcular la complejidad exacta de un algoritmo?
- 14. estructuras de datos y algoritmos e-books
- 15. Object.keys() complejidad?
- 16. Intersección complejidad
- 17. Algoritmos o bibliotecas para análisis textual, específicamente: palabras dominantes, frases en texto y colección de texto
- 18. Diferencia entre "complejidad" métrico y "complejidad/método de la" métrica
- 19. Cálculo de Complejidad ciclomática
- 20. Complejidad de tiempo
- 21. complejidad de set :: inserción
- 22. complejidad de cálculo
- 23. Algoritmos: interesante algoritmo de diferencia
- 24. Gran O complejidad de las operaciones aritméticas básicas
- 25. OOP vs PP para los algoritmos
- 26. Algoritmos genéticos
- 27. algoritmos Diff
- 28. C: Clasificación Métodos de Análisis
- 29. Comparar algoritmos de similitud
- 30. Algoritmos de gráfico incremental
La adición de cómo se cuenta la operación es importante. Aumenté el puntaje en esta 'respuesta'. – mozillanerd