以下问题已在 GATE CS 2005 考试中提出。
1) 程序 P 读取范围 [0..100] 内的 500 个整数,代表 500 名学生的分数。然后它打印每个分数高于 50 的频率。 P 存储频率的最佳方法是什么?
(a) 一个包含 50 个数字的数组
(b) 100 个数字的数组
(c) 500 个数字的数组
(d) 一个由 550 个数字组成的动态分配数组
答案(一)
大小为 50 的数组看起来是存储每个分数的学生人数的最佳选择。我们需要存储高于 50 的分数的频率。我们可以忽略低于 50 的分数,为了索引高于 50 的分数,我们可以从分数值中减去 50/
2) 一个无向图 G 有 n 个节点。它的邻接矩阵由一个 n × n 方阵给出,其 (i) 对角元素为 0,(ii) 非对角元素为 1。以下哪一项是正确的?
(a) 图 G 没有最小生成树 (MST)
(b) 图 G 有一个唯一的 MST,成本为 n-1
(c) 图 G 有多个不同的 MST,每个花费 n-1
(d) 图 G 有多个不同成本的生成树
答案 (c)
如果所有非对角元素都是 1,那么每个顶点都与图中的每个其他顶点相连,边的权重为 1。这样的图有多个不同的 MST,成本为 n-1。请参阅以下示例。
连通图:
下面是三棵最小生成树,每棵树的成本为 2.0。
最小生成树 1
最小生成树 2
最小生成树 3
3) 已知在一组 n 个元素上计算二元关系的传递闭包的时间复杂度为:
a) O(n)
b) O(nLogn)
c) O(n^(3/2))
d) O(n^3)
答案 (d)
在数学中,二元关系 R 在集合 X 上的传递闭包是 X 上包含 R 的最小传递关系。如果原始关系是传递的,则传递闭包将是相同的关系;否则,传递闭包将是不同的关系。
在计算机科学中,传递闭包的概念可以被认为是构建一个数据结构,使回答可达性问题成为可能。也就是说,可以在一跳或多跳中从节点 a 到达节点其他节点 b 吗?二元关系只告诉你节点 a 连接到节点 b,节点 b 连接到节点 c,等等。 在 O(1) 操作中构造传递闭包后,可以确定节点 c 可以从节点到达一种。
Warshall 算法可用于构造有向图 () 的传递闭包。在 Warshall 最初的算法公式中,图是未加权的,并由一个布尔邻接矩阵表示。然后加法运算被逻辑与(AND)取代,最小运算被逻辑或(OR)取代。
参考:
http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm
http://en.wikipedia.org/wiki/Transitive_closure
4. Priority-Queue 实现为 Max-Heap。最初,它有 5 个元素。堆的层序遍历如下:
10, 8, 5, 3, 2
两个新元素“1”和“7”按该顺序插入堆中。元素插入后堆的层序遍历为:
(a) 10, 8, 7, 5, 3, 2, 1
(b) 10, 8, 7, 2, 3, 1, 5
(c) 10, 8, 7, 1, 2, 3, 5
(d) 10, 8, 7, 3, 2, 1, 5
答案 (D)
原始最大堆是:
10
/ \
8 5
/ \
3 2
插入后 1。
10
/ \
8 5
/ \ /
3 2 1
7.插入后
10
/ \
8 7
/ \ / \
3 2 1 5
请参阅 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。