std::list::sort() - なぜトップダウン戦略に突然切り替えたのでしょうか?
Visual Studio 2015 では、 std::list::sort() の実装は、従来のボトムアップ マージ ソートからトップダウン マージ ソートに大幅に変更されました。この変更により、再帰の各レベルでリストの中点を見つける必要があるため、明らかな非効率が生じました。
変更の理由:
ただし、次の文書に記載されているように、提供された更新プログラムにより、Microsoft はイテレータの使用への最初の変更の動機となったメモリ割り当てなしと例外安全修正を維持するための最適化を行いました。具体的には、再帰的実装:
ボトムアップ マージ ソートとの比較:
最適化にもかかわらず、トップダウンのアプローチは依然としてボトムアップよりも遅くなる可能性があります。 -up キャッシュの増加により大きく分散したリンク リストを処理する場合のマージ ソート
代替実装:
リストの配列の代わりに反復子を使用しながら、ボトムアップのマージ ソート アプローチを維持する代替実装が提供されます。このアプローチは、再帰中に常にリストの中間点を見つける必要があることによるパフォーマンスへの影響を回避することを目的としています。
結論:
Visual でのトップダウン マージ ソートへの切り替えStudio 2015 は思いつきで作られたわけではありません。 Microsoft は、例外安全性の利点を維持し、メモリ割り当てを削減しながら、潜在的な非効率性に対処する最適化を実装しました。ただし、大規模で人口がまばらなリンク リストの場合は、ボトムアップのマージ ソート アプローチの方がパフォーマンスが向上する可能性があります。
以上がVisual Studio 2015 で std::list::sort() のマージ ソートがボトムアップからトップダウンに切り替わったのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。