【发布时间】:2021-02-24 04:17:21
【问题描述】:
这种递归类似于二分搜索,但我不确定如何使用反向替换来准确解决递归。
要找到它等于数组值的索引(在排序数组中),代码基本上如下所示:
find(array, low, high) {
if high < low
return -1
mid = (low + high) / 2
midval = array[mid]
if midval == mid
return mid
int left = find(array, low, min - 1)
if left >= 0
return left
int right = find(array, mid + 1, high)
return right
}
所以递归关系应该是这样的:
T(1) = b
T(n) = 2T(n/2) + c
= 4T(n/4) + c(1+2)
= 8T(n/8) + c(1+2+4)
= 16(n/16) + c(1+2+4+8)
= 2^k T(n/2^k) + (2^k - 1)c
= 2^(logn)T(1) + (2^(logn) - 1)c
= 2^(logn)(1+c) - c
我知道时间复杂度应该是 O(logn) 或 O(nlogn),但我不知道如何使用反向替代来实现。
【问题讨论】:
标签: arrays algorithm time-complexity