分裂和征服alg在恒定时间运行?

时间:2014-10-23 03:05:51

标签: algorithm divide-and-conquer

你能指出一个在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?

1 个答案:

答案 0 :(得分:2)

对于在恒定时间内运行的分而治之算法,它只需要对任何输入执行固定数量的工作。因此,它可以在任何输入上最多产生固定数量的递归调用,因为如果调用的数量是无限的,则完成的总工作量将不是常量。而且,它需要在所有这些递归调用中进行一定量的工作。

这基本上消除了任何看似合理的递归关系。任何形式

  

T(n)= aT(n / b)+ O(n k

立即是不可能的,因为递归调用的数量会随输入n而增长。

你可以制作一些在恒定时间内运行的高度设计的分而治之算法。例如,请考虑以下问题:

  

返回输入数组的第一个元素。

通过注意

,技术上可以通过分而治之来解决
  • 单元素数组的第一个元素等于它自己。
  • n元素数组的第一个元素是第一个元素的子数组的第一个元素。

然后重现

  

T(n)= T(1)+ O(1)

     

T(1)= 1

正如你所看到的,这是一个非常奇怪的复发,但确实有效。

我从来没有听说过这样的事情会在实践中出现,但如果我想到任何事情,我会尝试用细节更新这个答案。 (注意:我不期待更新这个答案。^ _ ^)

希望这有帮助!