使用主定理求解T(n)=√2* T(n / 2)+ log n

时间:2015-05-04 20:26:07

标签: algorithm recurrence master-theorem

问题是:

T(n) = √2*T(n/2) + log n

我不确定主定理是否适用于此,并且有点卡住了。

3 个答案:

答案 0 :(得分:3)

这看起来更像是Akra-Bazzi定理:http://en.wikipedia.org/wiki/Akra%E2%80%93Bazzi_method#The_formula k=1h=0g(n)=log na=(2)^{1/2}b=1/2。在这种情况下,p=1/2您需要评估整数\int_1^x log(u)/u^{3/2} du。您可以使用按部件集成,也可以使用符号集成器。 Wolfram Alpha告诉我不定积分是-2(log u + 2)/u^{1/2} + C,所以定积分为4 - 2(log x + 2)/x^{1/2}。添加1并乘以x^{1/2},我们得到T(x) = \Theta(5x^{1/2} - 2 log x - 4)

答案 1 :(得分:1)

根据主定理,f(n)应该是多项式的,但这里

f(n) = logn

这不是多项式,因此根据规则不能通过主定理求解。我也读到了第四个案例。我也必须提到这一点。

这里也讨论了: Master's theorem with f(n)=log n

但是,第四种情况有限"对于主定理,它允许它应用于多对数函数。

如果

 f(n) = O(nlogba logk n), then T(n) = O(nlogba log k+1 n).

换句话说,假设您有T(n)= 2T(n / 2)+ n log n。 f(n)不是多项式,但f(n)= n log n,k = 1.因此,T(n)= O(n log2 n)

有关详细信息,请参阅此讲义:http://cse.unl.edu/~choueiry/S06-235/files/MasterTheorem-HandoutNoNotes.pdf

答案 2 :(得分:1)

Master theorem只对您的ab设置约束。 a不合理且您log(n) f(n)c = log2(sqrt(2)) = 1/2无关的事实。

所以在你的情况下你的n^c。由于O(sqrt(n))的增长速度比log(n)快,因此递归的复杂度为FATAL:.//android/base/sockets/SocketWaiter.cpp:88:Check failed: isValidFd(fd). fd 1064 max1024

P.S。 Danyal的解决方案是错误的,因为复杂性不是nlogn并且Edward Doolittle的解决方案是正确的,在这个简单的情况下它也是一种矫枉过正。