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