[英]Finding number of comparisons
我正在尝试跟踪此二进制搜索代码中的键比较次数。 对于2^16
的数组大小,比较结果应该在 17 左右。 你能解释一下我为什么要 33 岁吗?
public class AdvancedBinarySearch {
int count = 0;
// Returns location of key, or -1 if not found
int AdvancedBinarySearch(int arr[], int l, int r, int x) {
int m;
while (r - l > 1) {
count++;
m = l + (r - l) / 2;
if (arr[m] <= x) {
l = m;
count++;
} else {
r = m;
count++;
}
}
if (arr[l] == x) {
count++;
return l;
}
if (arr[r] == x) {
count++;
return r;
} else {
count++;
return -1;
}
}
public void setCount(int i) {
this.count = i;
}
}
您的代码计算if (arr[m] <= x)
比较两次。 如果您从l = m
下方以及r = m
下方移除count++
,这将不再发生。
我在此更改之前和之后测试了此更改,在从 0 到 65535 的整数数组中搜索 189。该数组的大小为 2^16,在更改之前,计算了 33 次比较,在更改之后,进行了 17 次比较被计算在内,所以我认为这种改变可以达到你想要的效果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.