我没有得到第二个for循环的T(n)是log(n)的部分。两个循环都通过 i连接,并且令人困惑。代码O(nlog(n))的T(n)如何使用基本乘积规则?代码O(nlog(n))的T(n)如何?
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j = j + i)
{
printf("Hi");
}
}
我没有得到第二个for循环的T(n)是log(n)的部分。两个循环都通过 i连接,并且令人困惑。代码O(nlog(n))的T(n)如何使用基本乘积规则?代码O(nlog(n))的T(n)如何?
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j = j + i)
{
printf("Hi");
}
}
对于i=1
内循环执行n
倍。对于i=2
内循环执行n/2
次等。运行时间为T(n) = n + n/2 + n/3 + ... + n/n
。这等于n(1 + 1/2 + 1/3 + ...+ 1/n) = nH(n)
,其中H(n)
是第n个谐波数。 H(n) ~ lg n
因此运行时间为O(n lg n)
。
for(i = 1; i <= n; i++) // Executes n times
{
for(j = 1; j <= n; j = j + i)
{ // This loop executes j times with j increases by rate of i
printf(“Hi”);
}
}
内环执行n/i
次的i
每个值。其运行时间为nxSum(n/i)
所有i
在[1,N]
=>O(nlogn)
看看'j = j + i' – tangrs 2014-10-05 11:49:26
是的j = j + i,我们如何继续。如何计算依赖循环的T(n)? – Hari 2014-10-05 11:51:20
非常类似的问题:http://stackoverflow.com/questions/18863422/asymptotic-analysis – 2014-10-05 12:02:58