📜  算法|搜寻|问题2

📅  最后修改于: 2021-06-28 21:03:07             🧑  作者: Mango

对于二进制搜索的最坏情况,以下哪项是正确的重复发生?
(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)
这个问题的测验