家庭作业问题要求我分析以下代码片段:
for (int i = N; i > 0; i--)
for (int j = 0; j < i; j++)
我认为内循环运行次数如下:
N + (N-1) + (N-2) + ... + (N - N + 1)
但是,我无法将其转换为O()表示法。
有人能指出我正确的方向吗?
答案 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