algorithm - 如何在我的二进制搜索实现中找出循环不变量?
问题描述
bool binsearch(int x) {
int i = 0, j = N;
while(i < j) {
int m = (i+j)/2;
if(arr[m] <= x) {
if(arr[m] == x)
return true;
i = m+1;
}
else {
j = m;
}
}
return false;
}
这是我的二分搜索实现,如果 x 在 arr[0:N-1] 中则返回 true,如果 x 不在 arr[0:N-1] 中则返回 false。
而且我想知道如何找出正确的循环不变量来证明这个实现是正确的。
我怎么解决这个问题?
非常感谢 :D
解决方案
想想在你的循环中保持状态的变量。在您的情况下,它们是变量 i 和 j。您从所有元素 < i 且小于您要搜索的值 ( x
) 以及所有元素 > j 且大于的事实开始x
。这是您要维护的不变量。
推荐阅读
- docker - Docker for Windows 中的 Minikube 与 Kubernetes
- javascript - GeoTIFF RGB 作为传单层
- c# - 如何在 .NET 中阅读“% Time in GC”
- ruby - Ruby 通过它们的键对多维数组进行排序
- react-native - 来自 React Native 中的设备存储自定义路径的图像
- oracle - 使用 max 时不是单组群功能
- javascript - 如何使用客户端 Javascript 通过 API 将跨域文件导入 Google Drive?
- azure - Azure 密钥保管库 - 为部署槽添加访问策略
- spring-boot - 在 SpringBoot 应用程序中无法获取 JDBC 连接
- php - 如何防止搜索机器人每次调用 API