【问题标题】:Is complexity of the following two recurrances same?以下两次重复的复杂性是否相同?
【发布时间】:2018-07-21 16:57:18
【问题描述】:

我有两个重复关系:

T(n) = T(n/2) + c       // complexity O(logn)

T(n) = 2T(n/2) + c      // is the complexity O(logn)????

c 在这两种情况下都是一个常数,即我们在递归的合并部分做不断的工作。

第一次重复是二分搜索,我们不断丢弃数组的一半。

假设第二次重复从未排序的数组中找到最大元素,我们在每个步骤中将数组分成两部分,然后比较每个部分的结果以给出单个最大值。

在第一种情况下,我们没有遍历整个数组。在第二个中,我们正在遍历整体。现在,如果我为两者构建递归树,我将得到 O(logn) 的复杂度,因为两棵树的高度相同。如果我错了,请纠正我。这是我心中的困惑,所以请帮助我清除它。

【问题讨论】:

  • 主定理的情况是,当合并函数以 n 表示时。就我而言,它是恒定的,那么主定理如何适用??
  • @Dukeling 是case 1而不是case 2,请纠正自己。
  • @JotWaraich 据我了解,这是一个非常简单的大师​​定理案例。搞清楚你的​​基础,伙计。
  • 是的@Sumeet Singh 在提出问题后想通了。

标签: arrays time-complexity divide-and-conquer


【解决方案1】:

不是同样的复杂性。第二个类似于O(n)

查看此问题的一种简单方法是修复c = 0T(1) = aa 是一个常量)。

然后:

T(2) = 2T(1) = 2a
T(4) = 2T(2) = 4a
T(8) = 2T(4) = 8a
...
T(n) = n*a

您可以看到线性复杂度。

【讨论】:

  • 如果我们构建它,它将指向登录复杂性。那怎么办??
  • 好吧,你可以做同样的推理:T(1) = aT(2) = T(1)+c = a+cT(4) = T(2)+c = a+2cT(8) = T(4)+c = a+3c,...所以T(2^n) = a+nc ~ ncT(n) = O(log_2(n))
  • 实际上,使用递归树求解有两个步骤:构建树,然后在其中搜索。构建它的成本O(n*log(n)),甚至比线性还要糟糕。但是一旦树建立起来,每次你都可以在O(log(n))中搜索它。因此,这完全取决于您需要多久搜索结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多