さて、Mergesortはシータ(NlogN)の最悪の時間を持っていますが、そのオーバーヘッドは高く、マージが行われた再帰ツリーの最下部付近に現れます。誰かが、サイズがKに達した時点で再帰を停止し、その時点で挿入ソートに切り替えるよう提案しました。この修正された反復関係の実行時間がシータ(NK + Nlog(N/k))であることを証明する必要がありますか?私はこの問題に近づく方法については空白にしています。最適化されたmergesortの証明実行時間はtheta(NK + Nlog(N/K))ですか?
5
A
答えて
3
この問題の再帰関係を見てみるとよいでしょう。私はそれがこのようになります典型的なマージソートのために想像:あなたは半分の大きさの2つの部分問題に問題を分割して、Nの仕事(マージ)を実行している
T(N) = 2 * T(N/2) + N
すなわち。私たちは、一定の時間がかかる基本ケースを持っています。
我々が持っている木としてこれをモデル化:
T(N) = N -> T(N/2)
-> T(N/2)
= N -> (N/2) -> T(N/4)
-> T(N/4)
-> (N/2) -> T(N/4)
-> T(N/4)
これには、本当に私たちはちょうどそれがどのようになるの深い参照してくださいする必要があり
T(N) = N + 2N/2 + 4N/4 + ...
= N + N + N ...
の拡張を提供します。我々は、i
レベルがサブ問題N/2^i
のサイズで動作することを知っています。だから、私たちのリーフノード(T(1)
)N/2^L = 1
場所レベルL
に発生します。
N/2^L = 1
N = 2^L
log N = log(2^L)
log N = L
だから、私たちのランタイムがN log N
です。
ここで、挿入ソートを紹介します。私たちのツリーは言い換えれば、この
T(N) = ... -> I(K)
-> I(K)
...x N/K
ようになります、我々はいくつかのレベルでL
はサイズK
のN/K
挿入ソートの問題を解決する必要があります。挿入ソートの最悪実行時間はK^2
です。だから我々は、合計でこれだけの作品を持っている葉で:前に説明したように
(N/K) * I(K)
= (N/K) * K * K
= N * K
しかし、我々はまた、ツリーのレベルごとN
の費用で、同様に行うために合併の束を持っています。バック私たちの以前の方法になるだろう、のは(私たちはサイズK
の部分問題に到達する前にレベルの数、したがって、挿入に切り替える)L
を見つけてみましょう:合計で
N/2^L = K
N/K = 2^L
L = log (N/K)
だから我々は
O(N) = N * K + N * log (N/K)
それがされています持っていますあまりにも長い間、私はあなたに証明のスケッチを与えるアルゴリズムを取ったが、それはあなたのニューロンを発射させるはずです。
関連する問題
- 1. 修正後のクイックソートの実行時間= O(Nk)
- 2. 実行時間に関してネストされたfor-loopsを最適化する
- 3. 実行に時間がかかるSQLクエリの最適化
- 4. クイックソートの最悪の実行時間を証明する
- 5. Android NKでJNIを呼び出す問題
- 6. 二重入れ子のBig Theta実行時間
- 7. 長時間実行されるスクリプトを最適化する方法
- 8. Seabornヒートマップ実行時間の最適化をプロットする
- 9. Cudaカーネルの時間実行を最適化する
- 10. SQL - 実行時間を最適化する
- 11. ソート最適化の時間
- 12. r.js最適化された最適化されたファイルが実行されていません
- 13. 最適化されたstrcmpの実装
- 14. DimGeographyテーブルにBK/NKを設定する必要がありますか?
- 15. redis-serverのスループットを最適化した後のクエリ時間のスパイクの説明
- 16. Excelで行を削除する時間を最適化する
- 17. 最適化フィールドの透明化は離れていますか?
- 18. ReadTheDocsプロジェクトのビルド時間の最適化
- 19. SSLクライアント証明書の検証の最適化
- 20. SQLクエリの最適化(時間)
- 21. GCC /ビルド時間の最適化
- 22. 実行時からBig Thetaを計算しますか?
- 23. クエリの応答時間を最適化
- 24. OpenCVは最適化されたデバッグモードでビルドされますか?
- 25. 最適化で最適化されたプロファイリング関数
- 26. 最適化クエリでは、それはより多くの時間を要した
- 27. 最適化されたページングソリューション
- 28. 最適化されたjQuery
- 29. ソートされたリンクリストの実行時間
- 30. バイキュービック補間アルゴリズムの実行時間を最適にするにはどうすればよいですか?