查找输出“ Hello”的最坏情况的次数

时间:2019-04-29 21:21:53

标签: time-complexity complexity-theory

上周我在一个测验中遇到了这个问题,但我不知道我们应该如何解决。这是问题(请参阅附件)。由于存在嵌套的for循环,因此我看到了n ^ 2的来源,但我不确定答案中的-n和* .5的来源。

Problem

1 个答案:

答案 0 :(得分:1)

“最坏情况”(例如,如果您称打印大量问候是“最坏情况” ...)是当A均为零时(例如),因此所有<=都等于true。 但是此循环运行多少次? n ^ 2:不是n + n + n + n次n ...看一下内循环!它不是从1到n-1,而是从1到i。因此打印输出的数量为1 + 2 + 3 + ... +(n-1)。恰好是n *(n-1)/ 2,即(n ^ 2-n)/ 2。证明非常容易(Gauss还是一个小男孩:-)),但是由于这是一个多项选择题,因此您只需测试一个n即可。

如果您想知道如何证明X = 1 + 2 + 3 + ... +(n-1)为n *(n-1)/ 2,这是高斯的把戏:在X上写两次X不同的顺序:

X = 1     +    2  +     3 + ... + (n-1)
X = (n-1) + (n-2) + (n-3) + ... + 1

现在将两个X相加。请注意,在每一列中如何有两个数字,它们的总和为n-1+(n-1)为n,2 +(n-2)为n,依此类推。因此,基本上整个总和具有n-1个n。所以

2*X = n * (n-1)

所以     X = n *(n-1)/ 2

您要解释的正是(n ^ 2-n)* 0.5。