Math 求解递推关系T(n)=√;n T&"x221A;n&"x2B;N

Math 求解递推关系T(n)=√;n T&"x221A;n&"x2B;N,math,recursion,complexity-theory,big-o,recurrence,Math,Recursion,Complexity Theory,Big O,Recurrence,有可能解出递推关系吗 T(n)=√n T(√n) +n 使用主定理?它不是那种形式 T(n)=a⋅ T(不适用)+f(不适用) 但是这个问题在CLRS第4章的练习中给出。这不能用主定理来解决。但是,可以使用递归树方法将其解析为O(n log n) 这背后的直觉是注意到在树的每一层,你都在做n个功。顶层不显式工作。每个√n个子问题不存在√n个功等于n个功的总和,等等。所以现在的问题是递归树有多深。这就是在n变得足够小(比如,小于2)之前,可以求n的平方根的次数。如果我们写 n=2lg n 然后,在

有可能解出递推关系吗

T(n)=√n T(√n) +n

使用主定理?它不是那种形式

T(n)=a⋅ T(不适用)+f(不适用)


但是这个问题在CLRS第4章的练习中给出。

这不能用主定理来解决。但是,可以使用递归树方法将其解析为O(n log n)

这背后的直觉是注意到在树的每一层,你都在做n个功。顶层不显式工作。每个√n个子问题不存在√n个功等于n个功的总和,等等。所以现在的问题是递归树有多深。这就是在n变得足够小(比如,小于2)之前,可以求n的平方根的次数。如果我们写

n=2lg n

然后,在每个递归调用上,n将取其平方根。这相当于将上述指数减半,因此在k次迭代之后,我们得到

n1/(2k)=2lg n/(2k)

当这小于2时,我们要停止,给

2lgn/(2k)=2

lgn/(2k)=1

lgn=2k

lg n=k

因此,经过lgn次平方根迭代后,递归停止。而且,由于在每个级别上递归都是O(n)工作的,所以总的运行时间是O(n)

更一般地说,正如任何反复将输入大小减半的算法都会让你想到“logn”,任何通过平方根反复减少输入大小的算法都会让你想到“logn”。例如,van Emde Boas树使用这种循环


有趣的是,这个循环用于获得一个著名算法的运行时间,该算法用于确定地解决最近点对问题,假设计算机可以在恒定时间内处理任意实数。

谢谢!!我确实试着用递归树来解决这个问题,但完全忽略了一点,即在每个级别上,成本都是常数=n!!:)实际上,如果你重写n=2^(2^k),你可以使用主定理。在这种情况下,T(n)=√n T(√n) +n变成:T(2^(2^k))=2^(2^k-1)T(2^(2^k-1))+2^(2^k)。然而,“a”和“b”在这里不是常数。我想应该有办法,但现在想不出任何办法。谢谢你的解释。在推导logn时,我认为从n^(1/(2^k))=2开始,然后将两边都提高到(2^k),结果是n=2^(2^k),然后变成loglogn=k,如上所述。不管你说什么,都是T(sqrt n),但在与T(sqrt n)的乘法中有a(sqrt n)。这会被考虑吗?T(n)=4*T(sqrt(n))+n我们也可以使用上述程序解决此问题吗?问题链接类似的问题: