Algorithm 1. STACKSTUFF(n)
Input: Integer n
1) Let S = an empty Stack
2) Let X = -1
3) For i = 1 to 2n
4) S.Push(i)
5) End For
6) For i = 1 to n
7) Let X = S.Pop()
8) End For
Output: The contents of X
1) What is this algorithm written in pseudo code doing?
据我了解,S.Push(i) 将项目 i 添加到堆栈 S 的顶部。X = S.Pop() 从堆栈 S 的顶部删除项目并将其分配给 X。
2) What is the computational complexity O(n) for algorithm 1, STACKSTUFF?
我相信答案是:O(3n)
第一个循环是 2n,第二个循环是 n,所以 2n+n=3n。
或者......答案是否只是 O(n^2),因为我们所要做的就是 n*n?
3) If n > 0 then what is returned by the algorithm? What about n < 1
a) 2n
b) -1
c) n-1
d) n+1
e) None of the above
最后一点真的让我很困惑。根据我的理解,如果 n 始终大于 0,则算法将始终返回 n+1,如果 n 始终小于 1,则算法将返回 n-1。然而,这纯粹是猜测工作......
如果我从逻辑上考虑这一点,那么比如说 n 是 3。由于第一个 For 循环是 1 到 2n,那么这意味着我们最终会得到以下堆栈 S={1,2,3,4,5,6},因为它将每个数字加倍 n 到 S 中。然后第二个 For 循环弹出 3 个数字,因此 X 最终看起来像这样 X={6,5,4}。如果我在那里是正确的...我是否应该假设这只是一个技巧问题而答案是 e,以上都不是?
在继续学习之前,我只是想确保我的理解是正确的。谢谢你的帮助。