📜  数据结构和算法 | 37套

📅  最后修改于: 2021-09-08 12:53:40             🧑  作者: Mango

Que – 1.对于具有统一散列和链接的散列表中的 8 个键和 6 个插槽,散列到特定位置的项目的预期数量是多少。
(一) 2.33
(乙) 0.75
(三) 1.33
(四) 2

解决方案:
key1 在槽 1 中结束的概率 = 1/6
key2 在槽 1 结束的概率 = 1/6
key3 在槽 x = 1/6 中结束的概率
key4 在槽 x = 1/6 中结束的概率
key5 在槽 x = 1/6 中结束的概率
key6 在槽 x = 1/6 中结束的概率
散列到特定位置的预期项目数 = 8/6
选项(C)是正确的。

Que – 2.对于散列表中的 n 个键和 m 个槽,以下哪个是空位置的预期数量。
(A) n((m-1)/m)^n
(B) m((m-1)/m)^n
(C) n((n-1)/m)^n
(D) n((n-1)/n)^m

解决方案:
散列到特定位置的预期项目数 = n/m
插入n个key后slot 1为空的概率=((m-1)/m)^n
插入n个key后slot 2为空的概率=((m-1)/m)^n
插入n个key后slot 3为空的概率=((m-1)/m)^n
因此对于 m 个插槽,空位置的预期数量 = m((m-1)/m)^n
选项(B)是正确的。

Que – 3.具有 20 个节点且元素为 1, 2, 3,…..20 且树的根为 12 且左子树的根为 7 的二叉搜索树的数量是多少?
(一) 2634240
(乙) 1243561
(三) 350016
(四) 2642640

解决方案:
左子树中的节点数 = 11 {1, 2, 3, 4….11}
右子树中的节点数 = 8 {13, 14, ….20}
因为左子树的根是 7
左子树左侧的元素数 = 6 {1, 2, 3..6}
左子树右侧的元素数 = 4 {8, 9, 10, 11}
我们知道有 n 个节点的二叉搜索树的数量 = (C(2n,n)/n+1)
6 个节点的 BST 数量 = (C(12,6)/7) = 132
4 个节点的 BST 数量 = (C(8,4)/5) = 14
8 个节点的 BST 数量 = (C(16,8)/9) =1430
BST 总数 = 2642640
选项(D)是正确的。

Que – 4.对于具有 E 条边和 V 个顶点的图,Dijkstra 算法使用数组作为数据结构来存储未确定的顶点的时间复杂度是多少。图是无向的并表示为邻接表?
(A) O(VE)
(B) O(ElogV)
(C) O(V^2 )
(D) O(E^2log V)

解决方案:
给定使用的数据结构是数组,因此初始化数组中的所有节点(将所有无法到达的节点设置为无穷大),此操作需要 O(V)
在每一步,我们都必须从数组中删除最小值。对于一个这样的操作,它需要 O(V),使用选择排序第一遍。我们有V这样的步骤。因此,由于在每一步删除最小元素而导致的总复杂度 = V*O(V) = O(V^2)
在每一步选择一个最小值后,我们必须检查它的相邻节点并对所选节点的邻居执行减少键。检查所有步骤的相邻项总共需要 O(2E)。所有步骤的减少键也是 E. O(1) = O(E) 。由于数组未排序,我们不必在每一步都对数组进行排序。
总复杂度 = O(V) + O(V^2) + O(2E) + O(E) = O(V^2)
注意:对于一个简单的图 V^2 总是 >= E
选项(C)是正确的。

Que – 5.以下程序的输出是什么?

int a = 5;
main()
{
   extern int a;
   extern int a;
   printf(a);
}

(A) 编译时错误。
(B) 运行时错误。
(C) 0
(四) 5

解决方案:
上面的程序不会导致任何编译时错误,因为 extern 没有分配任何内存。因此,在与 extern 相同变量的函数声明中,只要变量是全局声明的,就不会导致任何错误。输出为 5。
选项(D)是正确的。