以下问题已在 GATE CS 2008 考试中提出。
1. 我们有一个包含 n 个元素的二叉堆,并希望向这个堆中插入更多的 n 个元素(不一定是一个接一个)。这需要的总时间是
(A) Θ(logn)
(B) Θ(n)
(C) Θ(nlogn)
(D) Θ(n 2 )
在二进制堆中插入的最坏情况时间复杂度是 O(Logn)(参考 Wiki)。因此,在大小为 n 的堆中插入 n 个元素应该花费 Θ(nlogn) 时间。
但选项(B)似乎是更合适的答案。 O(n) 复杂度的解决方案之一可以是将堆的 ‘n’ 个元素和其他 ‘n’ 个元素放在一起,并在 O(2n) = O(n) 中构造堆。感谢 pankaj 提出这个解决方案。
2. 使用队列数据结构实现了广度优先搜索算法。访问下图中节点的一种可能顺序是
(一) MNOPQR
(B) NQMPOR
(C) QMNPRO
(D) QMNPOR
答案 (C)
3. 考虑以下功能:
f(n) = 2^n
g(n) = n!
h(n) = n^logn
下列关于 f(n)、g(n) 和 h(n) 的渐近行为的说法中,正确的是?
(A) f(n) = O(g(n)); g(n) = O(h(n))
(B) f(n) = Ω(g(n)); g(n) = O(h(n))
(C) g(n) = O(f(n)); h(n) = O(f(n))
(D) h(n) = O(f(n)); g(n) = Ω(f(n))
答案 (D)
根据增长顺序: h(n) < f(n) < g(n) (g(n) 渐近大于 f(n) 并且 f(n) 渐近大于 h(n) ) 我们可以很容易地通过获取给定 3 个函数的日志来查看上面的顺序
lognlogn < n < log(n!) (logs of the given f(n), g(n) and h(n)).
注意 log(n!) = Θ(nlogn)
4. 确定一个整数在 n 个整数的排序数组中是否出现超过 n/2 次所需的最少比较次数是
(A) Θ(n)
(B) Θ(logn)
(C) Θ(log*n)
(D) Θ(n)
答案 (B)
有关详细信息,请参阅检查排序数组中的多数元素一文。