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

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

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

1. 设 X 是一个属于 NP 类的问题。那么以下哪一项是正确的?
(A) X 没有多项式时间算法。
(B) 如果可以在多项式时间内确定性地求解 X,则 P = NP。
(C) 如果 X 是 NP-hard,则它是 NP-完全的。
(D) X 可能是不可判定的。

答案 (C)
(A) 不正确,因为集合 NP 包括 P(Polynomial time solvable) 和 NP-Complete 。
(B) 不正确,因为 X 可能属于 P(与 (A) 相同的原因)
(C) 是正确的,因为 NP-Complete 集是 NP 和 NP-Hard 集的交集。
(D) 是不正确的,因为所有 NP 问题都可以在有限的操作集中判定。

2. 在最坏的情况下,使用选择排序对 n 个元素进行排序所需的交换次数是多少?
(A) Θ(n)
(B) Θ(n log n)
(C) Θ(n 2 )
(D) Θ(nn 2 log n)

答案 (A)
这是用于按升序排序的选择排序算法。

1. Find the minimum value in the list
   2. Swap it with the value in the first position
   3. Repeat the steps above for the remainder of the list (starting at
      the second position and advancing each time)

从算法中我们可以看出,选择排序只有在找到当前选取的元素的合适位置后才会执行交换。所以在选择排序中执行了 O(n) 次交换。
因为交换需要写入数组,所以如果写入内存比读取昂贵得多,则选择排序更可取。如果物品很大但钥匙很小,通常就是这种情况。写入时间至关重要的另一个示例是存储在 EEPROM 或闪存中的阵列。没有其他算法可以减少数据移动。

参考:
http://en.wikipedia.org/wiki/Selection_sort

3. 算法的运行时间由以下递推关系表示:

if  n <= 3  then   T(n) = n
    else T(n) = T(n/3) + cn

以下哪一项代表算法的时间复杂度?
(A) Θ(n)
(B) Θ(n log n)
(C) Θ(n 2 )
(D) Θ(n 2 log n)

答案(A)

T(n) = cn + T(n/3)
     = cn + cn/3 + T(n/9)
     = cn + cn/3 + cn/9 + T(n/27)
Taking the sum of infinite GP series. The value of T(n) will
be less than this sum.
T(n) <= cn(1/(1-1/3))
     <= 3cn/2

or we can say 
cn <= T(n) <= 3cn/2
Therefore T(n) = Θ(n)

这也可以使用主定理来解决递归问题。给定的表达式位于定理的情况 3 中。

4. 使用具有散列函数h(k) = k mod 10 的开放寻址和线性探测,将密钥 12、18、13、2、3、23、5 和 15 插入到长度为 10 的初始空散列表中。结果哈希表是什么?

答案 (C)
要了解开放寻址概念,您可以通过维基百科的以下几行
.
开放寻址或封闭散列是散列表中冲突解决的一种方法。使用这种方法,通过探测或搜索数组中的替代位置(探测序列)来解决散列冲突,直到找到目标记录,或找到未使用的数组槽,这表明数组中没有这样的键桌子。众所周知的探针序列包括:

线性探测,其中探测之间的间隔是固定的——通常为 1。
二次探测,其中探针之间的间隔线性增加(因此,指数由二次函数描述)。
双散列,其中每个记录的探测间隔是固定的,但由另一个散列函数计算。