2014-10-05 40 views
4

我没有得到第二个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"); 
    } 
} 
+0

看看'j = j + i' – tangrs 2014-10-05 11:49:26

+0

是的j = j + i,我们如何继续。如何计算依赖循环的T(n)? – Hari 2014-10-05 11:51:20

+2

非常类似的问题:http://stackoverflow.com/questions/18863422/asymptotic-analysis – 2014-10-05 12:02:58

回答

5

对于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)

+0

真棒!但是,你能用产品规则找到T(n)来帮助我解决问题吗? @saadtaame – Hari 2014-10-05 11:56:49

+1

这是一款产品!第二个因素与你习惯的有点不同。如果内循环执行了'm'次,例如你会写'm + m + ... + m','m'出现'n'次。说得通? – saadtaame 2014-10-05 12:06:15

2
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)

相关问题