你能指出一个在CONSTANT时间运行的分而治之算法的例子!我在“OMG!我想不出任何这样的事情”的情况。请指点我。感谢
我知道遵循以下惯例的alg:T(n) = 2T(n/2) + n
将是merge sort
。我们将问题分为2个子问题 - 每个子问题都是n / 2。然后我们花了一点时间把一切都征服成一个排序的数组。
我也知道T(n) = T(n/2) + 1
将是binary search
。
但是什么是T(n) = 1?
答案 0 :(得分:2)
对于在恒定时间内运行的分而治之算法,它只需要对任何输入执行固定数量的工作。因此,它可以在任何输入上最多产生固定数量的递归调用,因为如果调用的数量是无限的,则完成的总工作量将不是常量。而且,它需要在所有这些递归调用中进行一定量的工作。
这基本上消除了任何看似合理的递归关系。任何形式
T(n)= aT(n / b)+ O(n k )
立即是不可能的,因为递归调用的数量会随输入n而增长。
你可以制作一些在恒定时间内运行的高度设计的分而治之算法。例如,请考虑以下问题:
返回输入数组的第一个元素。
通过注意
,技术上可以通过分而治之来解决然后重现
T(n)= T(1)+ O(1)
T(1)= 1
正如你所看到的,这是一个非常奇怪的复发,但确实有效。
我从来没有听说过这样的事情会在实践中出现,但如果我想到任何事情,我会尝试用细节更新这个答案。 (注意:我不期待更新这个答案。^ _ ^)
希望这有帮助!