低效分治算法的复杂性

时间:2013-10-06 22:12:03

标签: algorithm complexity-theory big-o divide-and-conquer

大小为n的实例分为p≥2个实例,每个实例的大小为n-a,其中a为小integerp为一个constant。该操作的计算成本(即分成实例)是一个单位,C(0)=1.

我试图找到这种设计的复杂性。我无法将这些单词放入等式中,这就是我认为递归应该是这样的:

C(n) = (n-a)*C(n/p) + 1

这是正确的吗?

3 个答案:

答案 0 :(得分:1)

我认为会是这样的:

C(n) = (p)*C(n-a) + 1

我的理由是你在你的问题中说'p≥2个每个大小为n-a'的实例。因此,大小减少到C(n-a)并且存在p个子问题。所以我认为它会像p*C(n-a)。你的另一个名词是正确的。正如您所说,每一步的划分成本为C(0) = 1

答案 1 :(得分:0)

嗯,因为这看起来像是一个学校作业,特别是因为措辞“低效的分治算法”,我也不会直接回答它。

我的建议是以a=1p=2为例。在这种情况下,您必须解决两个大小为n-1的子问题,然后花费1个单位时间来组合解决方案。如果你花费1个单位的时间来解决n=1,即C(1)=1,那么你得到

C(1)=1
C(2) = 2*C(1) + 1 = 3
C(3) = 2*C(2) + 1 = 7
C(4) = 2*C(3) + 1 = 15

等。所以你得到C(n) =2^n - 1。如果a不是1,这基本上是相同的:你只需要加注n/a而不是n

顺便说一句,将a称为“小整数”并不是特殊的,而p是“常数”吗?当然,这两种表达方式都是一样的。就渐近行为而言,所有常数都是“小的”。

答案 2 :(得分:0)

正如Shashank写的那样C(n)=p⋅C(n-a)+ 1是正确的。

我只想提一下,这会导致

  

C(n)=Σ i = 0,...,n / a p i = p n / a + 1 - 1

所以C(n)在O(p n / a )中,在n中呈指数。