配列がこのような要素を含んでいるとします。範囲を含む配列のバイナリ検索
[1,2,5,6,8,9,11-13]、2-5はa 2、3、4、5を表す範囲で、「4」を見つけたい場合はインデックス1(0から始まる)が必要な答えです。
constansスペースとlog(n)時間のこのタイプの要素のようなバイナリ検索を適用することは可能でしょうか?
配列がこのような要素を含んでいるとします。範囲を含む配列のバイナリ検索
[1,2,5,6,8,9,11-13]、2-5はa 2、3、4、5を表す範囲で、「4」を見つけたい場合はインデックス1(0から始まる)が必要な答えです。
constansスペースとlog(n)時間のこのタイプの要素のようなバイナリ検索を適用することは可能でしょうか?
バイナリ検索を使用すると、コンセプトは魅力のような範囲でも機能します。実際には、これは時間と空間の複雑さを減らすために一般的に使用される概念です(たとえば、gap encoding
)。 しかし、ライブラリメソッドはおそらく範囲を受け入れないため、ライブラリを使用する代わりに独自に書き込む必要があります。
私たちは簡単にインデックスである値探し[1, 2-5, 6, 8-9, 11-13]
のあなたの与えられた入力のバイナリ検索を実行して行きましょう。
配列[1, 2-5, 6, 8-9, 11-13]
が長を有し、我々はある中央にインデックスの決定します。値6
が読み込まれます。値4
を検索して、検索を続けます。
現在、[1, 2-5, 6]
に検索間隔を減少長、我々はミドルインデックスで決めます。それは2-5
と読みます。 4
がその範囲内にあるので、結果としてインデックスを返します。
例えばそれは、が内側5-7
ないとして、その後、我々は左に検索を続けるだろうが5-7
を読みたい場合。同様に、1-3
と表示されている場合は、検索を続けます。ここで
は、いくつかの擬似コードとバイナリサーチの説明です:Binary search algorithm at Wikipedia
あなたがちょうどあなたの質問を編集し、あなたがこれまでにやっている私たちを見るよりも、実装に問題がある場合は、我々はその後、適応すると、助けて。
ありがとう、私はレンジ要素の検索に問題がありました。今は理解しています。通常のバイナリ検索を適用しますが、 "<"と "=="のような比較方法(検索番号と範囲要素)を変更してください。 – Hao
バイナリ検索の後、2と5のような最後の要素を比較し、最初の部分または2番目の部分をどこで検索するかを推測する必要があります。 – bigbounty
はい。カスタム比較コードを使用するだけで、同じ複雑さが残っています。 – BladeCoder
問題が発生した場合は、最初に行ってコードを投稿してみませんか? – trincot