Time complexity 理解时间复杂性:迭代算法

Time complexity 理解时间复杂性:迭代算法,time-complexity,computer-science,complexity-theory,Time Complexity,Computer Science,Complexity Theory,我对时间的复杂性很陌生,我似乎无法理解在最后实现这一点背后的逻辑: 100 (n(n+1) / 2) 对于此功能: function a() { int i,j,k,n; for(i=1; i<=n; i++) { for(j=1; j<=i; j++) { for(k=1; k<=100; k++) { print("hello");

我对时间的复杂性很陌生,我似乎无法理解在最后实现这一点背后的逻辑:

100 (n(n+1) / 2)
对于此功能:

function a() {
    int i,j,k,n;
        for(i=1; i<=n; i++) {
            for(j=1; j<=i; j++) {
                for(k=1; k<=100; k++) {
                    print("hello");
                }
            }
        }
}
如果我使用上面的算法来模拟结束方程,我将得到以下结果:

结束方程:

100 (n(n+1) / 2)
模拟

   i = 1, 2, 3, 4... n
   j = 1, 2, 3, 4... n
   k = 100, 300, 600, 10000
我通常在youtube上研究这些,得到大O,ω&θ的概念,但说到这个,我不知道它们如何以我给出的等式结束。请提供帮助,如果您有一些最佳实践,请分享

编辑: 至于我自己对答案的假设,它认为应该是这样的:

100 ((n+n)/2) or 100 (2n / 2)
资料来源:

https://www.youtube.com/watch?v=FEnwM-iDb2g
At around: 15:21

我想你的
I
j
是正确的,只是不清楚为什么你说
k=100200300…
在每个循环中,
k
1
运行到
100

让我们先考虑一下内部循环:

        k from 1 to 100:
            // Do something
内部循环是O(100)=O(1),因为它的运行时间不依赖于
n
。现在我们分析外部循环:

i from 1 to n:
    j from 1 to i:
        // Do inner stuff
现在,让我们计算一下内部填充执行了多少次:

i = 1     1 time
i = 2     2 times
i = 3     3 times
 ...        ...
i = n     n times
这是我们的经典
1+2+3+。。。n=n(n+1)/2
。因此,外部两个循环的时间复杂度为O(n(n+1)/2),这将降低为O(n^2)

整个事情的时间复杂度是O(1*n^2)=O(n^2),因为嵌套循环使复杂度成倍增加(假设内部循环的运行时间独立于外部循环中的变量)。这里要注意的是,如果我们没有在不同的阶段进行缩减,我们将得到O(100(n)(n+1)/2),这相当于O(n^2),因为big-O符号的性质

一些提示: 您要求提供一些最佳实践。以下是我在分析您发布的示例时使用的一些“规则”

  • 在时间复杂度分析中,我们可以忽略常数的乘法。这就是为什么即使内部循环执行了100次,它仍然O(1)。理解这一点是时间复杂性的基础。我们正在大规模地分析运行时,而不是计算时钟周期的数量
  • 对于运行时彼此独立的嵌套循环,只需增加复杂性。将O(1)循环嵌套在外部O(N^2)循环中会产生O(N^2)代码

  • 还有一些简化规则:

如果您可以将代码分成更小的部分(与我们分析
k
循环与外部循环的方法相同),那么您可以利用嵌套规则来找到组合的复杂性

关于ω/θ的注释:


θ是时间复杂度的“精确界”,而Big-O和Omega分别是上界和下界。因为没有随机数据(就像排序算法中的随机数据),我们可以得到时间复杂度的精确界,上界等于下界。因此,在这种情况下,如果我们使用O、ω或θ,没有任何区别。

一般来说,如果可以的话,您会希望减少时间复杂性。O(100(2n/2))与O(n)相同,因为大O不关心常数的乘法。谢谢你的详细介绍,先生:)我非常感谢,因为我对这门学科不熟悉。我目前正在阅读你在答案中添加的所有链接,因为这将有助于我进一步了解时间的复杂性
i = 1     1 time
i = 2     2 times
i = 3     3 times
 ...        ...
i = n     n times