Maison > développement back-end > C++ > le corps du texte

Pourquoi Visual Studio 2015 est-il passé du tri par fusion ascendant au tri descendant pour std::list::sort() ?

Linda Hamilton
Libérer: 2024-10-31 03:28:30
original
672 Les gens l'ont consulté

Why did Visual Studio 2015 switch from bottom-up to top-down merge sort for std::list::sort()?

std::list::sort() - Pourquoi le passage soudain à une stratégie descendante ?

Dans Visual Studio 2015, le l'implémentation de std::list::sort() a subi un changement significatif du tri par fusion ascendant classique à un tri par fusion descendant. Ce changement a introduit une inefficacité apparente en exigeant que le point médian de la liste soit trouvé pour chaque niveau de récursion.

Raisons du changement :

Cependant, comme indiqué dans Avec la mise à jour fournie, Microsoft a effectué des optimisations pour préserver les correctifs de sécurité sans allocation de mémoire et les exceptions qui ont motivé le changement initial vers l'utilisation d'itérateurs. Plus précisément, l'implémentation récursive :

  • Utilise un tri par fusion efficace qui divise la liste par 2 à chaque niveau de récursion, au lieu d'analyser la liste.
  • Revient à l'utilisation de pointeurs à la place d'itérateurs, améliorant potentiellement les performances.
  • Implémente une logique d'épissage pour améliorer la fusion de plusieurs nœuds à la fois.

Comparaison avec le tri par fusion ascendante :

Malgré les optimisations, l'approche descendante peut toujours être plus lente que le tri par fusion ascendant lorsqu'il s'agit de listes chaînées volumineuses et dispersées en raison de l'augmentation des échecs de cache.

Implémentation alternative :

Une implémentation alternative est fournie qui conserve l'approche de tri par fusion ascendante tout en utilisant des itérateurs au lieu d'un tableau de listes. Cette approche vise à éviter les problèmes de performances liés à la nécessité de toujours trouver le point médian de la liste lors de la récursivité.

Conclusion :

Le passage à un tri par fusion descendant dans Visual Studio 2015 n’a pas été réalisé sur un coup de tête. Microsoft a mis en œuvre des optimisations pour remédier aux inefficacités potentielles, tout en conservant les avantages de la sécurité des exceptions et en réduisant l'allocation de mémoire. Cependant, pour les listes chaînées volumineuses et peu peuplées, une approche de tri par fusion ascendante peut toujours offrir de meilleures performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!