是否可以计算递归二分查找的比较次数?如果是这样,怎么样?
以下是我所指的搜索:
//binary search
public static int binarySearch(int[] items, int start, int end, int goal)
{
if (start > end)
return (-1);
else
{
int mid = (start + end)/2;
if (goal == items[mid])
return (mid);
else
if (goal < items[mid])
return (binarySearch(items, start, mid - 1, goal));
else
return (binarySearch(items, mid + 1, end, goal));
}
}//end binarySearch
答案 0 :(得分:1)
在方法之外声明你的count变量。然后每次调用方法时加1。
long count = 0;
//binary search
public static int binarySearch(int[] items, int start, int end, int goal)
{
count += 1
if (start > end)
return (-1);
else
{
int mid = (start + end)/2;
if (goal == items[mid])
return (mid);
else
if (goal < items[mid])
return (binarySearch(items, start, mid - 1, goal));
else
return (binarySearch(items, mid + 1, end, goal));
}
}//end binarySearch
答案 1 :(得分:0)
如果您希望调用者能够访问计数,那么您最有可能的方法是将累加器传入二进制搜索。在java 7或更低版本中,AtomicLong可能是一个不错的选择(虽然它确实有一些开销)。在java 8中,LongAdder也很好:
public static int binarySearch(int[] items, int start, int end, int goal, AtomicLong counter) {
}
每次进行比较时,只需增加计数:
counter.incrementAndGet()
退出搜索时,计数器将包含比较次数:
long count = counter.get()