重複の可能性:
マージソートでのマージ操作がO(n)である理由
マージソートに関して各反復が正確にO(n)をとるのはなぜですか?誰かが私にそれを詳細に説明できるでしょうか?そしてなぜC_merge(n)= O(n)?それは、2つのソートされた配列をマージする時間を意味しますか?
重複の可能性:
マージソートでのマージ操作がO(n)である理由
マージソートに関して各反復が正確にO(n)をとるのはなぜですか?誰かが私にそれを詳細に説明できるでしょうか?そしてなぜC_merge(n)= O(n)?それは、2つのソートされた配列をマージする時間を意味しますか?
アイデアは、2つのソートされた配列があり、一方が他方の最大の要素よりも大きい最小の要素を持つ2つの配列ではないということです。私が言いたかったのは、そうではないということ[1, 3, 9, 12]
です[13, 17, 19]
。[3, 12, 13, 17]
しかし、それはとのようなもの[1, 9, 19]
です。
ほら、後でそれらを追加することはできません。では、どのように組み合わせるのですか?次のアルゴリズムに従います。
m
要素があり、2番目に要素があるとしますn
。サイズの補助配列を作成しますm+n
。これにより、結合およびソートされた最終的な配列が格納されます。i
とを割り当てます。j
i
とj
;の要素を比較します。小さい方を選択してください。値の補助配列をコピーし、カーソルを小さいカーソルの前に移動します。したがって、この場合、を比較し(3, [1]); ([3], 9); (12, [9]); ([12], 19); ([13], 19); ([17], 19); (--, [19])
ます。分かりますか?どのように比較できますか?(m+n)
。各操作を想定していますO(1)
。長さの配列のマージプロセス(m+n)
はですO(m+n)
。
最良の場合、入力として配列をソートします。などでは、マージされる両方のサブアレイは結合する必要があります。ただし、上記の一般的なアルゴリズムを適用します。その場合、min(m,n)
要素を比較してコピーする必要があります。max(m,n)
次に、要素を補助配列にコピーします。いずれにせよ、あなたはトータル(m+n)
オペレーションを持つことになります。