📜  数据结构和算法 | 12套

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

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

1. 考虑以下 C 程序段,其中 CellNode 表示二叉树中的一个节点:

struct CellNode 
{
  struct CellNOde *leftChild;
  int element;
  struct CellNode *rightChild;
};
  
int GetValue(struct CellNode *ptr) 
{
  int value = 0;
  if (ptr != NULL) 
  {
   if ((ptr->leftChild == NULL) &&
        (ptr->rightChild == NULL))
      value = 1;
   else
      value = value + GetValue(ptr->leftChild)
                   + GetValue(ptr->rightChild);
  }
  return(value);
}

当指向二叉树根的指针作为其参数传递时,GetValue() 返回的值是:
(A) 树中的节点数
(B) 树中内部节点的数量
(C) 树的叶子节点数
(D) 树的高度

答案 (C)
有关解释,请参阅我们的帖子 https://www.geeksforgeeks.org/?p=2755 以计算叶节点。

2. 考虑将元素插入Max Heap的过程,其中Max Heap用数组表示。假设我们在从新叶子到根的路径上进行二分查找以找到新插入元素的位置,执行的比较次数为:
(A) Θ(logn)
(B) Θ(LogLogn )
(C) Θ(n)
(D) Θ(nLogn)

答案 (B)
最大堆的高度是 Θ(logn)。如果我们执行二分搜索以找到正确的位置,那么我们需要进行 Θ(LogLogn) 比较。

3. 设 w 为无向连通图中所有边权重中的最小权重。设 e 是权重 w 的特定边。以下哪项是错误的?
(A) 存在包含 e 的最小生成树。
(B) 如果 e 不在最小生成树 T 中,则在将 e 加到 T 形成的循环中,所有边都具有相同的权重。
(C) 每个最小生成树都有一个权重为 w 的边。
(D) e 存在于每个最小生成树中。

答案 (D)
(A)、(B)和(C)是正确的。
(D) 是不正确的,因为图中可能有很多 wight w 的边,并且 e 可能不会在一些最小生成树中被拾取。

4. 给出一个 n 数的数组,其中 n 是偶数。需要确定这 n 个数字中的最大值和最小值。关于所需的比较次数,以下哪一项是正确的?
(A) 对于某些常数 c,至少需要 2n – c 次比较。
(B) 最多需要 1.5n – 2 次比较。
(C) 至少需要 nLog2n 次比较。
(D) 以上都不是。

答案 (B)

有关详细信息,请参阅帖子 https://www.geeksforgeeks.org/?p=4583。

5. 考虑以下 C 代码段:

int IsPrime(n)
{
  int i,n;
  for(i=2;i<=sqrt(n);i++)
   if(n%i == 0)
     {printf(“Not Prime\n”); return 0;}
  return 1;
}

让 T(n) 表示程序在输入 n 上执行 for 循环的次数。以下内容哪些是对的?
(A) T(n) = O(sqrt(n)) 和 T(n) = Ω(sqrt(n))
(B) T(n) = O(sqrt(n)) 和 T(n) = Ω(1)
(C) T(n) = O(n) 和 T(n) = Ω(sqrt(n))
(D) 以上都不是

答案 (B)
Big O 表示法描述了算法的上限,Big Omega 表示法描述了算法的下限。

问题中的for循环运行最大 sqrt(n) 次和最小 1 次。因此,T(n) = O(sqrt(n)) 和 T(n) = Ω(1)

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