Pourquoi dans le pire des cas le temps d'exécution du type d'insertion est-il n (n-1)/2 ~ n^2? mettant en évidence la division de 2?Type d'insertion dans le cas le plus défavorable
Répondre
Le temps d'exécution n'est pas
n(n-1)/2
, chaque étape nécessite plus de 1 la machine OP (dans toutes les machines, je suis au courant). C'est pourquoi nous habituellement utiliser big O notation et "ignorer" constantes dans les algorithmes analyse - nous voulons rendre notre analyse générique et la plate-forme indépendante.Le tri par insertion est analysé comme
n(n-1)/2 = O(n^2)
car il s'agit de sum of arithmetic progression. La première itération nécessite 1 étape, la deuxième 2 étapes, .. la nième nécessite n étapes, donc nous obtenons1 + 2 + ... + n = n(n-1)/2
de la somme de la progression arithmétique.
Introduction aux algorithmes donne les détails du tri par insertion dans le chapitre 2.1, qui traitent tout le processus de tri par insertion.
Le pire des cas est causé par le commutateur du sous-réseau dans l'ordre inverse.
Donc, j'ai pris le temps de lire le chapitre que vous avez suggéré .. Je suis même allé jusqu'à l'acheter. Vaut vraiment le coup. Ne pas mettre un négatif sur ce chapitre ne précise pas pourquoi la progression arithmétique est divisée par 2? – user1475421
C'est juste un résultat simple de la somme de la progression arithmétique qui est célèbre quand Gauss l'a résolu comme un enfant. –
Nous pouvons déduire l'expression comme ceci: additionner le premier et le dernier en tant que paire, puis sumer le second et le dernier mais un comme une paire, etc. Il est clair que toute la somme des paires est égale. Définissez la somme en tant que s1. Donc, pour obtenir la somme originale, nous pouvons répéter n fois s1 et diviser par 2, car nous répétons la somme originale une fois de plus. –
Je sais que cela a été fermé pour toujours, mais je voulais ajouter cela pour quelqu'un d'autre qui essaie de rafraîchir les mathématiques derrière le cas le plus défavorable. J'ai trouvé un grand video qui a expliqué le n (n-1)/2 formule ainsi:
Pour évaluer la somme de:
Vous devez d'abord déposer dans la notation de la série (appeler s):
s = 1 + 2 + 3 + ... n-3+n-2+n-1
montrent ensuite dans le sens inverse:
s = n-1+n-2+n-3+ ... 3 + 2 + 1
Ajouter s à s ensemble en ajoutant chaque paire et vous obtenez: n+n+n+....n+n+n
Ou en d'autres termes 2s = n(n-1)
parce que vous avez n, n-1 fois et il vous a fallu deux de ces ensembles pour l'obtenir.
Alors vous avez juste besoin de résoudre l'inégalité 2s = n(n-1)
qui vient à s = n(n-1)/2
.
- 1. Quelle est l'analyse de cas le plus défavorable de ce fragment de code?
- 2. Est-ce que l'analyse du cas le plus défavorable est correcte?
- 3. Quelle est la complexité du cas le plus défavorable pour un tri rapide?
- 4. Tri rapide Affaire la plus défavorable
- 5. Comment prouver le nombre le plus défavorable d'inversions dans un tas est Ω (nlogn)?
- 6. Complexité la plus défavorable de ce code dans C
- 7. PHP commutateur cas plus de 1 valeur dans le cas
- 8. Successeur et prédécesseur du temps d'exécution le plus défavorable dans les ensembles dynamiques
- 9. Le cas d'utilisation le plus approprié pour l'utilisation de java.lang.SecurityManager?
- 10. Connexion entre la complexité amortie et la complexité du temps le plus défavorable
- 11. Le pire des cas vs O (n)
- 12. Cas le plus simple de chargement d'une image via jQuery
- 13. Le type le plus rapide de la table de hachage
- 14. Cochez éventuellement le cas échéant un type de sécurité incomplet
- 15. Pourquoi le préprocesseur ne développe pas le type défini plus tard dans le code
- 16. CAS: « allowedAttributes » est invalide dans le CAS 4.2.1
- 17. Envoi du type MIME le plus correct
- 18. le type OCaml de l'opérateur plus
- 19. Comment sélectionner le cas lorsque plus de colonne pour l'insertion?
- 20. Le pire des cas Analyse Sur une boucle
- 21. Quels sont les cas d'utilisation justifiant le type 310 OffsetDate?
- 22. Le type le plus rapide pour la clé std :: map?
- 23. Vaut-il mieux renvoyer le type le plus spécifique ou le plus général d'une méthode d'action?
- 24. Conflit d'arborescence avec SVN, même dans le cas le plus simple possible
- 25. System.TypeLoadException - Méthode get _ *** dans le type *** de l'assembly *** n'a pas d'implémentation quand c'est le cas?
- 26. Comment définir plus précisément un type d'objet dans le temps?
- 27. le moyen le plus rapide pour randomiser le cas sur la chaîne
- 28. meilleur et le pire temps de complexité des cas
- 29. Le moyen le plus simple de changer la bordure d'un champ de texte en cas d'erreur
- 30. Comment utiliser les déclarations de type générique dans Java dans le cas expliqué?
Je comprends la partie de progression arithmétique, mais je ne comprends pas où la division par 2 s'inscrit? – user1475421
@ user1475421 la première itération itérative est 1 étape, la 2ème est 2 étapes, la 3rs est 3 étapes, ... le nième est n étapes, vous donnant total de '1 + 2 + 3 + ... + n' étapes , qui somme à 'n (n-1)/2'. Demandez-vous pourquoi "1 + 2 + ... + n' somme" n (n-1)/2'? – amit
Je comprends n (n-1) partie mais ne peux pas comprendre où la partie/2 s'inscrit? – user1475421