[解決済み] 並べ替えられた2つの配列の和で、k番目に小さい要素を見つけるにはどうすればよいですか?
2022-10-05 21:33:38
質問
これは宿題のようなもので、バイナリサーチはすでに紹介されています。
2つの配列が与えられたとき、それぞれ N と M の要素を昇順に並べたもので、一意である必要はありません。
を見つけるための時間効率のよいアルゴリズムは何か? k を求める時間効率のよいアルゴリズムは何ですか?
が必要だそうです。
O(logN + logM)
ここで
N
と
M
は配列の長さです。
配列の名前を
a
とし
b
. 当然ながら、すべての
a[i]
と
b[i]
ここで、i > k。
まず、比較してみましょう。
a[k/2]
と
b[k/2]
. とする。
b[k/2]
>
a[k/2]
. したがって、すべての
b[i]
ここで、i > k/2。
これで、すべての
a[i]
であり、i < k であり、すべての
b[i]
であり、i < k/2で答えを見つけることができます。
次のステップは何でしょうか?
どのように解決するのですか?
もう大丈夫です、続けてください。そして、インデックスには気をつけましょう...。
少し単純化するために、NとMを> kとすると、ここでの複雑さはO(log k)、つまりO(log N + log M)となる。
擬似コードです。
i = k/2
j = k - i
step = k/4
while step > 0
if a[i-1] > b[j-1]
i -= step
j += step
else
i += step
j -= step
step /= 2
if a[i-1] > b[j-1]
return a[i-1]
else
return b[j-1]
デモのために、ループ不変量 i + j = k を使うことができますが、私はあなたの宿題をすべてやるつもりはありません :)
関連
-
[解決済み】アセンブリ言語での配列のバブルソート
-
[解決済み] Angular 2のTypeScriptで配列にフィルタをかけるには?
-
[解決済み] RubyのArrayクラスで配列の各要素を2乗する方法は?
-
[解決済み] 数値の配列の和の求め方
-
[解決済み] MATLABでn次元の行列の各要素を反復処理するにはどうすればよいですか?
-
[解決済み] JavaScriptで2つの配列の差を取得する方法は?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】JavaScriptで2つの配列を結合し、項目の重複を排除する方法
-
[解決済み] TypeScriptの配列を文字列リテラルに変換するタイプ
-
[解決済み] 数百万のピクセルを持つ2Dの非ボックス化ピクセル配列にはどのようなHaskell表現が推奨されますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rで3D行列をセットアップし、特定の要素にアクセスする
-
[解決済み] MATLABのnumel関数とlength関数の違いについて
-
[解決済み] SwiftでUInt8バイト配列を文字列に変換する方法
-
[解決済み] 選択ソートが安定する理由と不安定な理由
-
[解決済み] Ruby: ハッシュの配列で Enumerator を取得しようとすると nil:NilClass の未定義メソッド `[]' が発生する。
-
[解決済み] Powershellで配列の値をソートする
-
[解決済み] Swiftの2次元配列
-
[解決済み] Bashでfindコマンドの結果を配列として保存するには?
-
[解決済み] 配列のインデックスやキーをチェックする最も簡単な方法とは?
-
[解決済み] mongodb の複数の配列アイテムによる検索