📜  数据结构和算法 | 15套

📅  最后修改于: 2021-09-27 14:54:27             🧑  作者: Mango

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


1.在n个顶点和m个边上的无向图中寻找连通分量数的最有效算法具有时间复杂度。

(A) Θ(n)
(B) Θ(米)
(C) Θ(m + n)
(D) Θ(mn)

答案 (C)
可以使用 Tarjan 算法在 O(m + n) 中找到连通分量。一旦我们连接了组件,我们就可以计算它们。


2. 考虑快速排序算法。假设有一个过程可以找到一个主元元素,它将列表分成两个子列表,每个子列表至少包含五分之一的元素。令 T(n) 是排序 n 个元素所需的比较次数。然后

(A) T(n) <= 2T(n/5) + n (B) T(n) <= T(n/5) + T(4n/5) + n (C) T(n) <= 2T(4n/5) + n (D) T(n) <= 2T(n/2) + n 答案 (B) 对于 n/5 个元素在一个子集中的情况,T(n/5) 比较是需要具有 n/5 个元素的第一个子集,T(4n/5) 用于其余的 4n/5 个元素,n 用于查找主元。如果一个集合中有超过 n/5 个元素,那么其他集合的元素将少于 4n/5 个,时间复杂度将小于 T(n/5) + T(4n/5) + n,因为递归树将是更平衡。
3 Dijkstra 的单源最短路径算法从下图中的顶点 a 运行时,计算到正确的最短路径距离


(A) 只有顶点 a
(B) 只有顶点 a, e, f, g, h
(C) 只有顶点 a, b, c, d
(D) 所有顶点

答案 (D)
Dijkstra 的单源最短路径不能保证适用于具有负权重边的图,但它适用于给定的图。
让我们来看看…

让我们运行第一遍
乙 1
b 是最小值,所以到 b 的最短距离是 1。

第 1 次通过后,距离为
c 3, e -2。
e 是最小值,所以到 e 的最短距离是 -2

第 2 次通过后,距离为
c 3, f 0。
f 是最小值,所以到 f 的最短距离为 0

第 3 次通过后,距离为
c 3,g 3。
两者都是一样的,让我们以 g 为例。所以到g的最短距离是3。

第 4 次通过后,距离为
c 3, h 5
c 是最小值,所以到 c 的最短距离是 3

第 5 次通过后,距离为
小时 -2
h 是最小值,所以到 h 的最短距离是 -2

4. 下面的 C函数以整数的单链表作为参数并重新排列列表的元素。使用包含给定顺序的整数 1、2、3、4、5、6、7 的列表调用该函数。函数执行完成后列表的内容是什么?

struct node 
{
  int value;
  struct node *next;
};
void rearrange(struct node *list)
{
  struct node *p, * q;
  int temp;
  if ((!list) || !list->next) 
      return;
  p = list;
  q = list->next;
  while(q) 
  {
     temp = p->value;
     p->value = q->value;
     q->value = temp;
     p = q->next;
     q = p?p->next:0;
  }
}

(一) 1,2,3,4,5,6,7
(乙) 2,1,4,3,6,5,7
(C) 1,3,2,5,4,7,6
(四) 2,3,4,5,6,7,1

答案 (B)
函数rearrange() 与其下一个节点交换每个节点的数据。它开始从第一个节点本身交换数据。