这个算法的大符号是什么?

What is the big o notation of this algorithm?

for(int i = 0; i < n; ++i)
{
    for(int x = i; x < n; ++x)
    {
        // work... 
    }
}

这种算法的大 o 表示法是什么?另外,请向我解释一下您是如何提出解决方案的。

另外,抱歉标题含糊不清,但我不知道这种算法的名称。

这是我尝试过的:

如果 n 是:

1,将有1个工作执行。

2,会有3个工作执行。

3,会有6个工作执行。

4,将有10个工作执行。

5,会有15个工作执行。

评论中的人说它是 n^2 但我得到的数字与结果不匹配,因为 5^2 是 25 而不是 15

大O符号是从计算时间复杂度中推导出来的。您必须考虑算法的工作量。

请看下面我推导出 Big 0 的答案。这是使用 LateX,这是一个很好的写方程的工具。

注释

  • 巨大的 E 符号 - 被称为 Sigma。这是一个数学符号,用于编写算法来注释循环函数。将其视为您的 for - 底部术语就像您的 i=0,顶部术语就像您的 i < n.

  • (n-1)表示内循环的工作。 - 为了计算这个,我们将等式分成两个单独的 Sigmas - 因为 i 推导起来更复杂。

  • 注意内部循环如何不是 运行 n 次而是 n-i 次。另外,第 (3) 行——为了理解 i 是什么——我们使用求和法(也许是法则 6?)。

为了得到 n^2 - 我们从等式中删除常数以及不支配函数增长的项。