我沒有得到第二個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