以下问题已在 GATE CS 2014 考试中提出。
1) 设 G 是一个有 n 个顶点和 m 个边的图。 G 的深度优先搜索的运行时间的最紧上限是多少?假设图是用邻接矩阵表示的。
(A) O(n)
(B) O(m+n)
(C) O(n 2 )
(D) O(mn)
答案: (C)
说明:当使用邻接表表示图时,图的深度优先搜索需要 O(m+n) 时间。
在邻接矩阵表示中,图被表示为“nx n”矩阵。为了做 DFS,对于每个顶点,我们遍历与该顶点对应的行以找到所有相邻的顶点(在邻接表表示中,我们只遍历顶点的相邻顶点)。因此时间复杂度变为 O(n 2 )
2) 考虑使用指针表示的有根二叉树。确定具有恰好 4 个节点的子树的数量所需时间的最佳上限 O(n a Logn b )。那么 a + 10b 的值是________
答案: 1
解释:我们可以在 O(n) 时间内找到具有 4 个节点的子树。以下可以是一个简单的方法。
1)自底向上遍历树,找到以当前节点为根的子树的大小
2)如果size变为4,则打印当前节点。
int print4Subtree(struct Node *root)
{
if (root == NULL)
return 0;
int l = print4Subtree(root->left);
int r = print4Subtree(root->right);
if ((l + r + 1) == 4)
printf("%d ", root->data);
return (l + r + 1);
}
3) 考虑下面给出的有向图。以下哪一项是正确的?
(A)该图没有任何拓扑排序
(B) PQRS 和 SRPQ 都是拓扑排序
(C) PSRQ 和 SPRQ 都是拓扑排序
(D) PSRQ 是唯一的拓扑排序
答案: (C)
说明:该图不包含任何环,因此存在拓扑排序。
P 和 S 必须出现在 R 和 Q 之前,因为从 P 到 R 和 Q,以及从 S 到 R 和 Q 都有边。
有关更多详细信息,请参阅拓扑排序。
4) 让 P 成为一个 QuickSort 程序,使用第一个元素作为主元按升序对数字进行排序。设 t1 和 t2 分别是 P 对输入 {1, 2, 3, 4, 5} 和 {4, 1, 5, 3, 2} 进行的比较次数。以下哪一项成立?
(A) t1 = 5
(B) t1 < t2
(C) t1 > t2
(D) t1 = t2
答案: (C)
Explanation: When first element or last element is chosen as pivot, Quick Sort’s worst case occurs for the sorted arrays.
在快速排序的每一步中,数字按照以下循环进行划分。
T(n) = T(n-1) + O(n)
5) 考虑以下 C函数,其中 size 是数组 E 中的元素数:
函数MyX 返回的值是
int MyX(int *E, unsigned int size)
{
int Y = 0;
int Z;
int i, j, k;
for (i = 0; i < size; i++)
Y = Y + E[i];
for (i = 0; i < size; i++)
for (j = i; j < size; j++)
{
Z = 0;
for (k = i; k <= j; k++)
Z = Z + E[k];
if (Z > Y)
Y = Z;
}
return Y;
}
(A)数组 E 的任何子数组中元素的最大可能总和。
(B)数组 E 的任何子数组中的最大元素。
(C)数组 E 的所有可能子数组中最大元素的总和
(D)数组 E 中所有元素的总和。
答案:(一)
说明:该函数执行以下操作
Y 用于存储迄今为止看到的最大和,Z 用于存储当前和
1) 将 Y 初始化为所有元素的总和
2) 对于每个元素,计算以 arr[i] 开头的所有子数组的总和。将当前和存储在 Z 中。 如果 Z 大于 Y,则更新 Y。
请参阅以下所有 GATE CS 2014 论文的完整解决方案
GATE-CS-2014-(Set-1)
GATE-CS-2014-(Set-2)
GATE-CS-2014-(Set-3)