以数学方式定义循环的时间复杂度

时间:2018-04-22 08:29:39

标签: time-complexity

这个程序在数学方面的复杂性是什么?

int main()
{
  int k = 1, n;
  cin >> n; //User Input

  while(k < n)
  {
     k = 7*k+5;
  }
}

这将与传统的“分而治之”不同。复杂性实际上可能是O(1)。但从理论上讲,事实并非如此。重点是解决这些问题的方法是什么?

'k = 7 * k + 5'中的术语'5'并不像看起来那么微不足道,因为它包含在每次迭代的乘法中。我们将得到序列 - '1,12,89,628,4401,30812',n = 100000。 这就是问题的关键。这是我想解决的实际问题。在对这个问题进行投票时要体谅。

2 个答案:

答案 0 :(得分:1)

1)k=7*k+5的时间复杂度等于O(1)

2)循环迭代log(n)

总操作等于O(logn)。 OR:

答案 1 :(得分:-1)

在等式k = 7*k+5中,术语5非常微不足道,可以忽略。所以我们得到的序列就像:

1,7,49,343,.....,n

此循环运行的次数(r)是

n = 1*(7^(r-1)) => log(7)n = (r-1) => r = log(7)n+1

因此它会比O(1)稍微大一点,几乎等于O(log(7)n)