我无法理解函数f(x)的含义,它表示在某些代码中执行的操作数。
int sum = 0; // + 1
for (int i = 0; i < n; i++)
for (int j = 1; j <= i; j++)
sum = sum + 1; // n * (n + 1) / 2
(请注意,最后一条评论的分子中没有2,但下面的函数中有。)
然后我的笔记说f(x)= 2n(n + 1)/ 2 + 1 = O(n ^ 2)
我明白因为有两个for循环,无论f(x)是什么,它都是= O(n ^ 2),但为什么时间估计它是什么? j&lt; =我如何给你n *(n + 1)?分母中的2怎么样?
答案 0 :(得分:3)
在整个代码执行过程中,考虑内部循环运行的次数。注意
这意味着最内圈循环的总次数由
给出0 + 1 + 2 + 3 + 4 + ... +(n - 1)
这是一个着名的总结,它解决了
0 + 1 + 2 + 3 + 4 + ... +(n - 1)= n(n - 1)/ 2
这是n - 1st triangular number,值得将此提交给记忆。
给出的数字 - n(n + 1)/ 2 - 似乎不正确,但它非常接近真实数字。我认为他们认为循环会运行1 + 2 + 3 + ... + n次而不是0 + 1 + 2 + ... + n - 1次。
由此可以更容易地看出O(n 2 )术语的来源。注意n(n - 1)/ 2 = n 2 / 2 - n / 2,所以在big-O land中我们放下常数和低阶项,我们留下n 2