该函数将被调用多少次?

时间:2014-01-12 17:37:44

标签: algorithm complexity-theory

我有这个周期:

for(i = 0; i < n; i ++) {
    if(i % 5 == 1 && i % 3 == 1) {
        function();
    }
}

如何在不运行此代码的情况下计算function()的调用量?

4 个答案:

答案 0 :(得分:3)

我从你需要一些Theta表达式的complexity-theory标签中取出。 if导致你的函数每十五次执行一次,这是一个常数因子,所以执行次数仍然是Theta(n)。

答案 1 :(得分:1)

条件有两个表达式。第一个表达式每5次迭代成立,第二个表达式每3次迭代成立。他们一起每15轮就拥有真正的apprx并且function()被召唤。

答案 2 :(得分:0)

查看条件所适用的i的值:

  • 1
  • 16
  • 31
  • 46
  • 61
  • 76
  • 91
  • 106
  • 121
  • 136
  • 151
  • 166
  • 181
  • 196
  • ...

现在,如果你有条件i % 5 == 0 && i % 3 == 0,它必须是15(lcm(3,5))的倍数,那么条件将在每第15次迭代时保持不变。从那以后你可以自己得出这种关系。

答案 3 :(得分:0)

i = 15*k +1时,if语句为真,其中k为整数。对于(0,n)内的总数,由k = floor((n-1)/15) + 1给出,例如n = 31,k = floor((31-1)/15) + 1 = 3,即(1,16,31)