Time complexity 计算递归算法的时间复杂度

Time complexity 计算递归算法的时间复杂度,time-complexity,Time Complexity,我试图得到这个算法的时间复杂度,但我不知道如何得到。我很高兴能得到任何帮助 `int g(int arr[], int start, int end, int k) { if (start > end) return 0; int mid = (start + end) / 2; if (arr[mid] < k) return 1 + g(arr, mid + 2, end, k); if (arr[mid] > k) return 1 + g(arr, start, mid

我试图得到这个算法的时间复杂度,但我不知道如何得到。我很高兴能得到任何帮助

`int g(int arr[], int start, int end, int k)
{
if (start > end) return 0;
int mid = (start + end) / 2;
if (arr[mid] < k) return 1 + g(arr, mid + 2, end, k);
if (arr[mid] > k) return 1 + g(arr, start, mid - 1, k);
return g(arr, start, mid - 1, k) + 1 +
g(arr, mid + 1, end, k);
}`

答案是开的。

这是使用二进制搜索机制的递归。 每次我们检查arr[mid]是否等于值k;如果它小于k,那么我们搜索数组的右半部分,mid+2应该是mid+1,如果它大于k,那么我们搜索数组的左半部分,如果它等于k,那么我们搜索数组的两半部分。 所以每次我们调用递归函数时,我们只使用了一半的输入,一半的数组。 因此,我们可以这样写:

Tn=2*Tn/2+1

Tn=2*2*Tn/2*2+1+1

…继续扩大

Tn=2^k*Tn/2^k+k

n/2^k=2==>k=logn

Tn=2^logn*1+logn=使用日志规则知道2^logn=n

尽管您没有询问,但是空间复杂度将是Ologn,因为递归树的最大深度将是logn