質問

整数のソートされた配列とターゲット整数を指定して、ターゲット整数の発生数を見つけます。

バイナリ検索に時間がかかる $ o(\ lg n)$ $ nを持っていることはよく知られています$ は配列のサイズです。 たとえば、a配列 $ [1,2,3,3,4,5] $ とターゲット $ 3$ アルゴリズムは $ 2 $ を返すべきです。。

質問: $ o(\ lg n)?$ よりも少ない時間の複雑さを持つ高速なアルゴリズムはありますか?それ以外の場合は、その $ \ omomega(\ _ω)$ は理論上の下限?

役に立ちましたか?

解決

問題に $ \ omomega(\ log n)$ は、ターゲットの整数が一度に表示されていると約束されていても、メモリへのアクセスにアクセスします。あなたは敵対的な議論を使って証明することができます。

ターゲットがゼロであるとします。配列への最初のアクセスが中央の左側にある場合は、 $ - 1 $ に回答し、 $ - 2、-3、\ ldots $ 。最初のアクセスが中央の正午の場合、 $ + 1 $ に回答し、 $ 2になる権利に精神的に設定します。 、3、\ ldots $

最初のアクセスが中央の正面の位置、span class="math-container"> $ i $ を言って、2回目のアクセスを考慮してください。それが最初のアクセス権の権利にならず、あなたはすでに何を答えるかを知っています。そうでなければ、2つのケースがあります。アクセスした位置 $ j $ $ i / 2 $ 未満の場合、 $ - 1 $ (そして左側に要素を入力します)。 $ I / 2 $ 以上の場合、 $ + 1/2 $ (塗りつぶし) $ i $ の位置まで右側に要素を超えてください。

このようにして、各ステップにおいて、ターゲット要素を含むことができる位置の数は各ステップで最大半分になる。最後に、1つの要素のみが依然として賭けの場合、それを照会せずに、アルゴリズムは、配列にターゲット要素が含まれているかどうかを確認できません。 $ \ log_2 n $ 手順を受けます。

前述は実際にはバイナリ検索がソートされた配列を検索するのに最適であることを示しています。

他のヒント

$ n $ があります。各比較はあなたに情報のほとんどを与えます。答えを説明するには、少なくとも $ \ lg n $ が必要です。なぜなら、少なくとも $ \ \LG N $ 比較

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top