Slide 4
Slide 4 text
配列 a[0..n-1] で x を二分探索
一見シンプルでいい感じの二分探索だが、実
は隠れた2つのボトルネック
わかりますでしょうか?
1. 予測しにくい条件分岐
2. ランダムなメモリアクセス
分岐予測は期待できない
参照の局所性どうなの?
int bsearch(int* a, int n, int x) {
int lo = 0, hi = n;
while (lo < hi) {
int m = (lo + hi) / 2;
if (x < a[m])
hi = m;
else if (x > a[m])
lo = m + 1;
else
return m;
}
return hi;
}