算法分析:大O /最差情况

时间:2013-02-10 14:24:52

标签: algorithm

家庭作业问题要求我分析以下代码片段:

for (int i = N; i > 0; i--)
    for (int j = 0; j < i; j++)

我认为内循环运行次数如下:

N + (N-1) + (N-2) + ... + (N - N + 1)

但是,我无法将其转换为O()表示法。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

通过观察,内环运行1 + 2 + ... + N次。这正是N(N + 1)/ 2(这是三角数的公式)。首先,记住big-O的定义:如果| f / g |,则f是O(g)限制为足够大的N.所以例如这是O(exp(n))并且它也是O(n ^ 3)。它也是O(N(N + 1)/ 2),但你的老师可能期望得到答案O(N ^ 2)。如何证明这是O(N ^ 2)?那么(N(N + 1)/ 2)/ N ^ 2是1/2 + 1 / 2N。对于N> 1,这是1。 0