Binary Search is an algorithm that counts the number of true values in an array of booleans satisfying in time and space.
Algorithm
Consider solving the problem after the number of true values has been determined to satisfy .
Let .
- If is true, must all be true, which implies . Solve for the problem with and recursively.
- Otherwise, must all be false, which implies . Solve for the problem with and recursively.
This algorithm solves the problem in time and space.
int binary_search(int n, const std::vector<bool> &f) {
if (!f[0]) {
return 0;
}
int l = 0, r = n;
while (l + 1 < r) {
int mid = std::midpoint(l, r);
if (f[mid]) {
l = mid;
} else {
r = mid;
}
}
return r;
}