Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 任何循环(比如for循环)的实际时间复杂度是多少?_Algorithm_Time Complexity - Fatal编程技术网

Algorithm 任何循环(比如for循环)的实际时间复杂度是多少?

Algorithm 任何循环(比如for循环)的实际时间复杂度是多少?,algorithm,time-complexity,Algorithm,Time Complexity,当我们必须计算一个循环的复杂度时,比如说一个FOR循环(它需要运行n次),当FOR循环的条件失败并且中断时,我们是否也应该计算迭代次数 下面是一个例子: i和n是正整数 for(i=0;i<n;i++) { //some code. All are constant expressions and there are no break statements. } for(i=0;i计算函数计算复杂度的主要目的是确定该函数是否会随着n的增加而扩展,而不是确定它将为特定的n值运行多少次

当我们必须计算一个循环的复杂度时,比如说一个FOR循环(它需要运行n次),当FOR循环的条件失败并且中断时,我们是否也应该计算迭代次数

下面是一个例子:

i
n
是正整数

for(i=0;i<n;i++)
{
   //some code. All are constant expressions and there are no break statements.
}

for(i=0;i计算函数计算复杂度的主要目的是确定该函数是否会随着n的增加而扩展,而不是确定它将为特定的n值运行多少次。例如,当n为1时,循环可能运行得非常快,但如果n突然变为1000,它是否会(大约)运行是原来时间的1000倍,还是你在寻找一个更高的因素


像您给出的那样的for循环将始终运行(最坏情况下)n次。无论n是100还是10^30,循环都将涉及n次迭代。从更大的角度来看,对该循环进行额外的比较是无关紧要的;如果您处理的是10^30次迭代,那么一次额外的迭代将不会产生任何影响。

如果您确实需要确切地说,引入一些常量。
a
是检查循环条件一次的时间,
b
是运行循环中所有命令的时间。循环将在以下总时间内运行:

a(n+1) + bn = (a+b)n + a
但是,由于其他答案所解释的原因,您很少需要如此精确。当
n
a
大得多时,执行
a
一次的时间与全局无关。这就是为什么我们删除所有低阶项和常量,并说:

(a+b)n + a ∈ Θ(n)

如前所述,时间复杂度是渐进的——这意味着如果你有一个从1到n的循环
不管你在循环中做了多少次操作,只要它们是最终的,复杂度将是
O(n)
,因为
O(10000n)=O(n)
时间复杂度是不考虑常数的。正如MZF所说,..O(an+c)=O(n)其中‘a’和‘c’是常数。但如果for循环中还有一个循环,那么时间复杂度将是O(a(n^2)+c),依此类推……

无论如何,
O(n+1)
O(n)
,就像任何给定的
g
O(f+g)=O(f)
由于计算复杂度是渐近的。是的,我理解这一点,但准确地说,如果我必须知道时间复杂度将计算多少次迭代,那么这算什么?这没有意义-复杂度的定义是有原因的。它与迭代次数无关。它与
n
影响迭代次数。在这种情况下,它是线性的,即
O(n)
。想象一下:如果你为不同的
n
绘制迭代次数,它会是一条直线吗?
n/100
也是线性的,
O(n)
,例如。是@Keyser,我理解。可能我在这里的问题不太清楚。我知道对于时间复杂度(读取Big-O),常数被消除,因为它们不依赖于N(输入大小)。所以O(N+1)=O(N),O(2N)=O(N)以此类推,我想说的是,前面提到的FOR循环的复杂度将需要多少次迭代,n或n+1,尽管它们将得到相同的答案。