Big o 内部循环从i+开始;1与整数和的关系

Big o 内部循环从i+开始;1与整数和的关系,big-o,Big O,根据盖尔·拉克曼·麦克道尔(Gayle Laakmann McDowdell)的《破解编码采访》(Cracking the Coding Interview)一书,类似这样的循环 for (let i = 0; i < array.length; i++) { for (let j = i + 1; j < array.length; j++) { } } for(设i=0;i

根据盖尔·拉克曼·麦克道尔(Gayle Laakmann McDowdell)的《破解编码采访》(Cracking the Coding Interview)一书,类似这样的循环

for (let i = 0; i < array.length; i++) {
    for (let j = i + 1; j < array.length; j++) {

    }
}
for(设i=0;i
运行时为
O(n^2)
。这是因为它从
N(N-1)/2
减少。这本书给出了“整数之和”的例子,其中规则是
N(N+1)/2
,作为证据

我想我从书中的例子中理解了
N(N+1)/2
是如何工作的。您会得到一系列数字:

1,2,3,4

将低值与高值配对

1+4=5

2+3=5

结果
5=4+1
因此
N+1
由于我们已经从序列中创建了两个组,因此我们希望乘以N长度的一半:
N+1*N/2

我似乎无法将这个逻辑应用于向循环创建的数字添加低数字和高数字,并得到n-1。如果N为5,则内部循环将运行

4(次)、3(次)、2(次)、1(次)


有了这些递减的数字,我看不出上面的配对规则如何与此相适应,从而得到
n-1
?有配对规则吗?
n-1是如何派生的?

为什么要配对这些数字?这真的比那简单多了。让
n=array.length

内循环在外循环的第一次迭代中有
n-1
次迭代,然后在外循环的第二次迭代中有
n-2
次迭代等。因此,总步骤数为
(n-1)+(n-2)+……+1
。这当然是
n(n-1)/2


更新 我想很明显,
1+2+…+n=n(n+1)/2
来自高中数学。但这里有一个解释

您可以使用数学归纳法正式证明结果。但你也可以给出一个直观和非正式的推导(这就是你所说的“配对”)——据说年轻的卡尔·弗里德里希·高斯(Carl Friedrich Gauss)在小学时提出了这个观点:

1     +   2   + ... + (n-1) +   n   = x
n     + (n-1) + ... +   2   +   1   = x  (just the first line in reverse)
(n+1) + (n+1) + ... + (n+1) + (n+1) = 2x (adding the first two lines)
                             n(n+1) = 2x (counting the (n+1)'s)
                           n(n+1)/2 = x  (dividing both sides by 2)
现在如果我们只想数到n-1怎么办?如果您愿意,您可以再次使用相同的技巧来推导总和:

  1   +   2   + ... + (n-2) + (n-1) = x
(n-1) + (n-2) + ... +   2   +   1   = x  (just the first line in reverse)
  n   + n     + ... +   n   +   n   = 2x (adding the first two lines)
                             (n-1)n = 2x (counting the n's)
                           n(n-1)/2 = x  (dividing both sides by 2)

但实际上这太乏味了。既然你知道
1+2+…+n=n(n+1)/2
,您只需将此公式中的
n
替换为
n
,即可立即获得
n(n-1)/2
,谢谢您的回复。书中使用了数字配对来显示为什么
N(N+1)/2
等于整数1到N的和,但不清楚这一解释与
N(N-1)/2的关系。我想知道这条规则是否与
N(N-1)/2
完全无关,
N(N-1)/2
是负整数的和,因为它是负整数,就是这样。我想我现在明白了你所说的“配对”,并相应地更新了我的答案。那现在回答你的问题了吗?是的,完全正确,我的数学很糟糕,再次感谢。