【问题标题】:Divide and Conquer alg that runs in constant time?以恒定时间运行的分而治之的算法?
【发布时间】:2014-12-18 16:20:26
【问题描述】:

您能否向我指出一个在 CONSTANT 时间内运行的分而治之算法的示例!我处于“天哪!我想不出任何这样的事情”的情况。请给我指点东西。谢谢

我知道遵循以下重复的算法:T(n) = 2T(n/2) + n 将是merge sort。我们将问题划分为 2 个子问题——每个子问题的大小为 n/2。然后我们会花 n 时间将所有内容重新归入一个排序数组。

我也知道T(n) = T(n/2) + 1 将是binary search

但是T(n) = 1?是什么

【问题讨论】:

  • 对于常数时间算法有什么要划分的??

标签: algorithm divide-and-conquer


【解决方案1】:

要让分治算法在恒定时间内运行,它只需要对任何输入执行固定数量的工作即可。因此,它最多可以对任何输入进行固定数量的递归调用,因为如果调用的数量是无限的,那么完成的总工作将不是一个常数。此外,它需要在所有这些递归调用中做大量的工作。

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

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

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

您可以制作一些在恒定时间内运行的高度人为的分而治之的算法。例如,考虑这个问题:

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

这在技术上可以通过分而治之来解决

  • 单元素数组的第一个元素等于自身。
  • n 元素数组的第一个元素是仅第一个元素的子数组的第一个元素。

然后是递归

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

T(1) = 1

如您所见,这是一个看起来很奇怪的重复,但确实有效。

我在实践中从未听说过这样的事情,但如果我想到任何事情,我会尝试用细节更新这个答案。 (注:我不希望更新这个答案。^_^)

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2021-08-31
    • 2012-01-01
    • 1970-01-01
    • 2013-02-03
    • 2017-06-08
    • 1970-01-01
    相关资源
    最近更新 更多