从递归算法确定递归关系

时间:2015-06-10 13:19:17

标签: algorithm math recursion

我得到了以下递归算法,并被要求找到它的递归关系。

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因为递归需要恒定的时间吗?或者是什么?有人能理解解决方案吗?

1 个答案:

答案 0 :(得分:0)

您的代码是二进制搜索的实现。在二进制搜索中,在每次递归调用时,将排序后的数组分成两半,然后在元素小于中间元素时搜索数组左侧部分中的元素,或者如果元素是元素则搜索数组的右侧部分大于中间元素或停止,如果你正在寻找的是中间元素。

现在,如果n显示排序数组中的元素数,每当你将它分成两个几乎相同大小的数组时,你的问题大小会减少到n / 2,因为你只需要在/上调用一次搜索函数2数组,你可以很容易地说:

  

T(n)= T(n / 2)+ O(1)

O(1)的添加是因为你运行以检查你是在哪种情况。