以下に示すように、整数の配列を2進数でスカラーで検索するコードを記述しました。私は、バイナリ検索は実装するのが非常に難しいことを知っています。だから、私はこのコードが常に正しく動作するかどうかを知りたい。私はテスト配列に対してテストすることで試してみたところ、うまくいきました。しかし、いつもうまくいくかどうかは分かりません。このバイナリ検索の実装は、常に正しく動作しますか?
メモ:アレイのサイズは、最大整数値の半分以下であるとします。あなたの仮定の下で
def binarySearch(arr: Array[Int], starti: Int, endi: Int, x: Int) : Int =
{
if (starti > endi)
return -1
val guess = (starti + endi)/2
if (arr(guess) == x)
return guess
if ((guess != 0) && (arr(guess-1) == x))
return guess - 1
if ((guess != endi) && (arr(guess+1) == x))
return guess + 1
if (arr(guess) > x)
return binarySearch(arr, starti, guess-1, x)
else
return binarySearch(arr, guess+1, endi, x)
}
これは、中点計算のための古典的なオーバーフロー加算を含んでいます。負になります.2で除算すると、負の値になります(論理シフトが正しく機能します)。 – harold
正の数の2で除算すると、負の数はどのようになりますか?配列サイズが最大整数値以下であると仮定します。 – pythonic
2で除算しても負の数は出力されません。除算は負の値になりますが、加算の結果を符号なしとして扱うことで回収できる可能性があります。 – harold