タイトルが示唆するように、サイズnのk個のソート済み配列をマージする下限の証明は何ですか?私は縛りがO(kn * log [k])であることを知っていますが、これはどのように達成されましたか?私はデシジョンツリーを使ってp要素の配列をソートするのと比較しようとしましたが、このプルーフを実装する方法はわかりません。サイズnのkソート済み配列のマージの下限
答えて
これはかなり簡単に証明でき、マージソートの方法で考えることができます。
サイズの配列をマージソートするには、K * Nには、O(KN * log(K * N))が必要です。
しかし、我々は、配列のサイズはNは、それがソートされているときに我々が知っているように、葉サイズのに到達する必要はありません。簡単にするため、Kは2の累乗であると仮定します。
サイズNのリーフに到達するために何回何度掛けなければなりませんか?
K回!
可視化は、だからあなたは、各ステップのコストN Kをマージすること、ログ(K)のステップを持っている、とログ(K)のステップがあります。したがって、時間の複雑さは、O(NK(ログ(K))がある
証明:。
は、それが下限でないと仮定しますと、私たちはより良い達成できるその後のサイズの任意の未知の配列について我々はサイズNのサブアレイに達するまでN * K我々は2でそれを分割することができ、マージソートをサイズNのアレイの各々をNlog(N)内のすべてのアレイをK用時間と合計を* N * log(N)時間。
サイズがNのK配列をソートした後、サイズの大きい配列にマージする必要があります。N * K、O(NK *(log(K))より小さくしてください下限。
最後に、比較モデルでは不可能なN * K * log(N * K)より小さい複雑さのサイズN * Kの未知の配列をソートしました。
したがって、あなたはOよりも優れて達成することはできません(NK *()(Kをログ) Kをマージ中には、サイズN.
可能な実装の配列をソート。
のペア(element, arrayIndex)
を保存heap data structureを作成してみましょう。
- 対応する配列インデックスを持つ各配列の最初の要素をこのヒープに追加します。各ステップで
- 、ヒープから(最低)対
p
上部を取り外し、(それが空でない場合)、結果にp.element
を追加し、p.arrayIndex
インデックスを持つ配列から次の要素とヒープにペア(next, p.arrayIndex)
を挿入。
'next'要素をトラッキングするには、k
のインデックス/ポインタ/イテレータを持つ配列が必要です。これは、対応する配列の次の要素を指しています。
、いつでもヒープのためinsert
/remove
オペレーションヒープ内で最もk
要素がありますがO(log(k))
複雑さを持つことになります。すべての要素がヒープから一度挿入され、削除されます。要素の数はn*k
です。全体的な複雑さはO(n*k*log(k))
です。
k個の配列のそれぞれから次の項目を格納するサイズkの最小ヒープを作成します。各ノードはまた、それがどのアレイから来たかを記憶する。ヒープからの分をfinal_sorted_arrayに追加し、値がヒープに来た配列の次の要素を追加してソートされた配列を作成します。
ヒープの最小eltを削除するとO(log k)になります。あなたはNK要素を合計していますので、NK回実行してください。最終結果:O(NK log k)。
- 1. ソートproblem-サイズkのN/K間隔各
- 2. 定義済みサイズの配列のinitializer_list
- 3. 2つのソート済みリストの並列マージ
- 4. メグル2つのソート済み配列、リスト対配列
- 5. ソートされた配列からソート済み多項式配列へのアルゴリズム
- 6. 配列のソート - とマージ - アルゴリズム
- 7. k個の並べ替え済み配列をマージする - 2つの解を比較する
- 8. ソート済みのバージョン
- 9. ソート済みのファイルルビー
- 10. Javaのイテレータを使用したソート済みリストのマージ
- 11. ソートされたサブリストをソート済みスーパーリストにマージ
- 12. 再帰テンプレート - 定数nサイズの配列 - > n-1サイズのインプレース?
- 13. min-heapを使用してk個のソート済みリストをマージするアルゴリズムを証明する
- 14. lodash n個の配列をマージする
- 15. 配列のサイズNの組み合わせ
- 16. K <= N Iは、以下の行列有するrollmeanr
- 17. CNTK 2のソート済みミニバッチソース
- 18. レンダリングテーブル(2D配列)N * Mサイズ
- 19. Dropzoneソート済み配列をAjaxファイルに送信
- 20. nの長さの配列を、ほぼ同じサイズ(k)のk個のサブ配列に分割する方法は?
- 21. トン-SQL k値の組み合わせ、nはk値の
- 22. QuickSelectを使用したk番目の最小要素のソート済みの行列
- 23. カラーキーでソート済み
- 24. MongoDBの配列サイズでレコードをソート
- 25. Rubyコードの効率:month + frequencyのハッシュをフォーマットされたソート済み配列
- 26. ソート以下のコードで配列
- 27. \ Omega {(n(logn)^ k)}という下限をどのように証明できますか? [k> 1]
- 28. マップの最初のN値<K, V>値でソート
- 29. Mailchimpsのマージ・タグのサイズの制限
- 30. サイズnの配列、1要素n/2回