一直困扰着这个家伙。
考虑和S(n)=ΣLog(i)。给出一个简单的函数f(n),使得和S(n)为O(f(n))。解释原因。
(sigma从i = 1开始,到n结束)
我该怎么做?请逐步解释。
答案 0 :(得分:1)
仅仅因为log
是单调的:
sum[i=1..n]log(i) <= sum[i=1..n]log(n) = n*log(n)
所以O(n*log(n))
并确认我们无法改善这种限制:
sum[i=1..n]log(i) >= sum[i=n/2..n]log(i) >= sum[i=n/2..n]log(n/2) = (n/2)*log(n/2)
所以Omega(n*log(n))
答案 1 :(得分:0)
可以使用任何限制上述Log(n)的函数g(n)。实际上,Log(n)= O(g(n))意味着S(n)= O(f(n))其中f(n)=Σg(i)。
例如g(n)= n使用三角数公式确定S(n)= O(n²)。
如果你想要一个紧束缚,你可以注意到ΣLog(i)= Log(n!),然后使用Stirling formula。
如果不允许使用斯特林公式,请取Lg(i)的最大值(基数2对数)。它们遵循常规模式,从1开始: 0,1,2,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,2,5,3,5,3,5,4,5,4,5,4,5,4,5,4,5,4,5,4,5,4,5,4,5,4,5,5,5,5,5,5,5,5,5,5 5,5,5,5,5,5,5 ......
每次运行的长度加倍,因此n的总和不超过Lg(n)个不同的运行,并且总和受n.ceiling(Lg(n)+1)的限制。
推理对自然对数有效,因为所有对数都是成比例的:Log(i)= Lg(i)/ Lg(2)。
ΣLog(i)= O(n.Log(n))。
答案 2 :(得分:0)
从此link中查看此内容。
@Yves Daoust钉出总和值。简而言之(当n = 16,基数= 2时):
0 + 1 + 2 + 2 + 3 + 3 + 3 + 3 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 = 1 +(2 * 2)+(4 * 3)+( 8 * 4)。
用base&gt; = 3测试它以更清楚地看到模式(了解上面的封闭形式)。