Time complexity 从数学上定义循环的时间复杂度

Time complexity 从数学上定义循环的时间复杂度,time-complexity,Time Complexity,用数学术语来说,这个程序的复杂性是什么 int main() { int k = 1, n; cin >> n; //User Input while(k < n) { k = 7*k+5; } } intmain() { int k=1,n; cin>>n;//用户输入 而(k

用数学术语来说,这个程序的复杂性是什么

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

  while(k < n)
  {
     k = 7*k+5;
  }
}
intmain()
{
int k=1,n;
cin>>n;//用户输入
而(k

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

“k=7*k+5”中的“5”一词并不像看上去那么微不足道,因为它包含在每次迭代的乘法中。我们将获得序列- “1,12,89628440130812”表示n=100000。 这就是问题的症结所在。这就是我想要解决的实际问题。请在对该问题进行表决时慎重考虑。

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

2) 循环迭代
log(n)

总操作数等于
O(logn)
。或:


在等式
k=7*k+5
中,术语
5
非常不重要,可以忽略。因此,我们得到了一个序列,其增长如下:

1,7,49343,…,n

此循环将运行的次数(
r
)为


因此,它将略大于O(1)
,几乎等于O(log(7)n)

它的可能副本不是副本。链路采用传统方法计算复杂度,方法是计算循环数,并对“logn”情况使用分治方法。这个链接并没有回答这个问题。复杂性实际上可能是O(1)。但从理论上讲,它不是。问题是,n的确切数字是什么,因为它没有定义。k=7*k+5中的术语“5”包含在每次迭代的乘法中。我们将得到序列-'1,12,89,628,4401,30812',为了便于计算,我忽略了它。否则将不得不使用归纳法进行证明。结果几乎相同,因此这是一个安全的假设
n = 1*(7^(r-1)) => log(7)n = (r-1) => r = log(7)n+1