我正在研究一个功能:
total = 0;
for (i = 0; i < N; i++){
for (j = 0; j < i*i; j++){
if (j % i == 0){
for (k=0; k < j; k++){
total++;
当你将它分解时,我为这个N ^ 4或N ^ 5的大O号。我不知道如何处理该内循环的%符号和运行时间。
答案 0 :(得分:1)
大致相当的代码是
total=0;
for (i=1; i<=N; i++)
for(j=1; j <= i*i; j+= i)
for (k=1; k <= j; k++)
total++;
将j
限制为可以被i
整除的值。将每个变量的范围移动一个避免了i = 0
的问题。
再次重写
total=0;
for (i=1; i<=N; i++)
for(j=1; j <= i; j+= 1)
for (k=1; k <= j*j; k++)
total++;
j
循环迭代次数相同,但是直接在平方数上进行迭代,我们简单地迭代简单整数并将乘法移到k
循环中。从这一点来看,应该更容易证明total
增量为O(N ^ 4)次:内部k
循环运行O(N ^ 2)次,并且自身迭代O( N ^ 2)值。