📜  数据结构和算法 |组5

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

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

1. 考虑以下 C函数。

float f(float x, int y) 
{ 
  float p, s; int i; 
  for (s=1, p=1, i=1; i < y; i ++) 
  { 
    p*= x/i; 
    s+=p; 
  } 
  return s; 
}   

对于较大的 y 值,函数f 的返回值最接近(GATE CS 2003)
a) x^y
b) e^x
c) ln(1 + x)
d) x^x

答案(二)
函数f() 是泰勒级数的实现,用于计算 e^x

e^x = 1 + x + x^2/2! + x^3/3! + ---

More is the value of y 更精确的 e^x 值将由 f() 返回

参考:
http://en.wikipedia.org/wiki/E_%28mathematical_constant%29

2. 在最坏的情况下,为给定元素搜索长度为 n 的单向链表所需的比较次数是 (GATE CS 2002)
a) 记录 2 n
b) n/2
c) 记录 2 n – 1
d) n

答案(d)
在最坏的情况下,要搜索的元素必须与链表的所有元素进行比较。

3. 将元素32、15、20、30、12、25、16按照给定的顺序一个一个插入到一个最大堆中。由此产生的最大堆是。

tree

答案(一)

4. 考虑以下三个声明
I (n + k)^m = Θ(n^m),其中 k 和 m 是常数
II 2^(n + 1) = 0(2^n)
三 2^(2n + 1) = 0(2^n)
这些说法中哪些是正确的? (GATE CS 2003)

(a) I 和 II
(b) I 和 III
(c) 二和三
(d) 一、二、三

答案(一)

(I)  (n+m)^k = n^k + c1*n^(k-1) + ... k^m = Θ(n^k)
(II)  2^(n+1) = 2*2^n = O(2^n)

5. 单个数组 A[1..MAXSIZE] 用于实现两个堆栈。两个堆栈从阵列的两端增长。变量 top1 和 top2 (topl< top 2) 指向每个堆栈中最顶层元素的位置。如果要有效地使用空间,“堆栈已满”的条件是 (GATE CS 2004)
a) (top1 = MAXSIZE/2) 和 (top2 = MAXSIZE/2+1)
b) 顶部 1 + 顶部 2 = MAXSIZE
c) (top1= MAXSIZE/2) 或 (top2 = MAXSIZE)
d) 顶1=顶2 -1