📜  数据结构和算法 | 14套

📅  最后修改于: 2021-09-27 06:24:09             🧑  作者: Mango

以下问题已在 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)

有关详细信息,请参阅检查排序数组中的多数元素一文。