Visual Studio 2015 で std::list::sort() のマージ ソートがボトムアップからトップダウンに切り替わったのはなぜですか?

Linda Hamilton
リリース: 2024-10-31 03:28:30
オリジナル
673 人が閲覧しました

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

std::list::sort() - なぜトップダウン戦略に突然切り替えたのでしょうか?

Visual Studio 2015 では、 std::list::sort() の実装は、従来のボトムアップ マージ ソートからトップダウン マージ ソートに大幅に変更されました。この変更により、再帰の各レベルでリストの中点を見つける必要があるため、明らかな非効率が生じました。

変更の理由:

ただし、次の文書に記載されているように、提供された更新プログラムにより、Microsoft はイテレータの使用への最初の変更の動機となったメモリ割り当てなしと例外安全修正を維持するための最適化を行いました。具体的には、再帰的実装:

  • リストをスキャンする代わりに、再帰の各レベルでリストを 2 で分割する効率的なマージ ソートを使用します。
  • 代わりにポインターの使用に戻ります。
  • 一度に複数のノードのマージを改善するためにスプライス ロジックを実装します。

ボトムアップ マージ ソートとの比較:

最適化にもかかわらず、トップダウンのアプローチは依然としてボトムアップよりも遅くなる可能性があります。 -up キャッシュの増加により大きく分散したリンク リストを処理する場合のマージ ソート

代替実装:

リストの配列の代わりに反復子を使用しながら、ボトムアップのマージ ソート アプローチを維持する代替実装が提供されます。このアプローチは、再帰中に常にリストの中間点を見つける必要があることによるパフォーマンスへの影響を回避することを目的としています。

結論:

Visual でのトップダウン マージ ソートへの切り替えStudio 2015 は思いつきで作られたわけではありません。 Microsoft は、例外安全性の利点を維持し、メモリ割り当てを削減しながら、潜在的な非効率性に対処する最適化を実装しました。ただし、大規模で人口がまばらなリンク リストの場合は、ボトムアップのマージ ソート アプローチの方がパフォーマンスが向上する可能性があります。

以上がVisual Studio 2015 で std::list::sort() のマージ ソートがボトムアップからトップダウンに切り替わったのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!