📜  数据结构和算法 |设置 4

📅  最后修改于: 2021-09-28 10:03:57             🧑  作者: Mango

以下问题已在 GATE CS 考试中提出。
1.考虑下面的C程序段

c
struct CellNode
{
  struct CelINode *leftchild;
  int element;
  struct CelINode *rightChild;
}
 
int Dosomething(struct CelINode *ptr)
{
    int value = 0;
    if (ptr != NULL)
    {
      if (ptr->leftChild != NULL)
        value = 1 + DoSomething(ptr->leftChild);
      if (ptr->rightChild != NULL)
        value = max(value, 1 + DoSomething(ptr->rightChild));
    }
    return (value);
}


c
int recursive (mt n)
{
   if (n == 1)
     return (1);
   else
     return (recursive (n-1) + recursive (n-1));
}


当指向非空树的根的指针作为参数传递时,函数DoSomething 返回的值是 (GATE CS 2004)
a) 树中叶节点的数量
b) 树中的节点数
c) 树中内部节点的数量
d) 树的高度
答案: (d)
说明: DoSomething() 返回 max(左孩子的高度 + 1,左孩子的高度 + 1)。因此,将指向树根的指针传递给 DoSomething(),它将返回树的高度。请注意,此实现遵循单个节点的高度为 0 的约定。

2.假设我们在下面以顶点P为源的边加权有向图上运行Dijkstra的单源最短路径算法。节点以什么顺序包含在确定最短路径距离的顶点集中? (GATE CS 2004)
a) P、Q、R、S、T、U
b) P、Q、R、U、S、T
c) P、Q、R、U、T、S
d) P、Q、T、R、U、S

门2004

答案(二)

3. 假设每个集合都表示为一个链表,其中元素的顺序是任意的。 union、intersection、membership、cardinality 中哪个操作最慢? (GATE CS 2004)
a) 仅工会
b) 交集、成员资格
c) 成员资格、基数
d) 并集、交集
答案: (d)
基数和成员资格绝对不是最慢的。对于基数,只需计算列表中的节点数。对于成员资格,只需遍历列表并查找匹配项
为了得到 L1 和 L2 的交集,在 L2 中搜索 L1 的每个元素并打印我们在 L2 中找到的元素。
有很多方法可以得到 L1 和 L2 的并集。其中之一如下
a) 打印 L1 的所有节点,只打印 L2 中不存在的节点。
b) 打印 L2 的节点。

4. 以下 C函数的时间复杂度为(假设 n > 0 (GATE CS 2004)

C

int recursive (mt n)
{
   if (n == 1)
     return (1);
   else
     return (recursive (n-1) + recursive (n-1));
}

a) 0(n)
b) 0(nlogn)
c) 0(n^2)
d) 0(2^n)
答案: (d)
解释:
上述程序的递归表达式将是。

T(n) = 2T(n-1) + c
T(1) = c1.

让我们解决它。

T(n) = 2(2T(n-2) + c) + c        = 4T(n-2) + 3c
T(n) = 8T(n-3) + 6c + c          =  8T(n-3) + 7c
T(n) = 16T(n-4) + 14c + c        =  16T(n-4) + 15c
...................................................
...................................................
T(n) = (2^(n-1))T(1) +  (2^(n-1) - 1)c
T(n) = O(2^n)