【发布时间】:2016-09-24 20:25:45
【问题描述】:
Foo(A,f,l)
**Precondition: A[f ...l] is an array of integers, f,l are two naturals ≥ 1 with f ≤ l.
if (f = l) then
return A[f]
else
m ← floor of((f+l)/2)
return min(Foo(A,f,m), Foo(A,m + 1,l))
end if
如果我错了,请纠正我,但我认为这段代码返回数组的最小整数。但是我如何找出用数组 A 来描述时间复杂度的递归关系呢?您能否指导我解决问题,以便我理解?我什至不知道从哪里开始。
【问题讨论】:
-
以 A、f、l 的值为例,画出调用的内容,即完整的循环。您会看到,在每次传递中,搜索空间减半。复杂度是对数的。
-
有了这个前提条件
f <= l,您无法确保在您的内部调用中实现它。另外,这似乎是一个无用的前提,也许你应该删除它。您既不能确保m >= 1 -
看看这个question
-
让
n是数组的大小,所以n = l - f + 1。T(1) = 1,那么T(n)是什么?
标签: algorithm math recursion time-complexity big-o