我得到了以下递归算法,并被要求找到它的递归关系。
int search(int A[], int key, int min, int max)
{
if (max < min) // base case
return KEY_NOT_FOUND;
else
{
int mid = midpoint(min, max);
if (A[mid] > key)
return search(A, key, min, mid-1);
else if (A[mid] < key)
return search(A, key, mid+1, max);
else
return mid; // key found
}
}
解决方案是T(n) = T(n/2) + 1
,但我不确定为什么会T(n/2)
?为什么它是+ 1
?是+ 1
因为递归需要恒定的时间吗?或者是什么?有人能理解解决方案吗?
答案 0 :(得分:0)
您的代码是二进制搜索的实现。在二进制搜索中,在每次递归调用时,将排序后的数组分成两半,然后在元素小于中间元素时搜索数组左侧部分中的元素,或者如果元素是元素则搜索数组的右侧部分大于中间元素或停止,如果你正在寻找的是中间元素。
现在,如果n显示排序数组中的元素数,每当你将它分成两个几乎相同大小的数组时,你的问题大小会减少到n / 2,因为你只需要在/上调用一次搜索函数2数组,你可以很容易地说:
T(n)= T(n / 2)+ O(1)
O(1)的添加是因为你运行以检查你是在哪种情况。