📜  数据结构和算法|套装37

📅  最后修改于: 2021-06-29 00:36:56             🧑  作者: Mango

队列– 1.对于哈希表中具有统一哈希和链接的8个键和6个插槽,哈希到特定位置的预期项目数是多少。
(A)2.33
(乙)0.75
(C)1.33
(D)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)是正确的。

队列–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个键后插槽1为空的概率=((m-1)/ m)^ n
插入n个键后插槽2空闲的可能性=((m-1)/ m)^ n
插入n个键后插槽3空闲的可能性=((m-1)/ m)^ n
因此,对于m个插槽,空位置的预期数量= m((m-1)/ m)^ n
选项(B)是正确的。

Que – 3.具有20个节点的二叉搜索树的数目是多少,这些节点的元素为1,2,3,….. 20,使得树的根为12,左子树的根为7?
(A)2634240
(B)1243561
(C)350016
(D)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
(D)5

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