【发布时间】:2014-03-23 04:20:35
【问题描述】:
给定以下代码-:
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j = j+i)
{
//Do something
}
我知道外循环运行N 次,而内循环运行大约log(N) 次。这是因为在 i、j 的每次迭代中运行 ceil(N)、ceil(N/2)、ceil(N/4) 次等等。这只是一个粗略的计算,通过它可以猜测时间复杂度肯定是O(N log(N))。
我如何在数学上证明相同?
我知道对于 i<sup>th</sup> 迭代,j 递增 ceil(N/2<sup>(i - 1)</sup>)。
【问题讨论】:
-
您可能喜欢使用我在 myanswer 中使用的方法:A puzzle related to nested loops,但这需要时间。
-
@Alp j 每次迭代都会增长 i,而不是 1。
-
不确定但可能会有所帮助:what is value of x in term of n? 这是one more question
-
@GrijeshChauhan:这个例子很好,但我正在寻找一个合适的数学证明,我会将
log应用于基数 2。 -
也许我在考虑迭代递归求解,这里显然不能应用。
标签: big-o time-complexity pseudocode