问题是:
T(n) = √2*T(n/2) + log n
我不确定主定理是否适用于此,并且有点卡住了。
答案 0 :(得分:3)
这看起来更像是Akra-Bazzi定理:http://en.wikipedia.org/wiki/Akra%E2%80%93Bazzi_method#The_formula k=1
,h=0
,g(n)=log n
,a=(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只对您的a
和b
设置约束。 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的解决方案是正确的,在这个简单的情况下它也是一种矫枉过正。