大小为n
的实例分为p≥2
个实例,每个实例的大小为n-a
,其中a
为小integer
且p
为一个constant
。该操作的计算成本(即分成实例)是一个单位,C(0)=1.
我试图找到这种设计的复杂性。我无法将这些单词放入等式中,这就是我认为递归应该是这样的:
C(n) = (n-a)*C(n/p) + 1
这是正确的吗?
答案 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=1
和p=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中呈指数。