Heim  >  Artikel  >  Backend-Entwicklung  >  Warum hat Visual Studio 2015 für std::list::sort() von der Zusammenführungssortierung von unten nach oben auf die Zusammenführungssortierung von oben nach unten umgestellt?

Warum hat Visual Studio 2015 für std::list::sort() von der Zusammenführungssortierung von unten nach oben auf die Zusammenführungssortierung von oben nach unten umgestellt?

Linda Hamilton
Linda HamiltonOriginal
2024-10-31 03:28:30674Durchsuche

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

std::list::sort() – Warum der plötzliche Wechsel zur Top-Down-Strategie?

In Visual Studio 2015 ist die Die Implementierung von std::list::sort() erfuhr eine wesentliche Änderung von der klassischen Zusammenführungssortierung von unten nach oben zu einer Zusammenführungssortierung von oben nach unten. Diese Verschiebung führte zu einer offensichtlichen Ineffizienz, da für jede Rekursionsebene der Mittelpunkt der Liste ermittelt werden musste.

Gründe für die Änderung:

Jedoch wie in dokumentiert Mit dem bereitgestellten Update hat Microsoft Optimierungen vorgenommen, um die Fehlerbehebungen ohne Speicherzuweisung und Ausnahmesicherheit beizubehalten, die den ursprünglichen Wechsel zur Verwendung von Iteratoren motivierten. Insbesondere die rekursive Implementierung:

  • Verwendet eine effiziente Zusammenführungssortierung, die die Liste auf jeder Rekursionsebene durch 2 teilt, anstatt die Liste zu scannen.
  • Kehrt stattdessen wieder zur Verwendung von Zeigern zurück von Iteratoren, was möglicherweise die Leistung verbessert.
  • Implementiert Spleißlogik, um das Zusammenführen mehrerer Knoten gleichzeitig zu verbessern.

Vergleich mit der Bottom-Up-Merge-Sortierung:

Trotz der Optimierungen kann der Top-Down-Ansatz immer noch langsamer sein als die Bottom-Up-Merge-Sortierung, wenn es um große, verstreute verknüpfte Listen geht, da es häufiger zu Cache-Fehlern kommt.

Alternative Implementierung:

Es wird eine alternative Implementierung bereitgestellt, die den Bottom-Up-Merge-Sortier-Ansatz beibehält und gleichzeitig Iteratoren anstelle eines Arrays von Listen verwendet. Dieser Ansatz zielt darauf ab, den Leistungseinbruch zu vermeiden, der dadurch entsteht, dass bei der Rekursion immer der Mittelpunkt der Liste gefunden werden muss.

Fazit:

Der Wechsel zu einer Top-Down-Zusammenführungssortierung in Visual Studio 2015 entstand nicht aus einer Laune heraus. Microsoft hat Optimierungen implementiert, um potenzielle Ineffizienzen zu beheben und gleichzeitig die Vorteile der Ausnahmesicherheit und der Reduzierung der Speicherzuweisung beizubehalten. Bei großen, dünn besiedelten verknüpften Listen kann jedoch ein Bottom-up-Zusammenführungssortierungsansatz immer noch eine bessere Leistung liefern.

Das obige ist der detaillierte Inhalt vonWarum hat Visual Studio 2015 für std::list::sort() von der Zusammenführungssortierung von unten nach oben auf die Zusammenführungssortierung von oben nach unten umgestellt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn