[解決済み] サイズnとmの2つのソートされた配列をマージする際の時間複雑度
2022-02-18 14:40:20
質問
サイズnとmの2つのソートされた配列をマージする場合の時間的な複雑さはどの程度でしょうか? nは常にmより大きい .
私はマージソートを使おうと思っていたのですが、この場合、O(log n+m)を消費すると思います。
私はビックオーとかがあまり得意ではありません。この問題の時間計算量と、さらに最適化された解法があれば教えてください。
どのように解決するのですか?
注意! この回答にはエラーが含まれています
より効率的なアルゴリズムが存在し、それは別の回答で紹介されています。
計算量はO(m log n)である。
という長い配列があるとします。
a
で、短い配列は
b
とすると、あなたが説明したアルゴリズムは、次のように書くことができます。
for each x in b
insert x into a
ループはm回繰り返される。ソートされた配列への各挿入はO(log n)の処理である。したがって、全体の複雑さはO (m log n)である。
以来
b
はソートされているので、上記のアルゴリズムをより効率的にすることができます。
for q from 1 to m
if q == 1 then insert b[q] into a
else
insert b[q] into a starting from the position of b[q-1]
これで漸近的な複雑さが改善されるのでしょうか?そうでもありません。
の要素があるとします。
b
に沿って均等に広がっています。
a
. そうすると、各挿入は
O(log (n/m))
となり、全体の複雑さは
O(m log(n/m) )
. 定数が存在する場合
k>1
に依存しない
n
または
m
そのような
n > k * m
では
O(log(n/m)) = O(log(n))
となり、上記と同じ漸近的な複雑さが得られます。
関連
-
[解決済み] Elasticsearchがフィルタにないフィールドの値で注文する。
-
[解決済み] 負の整数の基数ソート
-
[解決済み] Map Reduce Programmingにおけるreducerのshufflingとsortingフェーズの目的は何ですか?
-
[解決済み] サイズnとmの2つのソートされた配列をマージする際の時間複雑度
-
[解決済み] Scalaで配列を並べ替えるには?
-
[解決済み] Haskellでは、どのように私はペア(タプル)のリストを並べ替えるために組み込みのsortBy関数を使用することができますか?
-
[解決済み] 構造体の配列を(任意の)フィールド名で単純にソートする最短の方法は何ですか?
-
[解決済み] ヒープの構築はどうして時間計算量O(n)になるのですか?
-
[解決済み】アルゴリズムの時間複雑性を求めるには?
-
[解決済み] ElasticSearchでソートするためのフィールドのマッピングが見つかりません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Elasticsearchがフィルタにないフィールドの値で注文する。
-
[解決済み] 負の整数の基数ソート
-
[解決済み] Map Reduce Programmingにおけるreducerのshufflingとsortingフェーズの目的は何ですか?
-
[解決済み] サイズnとmの2つのソートされた配列をマージする際の時間複雑度
-
[解決済み] Scalaで配列を並べ替えるには?
-
[解決済み] Haskellでは、どのように私はペア(タプル)のリストを並べ替えるために組み込みのsortBy関数を使用することができますか?
-
[解決済み] 構造体の配列を(任意の)フィールド名で単純にソートする最短の方法は何ですか?
-
[解決済み] ElasticSearchでソートするためのフィールドのマッピングが見つかりません。