Time complexity 如何计算综合增长顺序?
假设我有一个带有形式参数p的递归过程。这个程序Time complexity 如何计算综合增长顺序?,time-complexity,complexity-theory,space-complexity,Time Complexity,Complexity Theory,Space Complexity,假设我有一个带有形式参数p的递归过程。这个程序 在Θ(1)(延迟)操作中包装递归调用 并在该调用之前执行Θ(g(k))操作 k取决于p的值。[1] 过程使用参数p/b调用自身,其中b是一个常量(假设它在1到0之间的某个点终止) 问题1。 如果n是过程初始调用中p的参数值,那么对于该过程生成的过程,空间的增长顺序和执行的步骤数(以n为单位)是多少 如果k=p?[2] 如果k=f(p)?[3] 脚注 [1] 也就是说,在参数的值传递到p时 [2] 即,嵌套操作的输入大小与我们的过程相同 [3]
- 如果k=p?[2]
- 如果k=f(p)?[3]
脚注 [1] 也就是说,在参数的值传递到p时
[2] 即,嵌套操作的输入大小与我们的过程相同
[3] 也就是说,嵌套操作的输入大小是我们过程的输入大小的函数
抽样程序
(定义(*a b)
(cond(=b0)0)
((偶数b)(双倍(*a(b减半)))
(其他(+a(*a(-b 1()())))
此过程根据规则将整数乘法作为重复加法执行
- a*b=double(a*(b/2))如果b是偶数
- a*b=a+(a*(b-1))如果b是奇数
- a*b=0如果b为零
define *(a, b) as
{
if (b is 0) return 0
if (b is even) return double of *(a, halve (b))
else return a + *(a, b - 1)
}
这里
- 形式参数是b
- 递归调用的参数为b/2
是一种类似于double x
的Θ(1)操作李>返回x+x
是Θ(g(k))与k=b,即它是Θ(g(b))将k减半
*(a,n)
时,以n为单位的增长顺序是什么
在你回答之前 请注意,主要问题是问题1的两部分
问题2可以作为第一部分回答。对于第二部分,您可以假设f(p)是您喜欢的任何函数:logp、p/2、p^2等。您需要应用麦汁案例分析 首先,, 您可以使用二次幂近似求解: 如果这样,那么算法显然需要:(where) 如果它是一个奇数,那么在应用-1之后,你得到一个偶数,然后除以2,你只能重复几次,步骤的数量也是,b是奇数的情况显然是最坏的情况,这给了你答案
(我想你需要一个额外的基本情况:b=1)我看到有人已经回答了问题2,所以我只回答问题1 首先要注意的是,问题的两个部分是等价的。在第一个问题中,k=p因此我们对一些函数执行g操作。在第二个例子中,k=f(p)我们执行aΘ(g(f(p))=Θ((g)∘f) (p))。将第一个问题中的g替换为g∘f第二个问题解决了
因此,我们只考虑第一种情况,即<强> k= P< /强>。用T(n)表示递归过程的时间复杂度,我们得到:
T(n)=T(n/b)+g(n)[自由项应乘以常数c,但我们可以在“c的量”中讨论复杂性,θ界显然保持不变]
除非提供有关g的更多信息,否则我们无法进一步简化它。例如,如果g是一个多项式,g(n)=n^k,我们得到它
T(n)=n^k*(1+b^-k+b^-2k+b^-4k+…+b^-log(n)*k)为什么
double n=Θ(1)
当halve n=Θ(g(n))
?(假设a、b
具有任意精度)@meowgoesthedog,因为除法运算不直接可用halve n
必须计算n/2
,这不一定是Θ(1)
。我的观点是,只有当a,b
具有任意精度时,大O分析才相关,即double n
不应该是Θ(1)
操作。@meowgoethedog好的,我明白你的意思。但出于我们的目的,假设Asaf所说的+
和-
是基本的Θ(1)
操作。我们想把这些抽象出来,这样我们就可以专注于更高层次的分析。在任何情况下,给出的过程都只是代表性的。我的问题主要是关于一般情况。另外,我在问题中提到了Θ
(θ)而不是O
(big-O)(如果它们不同的话)。此外,我主要是在寻找第一个问题(有两个部分)的答案。对不起,如果这不清楚,我已经编辑了我的问题,使之明确。第一个问题有点让人困惑,f(n)是什么意思?看来你可以运用主定理来解决这个问题:谢谢。我已经澄清了我的问题,以区分n(初始值)和p(给定示例中的b),p是n传递到的形式参数。我想说的是f(p)。请参见添加的脚注。你可以假设它是p的任意函数。注:对于k=n的情况,即halve
isΘ(g(n))这回答了问题2。但在问题中,它是Θ(g(b)),即调用它的成本随着每次连续递归调用而变化。此外,变量名表示与问题中不同的内容,可能会引起混淆。不过公平地说,至少