私は、バイナリサーチのための以下のアルゴリズムを持っていたアルゴリズムの本を読んでいた。計算半ばには
public class BinSearch {
static int search (int [ ] A, int K) {
int l = 0 ;
int u = A. length −1;
int m;
while (l <= u) {
m = (l+u) /2;
if (A[m] < K) {
l = m + 1 ;
} else if (A[m] == K) {
return m;
} else {
u = m−1;
}
}
return −1;
}
}
著者は、エラーが、それがオーバーフローにつながることができ、交換する必要があります割り当てm = (l+u)/2;
である」と言いますm = l + (u-l)/2
によって。
どのようにオーバーフローが発生するのかわかりません。私がアルゴリズムをいくつかの異なる入力のために動かすと、配列のインデックスから中間値が外れることはありません。
どのような場合にオーバーフローが発生しますか?
2つの数字を加算、減算、乗算すると、より多くのビットが生成されるので、明らかにオーバーフローの可能性があります。 –
[バイナリ検索中間値計算]の複製が可能です(http://stackoverflow.com/questions/4534342/binary-search-中間価値計算) –