Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Loops 查找具有多个嵌套循环的Big-O? int num=n/4; 对于(int i=1;i_Loops_Nested_Big O - Fatal编程技术网

Loops 查找具有多个嵌套循环的Big-O? int num=n/4; 对于(int i=1;i

Loops 查找具有多个嵌套循环的Big-O? int num=n/4; 对于(int i=1;i,loops,nested,big-o,Loops,Nested,Big O,O((n^3)/4)在大O表示法中没有意义,因为它是用来衡量作为参数比率的复杂性的。除以4没有任何效果,因为这会改变比率的值,但不会改变其性质 所有这些都是等效的: int num = n/4; for (int i = 1; i <= num; i++) { for (int j = 1; j <= n; j++) { for (int k = 1; k <= n; k++) { int count = 1; }

O((n^3)/4)
在大O表示法中没有意义,因为它是用来衡量作为参数比率的复杂性的。除以4没有任何效果,因为这会改变比率的值,但不会改变其性质

所有这些都是等效的:

int num = n/4;
for (int i = 1; i <= num; i++) {
    for (int j = 1; j <= n; j++) {
        for (int k = 1; k <= n; k++) {
            int count = 1;
        }
    }
}
其他术语只有在包含
n
术语时才有意义,例如:

O(n^3)
O(n^3/4)
O(n^3*1e6)
正如Anthony Kanago正确指出的那样,按照惯例:

  • 只保留总和增长率最高的项:
    O(n^2+n)=O(n^2)
  • 去掉产品的常数:
    O(n^2/4)=O(n^2)
顺便说一句,我并不总是同意第一条规则。这是一条确定函数最大增长率的好规则,但是,对于算法比较(a)这样的事情,你可以智能地限制输入参数,像
O(n^4+n^3+n^2+n)
明显比
O(n^4)
更糟糕

在这种情况下,任何依赖于输入参数的项都应该包括在内。事实上,即使是常量项也可能有用。例如,将
O(n+1e100)
O(n^2)
进行比较,后者将在相当长的一段时间内优于前者,直到
n
变得足够大,足以对常量项产生影响



(a) 当然,有人会说,不应该以这种方式使用它,但实用主义在现实世界中常常克服教条主义:-)

从中可以看出,像1/4这样的常数在确定大O符号方面不起作用。唯一有趣的事实是它是n^3,因此是O(n^3)。

一个小的技术性问题。大O表示法旨在根据输入的“大小”而不是数值来描述复杂性。如果您的输入是一个数字,那么输入的大小就是您的数字的位数。唉,您的算法是O(2^N^3),N是位数


从形式上讲,时间复杂度可以推导如下:


智能编译器可能会将此循环嵌套优化为O(1),因为它实际上什么都不做。“智能”编译器会将其置之一旁,除非另有说明-它可能是嵌入式系统中的一个计时循环,通过透析机控制血流量:-)有更好的方式实现计时(几乎用任何语言)而不是创建没有定义执行时间的无意义循环!此外,n^3+n将
+n
作为一个可以删除的低阶项包含在内。谢谢,@Anthony,我刚刚收集了一些示例,我应该在发布之前仔细阅读它们。只有当您的姓不是“Knuth”时,这才是正确的这真的没有什么意义,只是没有遵循简化的惯例。你把我丢在这里了,@token。这个循环中的“大小”显然是数值,而不是位数(这需要在n的某个地方有一个logbase-10)。
O(n^3 / log(n))
O(n^3 * 10^n)