对于二进制搜索的最坏情况,以下哪项是正确的重复发生?
(A) T(n)= 2T(n / 2)+ O(1)且T(1)= T(0)= O(1)
(B) T(n)= T(n-1)+ O(1)和T(1)= T(0)= O(1)
(C) T(n)= T(n / 2)+ O(1)和T(1)= T(0)= O(1)
(D) T(n)= T(n-2)+ O(1)和T(1)= T(0)= O(1)答案: (C)
说明:以下是二进制搜索的典型实现。
// Searches x in arr[low..high]. If x is present, then returns its index, else -1
int binarySearch(int arr[], int low, int high, int x)
{
if(high >= low)
{
int mid = low + (high - low)/2;
if (x == arr[mid])
return mid;
if (x> arr[mid])
return binarySearch(arr, (mid + 1), high);
else
return binarySearch(arr, low, (mid -1));
}
return -1;
}
在二进制搜索中,我们首先将给定元素x与数组的中间位置进行比较。如果x与中间元素匹配,则返回中间索引。否则,我们要么返回数组的左半部分,要么返回数组的右半部分。
因此,递归是T(n)= T(n / 2)+ O(1)
这个问题的测验