Comment les algorithmes sont-ils analysés? Qu'est-ce qui fait que quicksort a une performance O(n^2)
dans le pire des cas alors que le tri par fusion a une performance O(n log(n))
dans le pire des cas?Analyse des algorithmes (complexité)
Répondre
C'est un sujet pour tout un semestre. En fin de compte, nous parlons de la limite supérieure du nombre d'opérations qui doivent être terminées avant que l'algorithme se termine en fonction de la taille de l'entrée. Nous n'incluons pas les coefficients (ie 10N vs 4N^2) car pour N assez grand, cela n'a plus d'importance.
Comment prouver ce qu'est le big-oh d'un algorithme peut être assez difficile. Cela nécessite une preuve formelle et il y a beaucoup de techniques. Souvent, un bon moyen ad hoc est de simplement compter combien de passes sur les données de l'algorithme. Par exemple, si votre algorithme est imbriqué pour des boucles, alors pour N éléments, vous devez opérer N fois. Ce serait généralement O (N^2). Pour fusionner le tri, vous divisez les données de moitié à plusieurs reprises. Cela prend log2 (n). Et pour chaque division, vous faites un passage sur les données, ce qui donne N log (n).
Le tri rapide est un peu plus délicat car, dans le cas moyen, il s'agit également de n log (n). Vous devez imaginer ce qui se passe si votre partition divise les données de telle sorte que chaque fois que vous obtenez un seul élément d'un côté de la partition. Ensuite, vous aurez besoin de diviser les données n fois au lieu de log (n) fois ce qui le rend N^2. L'avantage de quicksort est qu'il peut être fait en place, et que nous nous rapprochons habituellement des performances de N log (n).
Les deux quicksort et merge sort divisent le tableau en deux, trient chaque partie récursivement, puis combinent le résultat. Quicksort se sépare en choisissant un élément "pivot" et en partitionnant le tableau en plus petit ou plus grand que le pivot. Fusionner le tri de manière arbitraire, puis fusionner les résultats en temps linéaire. Dans les deux cas, une seule étape est O (n), et si la taille du tableau est divisée par deux, cela donnerait un nombre de pas logarithmique. Nous attendrions donc O (n log (n)).
Cependant, le tri rapide a le pire des cas où la division est toujours inégale, donc vous n'obtenez pas un nombre de pas proportionnel au logarithmique de n, mais un nombre de pas proportionnel à n. Fusionner le tri se divise exactement en deux moitiés (ou le plus près possible) afin qu'il n'a pas ce problème.
- tri rapide a de nombreuses variantes en fonction de sélection de pivot
- Supposons que nous choisissons toujours 1er élément du tableau comme un pivot
Si le tableau d'entrée est triée puis tri rapide sera seulement genre de tri de sélection! Parce que vous ne divisez pas vraiment le tableau .. vous ne choisissez que le premier élément dans chaque cycle
D'un autre côté, le tri par fusion divisera toujours le tableau d'entrée de la même manière, quel que soit son contenu!
A noter également: les meilleures performances en division et en conquête lorsque les divisions sont sensiblement égales!
Ceci est une analyse préliminaire des matériaux de cours d'algorithmes.
Une opération est définie (c'est-à-dire une multiplication) et l'analyse est effectuée en termes d'espace ou de temps.
Cette opération est comptabilisée en termes d'espace ou de temps.Généralement, les analyses sont effectuées en tant que variable dépendante de la taille d'entrée.
Exemple pseudocode:
foreach $elem in @list
op();
endfor
Il y aura n opérations effectuées, où n est la taille de @list
. Comptez-le vous-même si vous ne me croyez pas.
Pour analyser quicksort et mergesort nécessite un niveau décent de ce qui est connu comme la sophistication mathématique. Lâche, vous résolvez une équation différentielle discrète dérivée de la relation récursive.
- 1. Analyse complexité de l'image
- 2. Grande complexité pour les algorithmes logarithmiques
- 3. Analyse de performance pour les algorithmes sur les dispositifs embarqués
- 4. Efficacité spatiale des algorithmes
- 5. Staff Alignement des algorithmes
- 6. exercice complexité de calcul
- 7. Big O complexité des opérations arithmétiques de base
- 8. Quelle est la base du logarithme aux fins des algorithmes?
- 9. Efficacité des algorithmes d'allocation de registre
- 10. Big O Notation Devoirs - Analyse des algorithmes de fragment de code?
- 11. Analyse des données de l'accéléromètre
- 12. trouver la complexité temporelle de la relation de récurrence dans les algorithmes
- 13. Algorithmes de traitement des pixels
- 14. Algorithmes de déduplication des données
- 15. complexité algorithme
- 16. Big-O complexité du temps
- 17. Des algorithmes intelligents pour diffuser des annonces
- 18. complexité preuve
- 19. Kolmogorov complexité
- 20. Complexité des types de services Web
- 21. Exécuter des algorithmes dynamiques dans AS3
- 22. tdd avec des algorithmes non triviaux
- 23. Algorithmes pour l'espacement visuel des objets
- 24. Hiérarchie hiérarchique des algorithmes de recherche?
- 25. Tricky Big-O complexité
- 26. Complexité de STL max_element
- 27. Analyse des chaînes DateTime
- 28. analyse des mesures css
- 29. Analyse des URL
- 30. Analyse des chaînes DateTime
L'addition de la façon dont l'opération est comptée est importante. J'ai augmenté le score sur cette «réponse». – mozillanerd