タイトルが示唆するように、サイズ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. ソートされた配列からソート済み多項式配列へのアルゴリズム
- 5. 配列のソート - とマージ - アルゴリズム
- 6. ソートされたサブリストをソート済みスーパーリストにマージ
- 7. ソート済みのファイルルビー
- 8. Javaのイテレータを使用したソート済みリストのマージ
- 9. min-heapを使用してk個のソート済みリストをマージするアルゴリズムを証明する
- 10. 再帰テンプレート - 定数nサイズの配列 - > n-1サイズのインプレース?
- 11. 配列のサイズNの組み合わせ
- 12. CNTK 2のソート済みミニバッチソース
- 13. nの長さの配列を、ほぼ同じサイズ(k)のk個のサブ配列に分割する方法は?
- 14. QuickSelectを使用したk番目の最小要素のソート済みの行列
- 15. MongoDBの配列サイズでレコードをソート
- 16. Rubyコードの効率:month + frequencyのハッシュをフォーマットされたソート済み配列
- 17. \ Omega {(n(logn)^ k)}という下限をどのように証明できますか? [k> 1]
- 18. マップの最初のN値<K, V>値でソート
- 19. サイズnの配列、1要素n/2回
- 20. アルゴリズムの漸近解析:時間nでソートされたリストnにk個の新しい要素を挿入する方法O(k log k + n)
- 21. Mailchimpsのマージ・タグのサイズの制限
- 22. Pythonのパンダ、行によって外積、(N、K)データフレームの(N、K、K)パネル
- 23. ASP.netグリッドページングとマージ済み行
- 24. 並列化ソート済み配列をバイナリ検索ツリー関数に変換する
- 25. 文字列[]内のソート済みハッシュマップのSystoreキー値
- 26. 減算行列、Nの行列のアレイからk次元、k次元
- 27. 2^N配列の挿入ソートの時間の複雑さ?
- 28. ポリマーdom-repeatソート済みイベント
- 29. CoreDataソート済みエンティティ - パフォーマンス
- 30. 。下限のネット配列> 0