1

マージソートはかなり一般的なソート アルゴリズムであり、実際に動作するマージソート アルゴリズムを作成しました。それから私はそれを最適化したい。最初のステップは、それを再帰から反復に変換することでした。次に、他に最適化できるものを識別できませんでした。インターネット上の多くの記事を調べた後、multi-merge sort とtiled merge-sortを使用する 2 つのメカニズムを取得しました。しかし、どのドキュメントも疑似コードを提供しておらず、それを行う方法について多くを説明する気さえありませんでした.キャッシュフレンドリーでローカリティヒットの改善など、著者が言う利点をどのように提供するか.

誰でもこの問題について詳しく説明できますか?可能であれば、疑似コードを提供できますか? 具体的には、キャッシュフレンドリーにする方法を知りたいです。これらが何であるかはまったくわかりません。そうでなければ、自分で試してみたでしょう。

4

1 に答える 1

1

実行できる一般的で比較的簡単な最適化の 1 つは、部分配列のサイズが特定のしきい値を下回ったときに、マージソートから挿入ソートなどの別のアルゴリズムに切り替えることです。マージソートは O(n log n) の時間で実行されますが、それはその長期的な成長率を示しており、アルゴリズムが小さな入力に対してどれだけうまく機能するかについては何も言いません。たとえば、挿入ソートは、長期的には悪化しますが、小さな入力サイズではかなり高速に実行されます。したがって、並べ替える配列が特定のサイズのしきい値 (50 ~ 100 など) を下回る場合は、再帰を続行するのではなく、挿入並べ替えを使用するように、マージソートの基本ケースを変更することを検討してください。経験上、これによりアルゴリズムのパフォーマンスが著しく向上します。

于 2015-08-26T18:03:20.227 に答える