2016-02-07 22 views
5

バイナリ検索を繰り返し実行するときは、いつもwhile (low < high)またはのどちらを使用すべきかを常に混乱させています。バイナリ検索終了条件

どちらも機能しますが、誰かが実際の利点を他のものよりも教えてくれますか?

+2

は、「低」と「高」の更新方法によって異なります。 – svs

答えて

2

あなたがリストしている2つの終了条件は、低値と高値が包括的か排他的かに応じてしばしば使用されます。境界が包括的である場合、低=高の場合、チェックする配列に1つの要素が残っており、内側のループは別の時間に実行する必要があります。したがって、低い≤が適切かどうかのテストが適切です。一方、低い値が含まれ、高い値が排他的である場合、低い=高いときにすべての要素を使い果たしたので、低い値の形式のテストがより適切です。

+1

ありがとうございます。これは良い実践的な例かもしれないと思いますか? 「mid -1」と「mid +1」として「high」を更新するたびに、 は、その要素が配列の内側にあると仮定し、最後の要素をチェックします。しかし、包括的境界は最後の要素を安全にチェックし、その要素が存在するかどうかわからない場合に使用されます。 – Zanko

+0

私はそれが有効だと思いますが、より一般的なケースは呼び出し規約にあります。配列の最後の要素のインデックス(包含的な境界)または配列の長さ(排他的な境界)をhighに初期化していますか? – templatetypedef

+1

'lo = 0'と' hi = nums.length - 1' – Zanko