📜  数据结构和算法 | 33套

📅  最后修改于: 2022-05-13 01:57:21.159000             🧑  作者: Mango

数据结构和算法 | 33套

以下问题已在 GATE CS 2014 考试中提出。

1) 考虑未加权、连通、无向图中从源节点 W 开始的 BFS 遍历的树弧。由树弧形成的树T是用于计算的数据结构。
(A) 每对顶点之间的最短路径。
(B) 从 W 到图中每个顶点的最短路径。
(C) 从 W 到 T 的叶子节点的最短路径。
(D) 图中最长的路径

答案:(乙)
BFS 总是在未加权图中生成从源到所有其他顶点的最短路径。原因很简单,在 BFS 中,我们首先探索距离源 1 边的所有顶点,然后探索距离源 2 边的所有顶点,依此类推。 BFS 的这一特性使其在许多算法中非常有用,例如 Edmonds-Karp 算法。


2) 考虑以下伪代码。要执行的乘法总数是多少?

D = 2
for i = 1 to n do
   for j = i to n do
      for k = j + 1 to n do
           D = D * 3 

(A) 3 个连续整数的乘积的一半。
(B) 三个连续整数的乘积的三分之一。
(C) 3 个连续整数的乘积的六分之一。
(D) 以上都不是。
答案 (C)
语句“D = D * 3”执行了n*(n+1)*(n-1)/6次。让我们看看如何。



对于 i = 1,乘法语句执行 (n-1) + (n-2) + .. 2 + 1 次。
对于 i = 2,语句执行 (n-2) + (n-3) + .. 2 + 1 次
………………………………
…………………………
对于 i = n-1,语句执行一次。
对于 i = n,该语句根本不执行

所以总的来说,语句是在以下时间执行的
[(n-1) + (n-2) + .. 2 + 1] + [(n-2) + (n-3) + .. 2 + 1] + … + 1 + 0

上面的系列可以写成
S = [n*(n-1)/2 + (n-1)*(n-2)/2 + ..... + 1]

上述系列的总和可以通过从标准系列中减去系列的技巧获得 S1 = n 2 + (n-1) 2 + .. 1 2 。这个标准系列的总和是n*(n+1)*(2n+1)/6

S1 – 2S = n + (n-1) + … 1 = n*(n+1)/2
2S = n*(n+1)*(2n+1)/6 – n*(n+1)/2
S = n*(n+1)*(n-1)/6


3) 考虑一个有 9 个槽的哈希表。散列函数是 h(k) = k mod 9。通过链接解决冲突。以下9个key按顺序插入:5, 28, 19, 15, 20, 33, 12, 17, 10。 哈希表中的最大、最小和平均链长分别为
(A) 3、0 和 1
(B) 3、3 和 3
(C) 4、0 和 1
(D) 3、0 和 2

答案:(一)
以下是所有键的哈希函数值

5 --> 5
28 --> 1
19 --> 1  [Chained with 28]
15 --> 6
20 --> 2
33 --> 6  [Chained with 15]
12 --> 3
17 --> 8
10 --> 1 [Chained with 28 and 19]

最大链长为 3。键 28、19 和 10 进入相同的插槽 1,并形成长度为 3 的链。
最小链长为 0,有空槽位(0、4 和 7)。
平均链长为 (0 + 3 + 1 + 1 + 0 + 1 + 2 + 0 + 1)/9 = 1




4) 优先级队列实现为最大堆。最初,它有 5 个元素。堆的层序遍历是:10, 8, 5, 3, 2。两个新元素1和7按这个顺序插入到堆中。元素插入后堆的层序遍历为:
(一) 10, 8, 7, 3, 2, 1, 5
(B) 10, 8, 7, 2, 3, 1, 5
(C) 10, 8, 7, 1, 2, 3, 5
(D) 10, 8, 7, 5, 3, 2, 1

答案:(一)

Initially heap has 10, 8, 5, 3, 2
    10
   /  \ 
  8    5
 / \
3   2

After insertion of 1
     10
   /   \ 
  8     5
 / \   /
3   2 1 
No need to heapify as 5 is greater than 1.


After insertion of 7
     10
   /   \ 
  8     5
 / \   / \
3   2 1   7
Heapify 5 as 7 is greater than 5
     10
   /   \ 
  8     7
 / \   / \
3   2 1   5
No need to heapify any further as 10 is
greater than 7 


5) 以下哪一项正确确定了 T(1) = 1 的递推关系的解?

T(n) = 2T(n/2) + Logn 

(A) Θ(n)
(B) Θ(nLogn)
(C) Θ(n*n)
(D) Θ(log n)

答案:(一)
这可以使用主方法来解决。它属于情况 1。


7) 假设实现支持一条指令 REVERSE,除了 PUSH 和 POP 指令外,还可以颠倒堆栈上元素的顺序。关于这个修改后的堆栈,以下哪一项陈述是正确的?
(A) 不能使用该堆栈实现队列。
(B) 可以实现一个队列,其中 ENQUEUE 接受一条指令,而 DEQUEUE 接受两个指令的序列。
(C) 可以实现一个队列,其中 ENQUEUE 接受三个指令的序列,而 DEQUEUE 接受单个指令。
(D) 可以实现一个队列,其中 ENQUEUE 和 DEQUEUE 都接受一条指令。

答案:(C)
要使项目出队,只需 POP。
为了 ENQUEUE 一个项目,我们可以做以下 3 个操作
1) 反转
2) 推
3) 反转

查看 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。