以下两次重复的复杂性是不是相同?

Posted

技术标签:

【中文标题】以下两次重复的复杂性是不是相同?【英文标题】: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) 的复杂度,因为两棵树的高度相同。如果我错了,请纠正我。这是我心中的困惑,所以请帮助我清除它。

【问题讨论】:

en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms) 主定理的情况是,当合并函数以 n 表示时。就我而言,它是恒定的,那么主定理如何适用?? @Dukeling 是case 1而不是case 2,请纠正自己。 @JotWaraich 据我了解,这是一个非常简单的大师​​定理案例。搞清楚你的​​基础,伙计。 是的@Sumeet Singh 在提出问题后想通了。 【参考方案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))中搜索它。因此,这完全取决于您需要多久搜索结果。

以上是关于以下两次重复的复杂性是不是相同?的主要内容,如果未能解决你的问题,请参考以下文章

RestKit / CoreData:两次请求相同的URL时插入重复的对象而不是合并

实体框架两次插入相同的实体[重复]

非并行样本排序是不是与快速排序具有相同的复杂性?

C#中具有复杂元素的Xml反序列化[重复]

找出不重复数字

MySQLi中的计数[重复项]