已更新完整。若题目跟答案对不上,先看看答案是否是该题,如果不是只能建议百度一下或者花点时间在pdf上找一下答案,因为是后期整理了题目,如有麻烦,万分抱歉。(可惜后期把有页码的pdf删了要不然可以发上来,这样子你们校对更快一点。这里建议用福昕阅读器我的是foxit_FoxitReader_9.2.3.42566.exe这个版本的)
目录
第七章 图
- 无向完全图边数:n(n-1)/2
- 有向完全图边数:n(n-1)
- 连通无向图边数至少:n-1(树的情况下)
- 连通无向图边数至少:n(首尾相连的环)
- 无向图度数之和=2*边数
- 有向图入度之和=有向图出度之和;度数和为=2*弧数
- 邻接矩阵表示无向图的大小:n*n
- 邻接表表示无向图最多结点:n*(n-1)
- 邻接表存储图与顶点和边数有关
图的遍历:BFS、DFS
最小生成树:Prim->稠密图、Kruskal->稀疏图
- Prim算法从1个起点0条边出发,不断扩充顶点,直到包含所有顶点,适用于求边稠密的最小生成树。
- Kruskal算法从n个顶点n条边出发,不断扩充边,直到包括n-1条边为止,适用于求边稀疏的最小生成树。
最短路径:Dijkstra迪杰斯特拉算法、Floyd弗洛伊德算法
复杂度:
邻接表的有向图广度优先遍历:O(n+e)
邻接表的Prim算法:O(n+e)
邻接表的拓扑排序:O(n+e)
Dijkstra:O(n*n)、FloydO(n*n*n)
空间复杂度
邻接矩阵 n*n、邻接表n+e
题:
1. 下列关于无向连通图特性的叙述中,正确的是
Ⅰ.所有顶点的度之和为偶数
Ⅱ.边数大于顶点个数
Ⅲ.至少有一个顶点的度为1
2. 若无向图G=(V, E)中含有7个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是( )。
A.6 B.15 C.16 D.21
3. 下列关于图的叙述中,正确的是( )。
Ⅰ.回路是简单路径
Ⅱ.存储稀疏图,用邻接矩阵比邻接表更省空间
Ⅲ.若有向图中存在拓扑序列,则该图不存在回路
A.仅Ⅱ B.仅Ⅰ、Ⅱ
C.仅Ⅲ D.仅Ⅰ、Ⅲ
4. 若用邻接矩阵存储有向图,矩阵中主对角线以下的元素均为零,则关于该图拓扑序列的结论是( )。
A.存在,且唯一 B.存在,且不唯一 C.存在,可能不唯一 D.无法确定是否存在
5. 对如下有向带权图,若采用迪杰斯特拉(Dijkstra)算法求从源点a到其他各顶点的最短路径,则得到的第一条最短路径的目标顶点是b,第二条最短路径的目标顶点是c,后续得到的其余各最短路径的目标顶点依次是 ( )。
A. d,e,f B. e,d,f C. f,d,e D. f,e,d
6. 下列关于最小生成树的叙述中,正确的是( )。
Ⅰ.最小生成树的代价唯一
Ⅱ.所有权值最小的边一定会出现在所有的最小生成树中
Ⅲ.使用普里姆(Prim) 算法从不同顶点开始得到的最小生成树一定相同
Ⅳ.使用普里姆算法和克鲁斯卡尔(Kruskal) 算法得到的最小生成树总不相同
A.仅Ⅰ B.仅Ⅱ C.仅Ⅰ、Ⅲ D.仅Ⅱ、Ⅳ
7. 下面AOE网表示项包含8个活动的工程。通过同时加快若干活动的进度可以缩短整个工程的工期。下列选项中,加快其进度就可以缩短工程工期的是( )。
A.c和e B.d和c C.f和d D.f和h
8. 以下图的叙述中,正确的是( )。
A.图与树的区别在于图的边数大于或等于顶点数
B.假设有图G=(V, {E}),顶点集V' V, E' E,则V’和{E‘}构成G的子图
C.无向图的连通分量指无向图中的极大连通子图
D.图的遍历就是从图中某一顶点出发访遍图中其余顶点
9. 一个有n个结点的图,最少有( ) 个连通分量,最多有( ) 个连通分量。
A.0 B. 1 C. n-1 D. n
10. 用有向无环图描述表达式(A+B)*((A+B)/A),至少需要顶点的数目为( )。
A.5 B.6 C.8 D.9
11. 设有两个无向图G=(V,E), G'=(V, E),如果G是G的生成树,则下列说法不正确的是( )。
A.G是G的子图
B. G是G的连通分量
C. G'是G的无环子图
D. G'是G的极小连通子图,且V'=V
12. 当一个有N个顶点的无向图用邻接矩阵A表示时,顶点i的度为()。
13. 若一个有向图具有拓扑排序序列,那么它的邻接矩阵必定为( ) 。
A.对称矩阵 B.稀疏矩阵 C.三角矩阵 D.一般矩阵
14. 采用邻接表存储的图的深度优先遍历算法类似于树的( ),而其广度优先遍历算法类似于树的( )。
A.中序遍历 B. 先序遍历 C.后序遍历 D. 按层次遍历
15. 下图中给出由7个顶点组成的无向图。从顶点1出发,对它进行深度优先遍历得到的序列是(①)
A.1354267 B.1347652 C.1534276 D.1247653 E.以上答案均不正确
16. 在具有n个顶点的图G中,若最小生成树不唯一,则( )。
A.G的边数一定大于n-1
B.G的权值最小的边一定有多条
C.G的最小生成树的代价不一定相等
D.上述选项都不对
17. 下面不正确的是( )。
(1). 求从指定源点到其余各顶点的迪杰斯特拉(Dijkstra)最短路径算法中弧上权不能为负的原因是在实际应用中无意义;
(2). 利用Dijkstra求每一对不同顶点之间的最短路径的算法时间是O(n^3 ) ;(图用邻接矩阵表示)
(3). Floyd 求每对不同顶点对的算法中允许弧上的权为负,但不能有权和为负的回路。
A. (1), (2), (3) B.(1) C. (1),(3) D. (2),(3)
18. 当各边上的权值 ( )时,BFS算法可用来解决单源最短路径问题
A.均相等 B.均互不相等 C.不一定相等
19. 下面关于求关键路径的说法不正确的是()
A.求关键路径是以拓扑排序为基础的
B.一个事件的最早开始时间同以该事件为尾的弧的活动最早开始时间相同
C.一个事件的最迟开始时间为以该事件为尾的弧的活动最迟开始时间与该活动的持续时间的差
D.关键活动一定位于关键路径上
20. 下列有关图的说法错误的是()。
A.在有向图中,出度为0的结点称为叶子
B.用邻接矩阵表示图,容易判断任意两个结点之间是否有边相连,并求得各结点的度
C.按深度方向遍历图和先根次序遍历树类似,得到的结果是唯一的
D.若有向图G中从结点Vi到结点Vj有一条路径,则在图G的结点的线性序列中结点Vi必在结点Vj之前的话,则称为一个拓扑序列
21. G是一个非连通无向图,共有22条边,则该图至少有()个顶点。
解:
- 1,每条边连接两个顶点,所有顶点的度之和等于边数的2倍,是偶数,正确
2,如两个顶点一条边的图就不满足这个条件,错
3,如三个顶点三条边连成一个三角形的图每个顶点度为2,错 - 先填满前6个结点6*5/2=15、再加一条边即可保证必连通。C
- 图中第1个顶点和最后一个顶点相同的路径称为回路或环。序列中所有顶点不重复出现的路径称为简单路径,邻接矩阵的大小只和顶点个数相关,存储稀疏图,用邻接表比邻接矩阵更省空间。拓扑序列成功的前提是有向图中不存在回路。
- ①存在环的话...这种题应该只考虑简单图 (源于牛客:zurp)
②不存在环,若主对角线以下全为零,说明必定所有边由小号节点指向大号节点,如果图中存在分叉,且至少存在两条分叉至少经过一个节点后才汇合,则拓扑不唯一,其他情况则拓扑唯一;换一种描述就是存在且唯一需要满足二则中的一个:a.仅A[i][i+1]=1;b.A[i][i+k]=1,且k>0时,有A[i+k-1][i+k]=1。0 1 1 失败情况 0 0 0 0 0 0 -
【排除法】对于A,若下一个顶点为d,路径a,b,d的长度5,而a,b,c,f的长度仅为4,显然错误。同理可以排除B。将f加入集合S后,采用上述的方法也可以排除D。Dijkstra算法思想:每次找当前未归并到最短路径的最小路径长度,并在接下来的趟数通过该节点联通剩下的结点。Floyd算法思想:通过一步步加入中转结点来更新到各个顶点的距离。(还未用在题目中)
顶点 第一趟(a起点) 第二趟(b起点) 第三趟(c起点) 第四趟(f起点) 第五趟(d起点) b (a,b) 2 c (a,c) 5 (a,b,c) 3 d ∞ (a,b,d) 5 (a,b,d) 5 (a,b,d) 5 e ∞ ∞ (a,b,c,e) 7 (a,b,c,e) 7 (a,b,d,e) 6 f ∞ ∞ (a,b,c,f) 4 集合S {a,b} {a,b,c} {a,b,c,f} {a,b,c,f,d} {a,b,c,f,d,e} -
若有较小的相等权值,最小生成树可能不唯一,但是其代价是唯一的。Ⅱ的错误在于“所有权值最小的边一定会出现在.....”,这可能形成环。Ⅲ的错误在于“....最小生成树一定相同”,Ⅳ的错误在于两种算法“....最小生成树总不相同”。若无相同权值,生成树一定相同;若有较小相等权值,生成树可能会不同。
-
C。缩短工期的活动要涵盖所有关键路径。只有减少所有关键路径上共有的关键活动,才能缩短工期。若某活动不为关键路径共享,减少它,并没影响其他关键路径。
-
树图区别:树是一对多的关系,图是多对多的关系,所以A错。若E'中两个顶点不在V'中,则V'和{E'}无法构成图,所以B错。D没强调对图的各顶点遍历一次且仅一次。
-
最少是1个,这种情况下,它本身就是一个连通图;最多是n个,这种情况下,它由n个分散的点组成的一个图。
-
B。连通分量是无向图的极大连通子图,而且连通分量中可能存在回路。生成树中无回路
-
B。题目应该是无向图。
-
若是下三角矩阵,说明编号大的顶点是弧尾,编号小的顶点是弧头,不会出现编号小的顶点指向编号大的顶点的现象。上三角矩阵恰恰相反。这两种情况说明该有向图可以拓扑排序,但是具有拓扑排序序列的有向图的邻接矩阵不一定是三角矩阵。有向无环图具有拓扑排序序列,其邻接矩阵没有明显特征。
-
B使用邻接表为存储结构的图的深度优先搜索遍历类似于树的先序遍历,是树的先序遍历的推广 D。广度优先搜索遍历类似于树的按层次遍历。
-
ABD都有跳点的现象比如A在2的时候直接跳到了6、C才是深度遍历
-
生成树有n个顶点和n-1条边。最小生成树是权值之和最小的那棵生成树。若最小生成树不唯一,一定是有权值相等的边,但未必是权值最小的边相等。最小生成树的代价一定相等。当然,G的边数一定大于n-1,否则,就只有一棵生成树了。A
-
C。
-
C。C的叙述有误。一个事件的最迟开始时间,是该事件所有后继事件(顶点)最迟开始时间和相应活动持续时间差的最小值。例如,某事件(设为E)有3个后继事件(顶点),它到3个后继事件有3条弧(活动),求出3个后继事件和弧头指向它的那个活动的持续时间的差,取最小值就得到E的最迟开始时间。
-
C。图的深度优先遍历的确和树的先根遍历类似。但若只给逻辑图形,没有存储结构,则图的深度优先遍历结果会不唯一。 即使给了存储结构,例如只说用邻接表存储,但没说邻接点如何排列,是升序还是降序,还是随意,无法确定谁是第一邻接点,都会造成结果不唯一。
填空题
第八章 (集合)查找
本节不含B+ B-树
查找: 顺序查找、折半查找、二叉排序树查找、哈希表(链接中包含B+ B-等)
折半查找成功ASL即计算顶点数×层数;失败ASL就是空顶点数×边数 (因为查找成功则跟顶点一样,而查找失败则会跳到下一个顶点这样子算一次)
折半查找树n个结点、n+1个空结点(又称外部结点)
折半查找时间复杂度:O(logn)
在构建折半查找树建议下标取1 不容易出错。
哈希表解决冲突的方法:开放定址法(线性探测再散列,二次探测再散列,伪随机探测再散列)、再哈希法、链地址法(附链接、含优缺点1、优缺点2、源码)
顺序查找平均查找长度(ASL)= = (平均要除n) tips
注意区分排序二叉树和平衡二叉树
平衡因子左高为1右高为-1 、平衡二叉树查找效率与树高(深)、平衡二叉树的调整(LR、RL比较难理解,希望本节中的题目能解惑,tips每次变换都必须满足平衡二叉树的要求,我的真题的一道题记录)
链地址法解决哈希表(杂凑表)冲突,查找成功的平均查找长度直接于哈希函数有关(因为选不好哈希函数,则散列的数据可能都在一个格子下,查找效率大大降低)
负载因子 α= 填入表中的元素个数 / 哈希表的长度
题:
1. 在下图所示的平衡二叉树中,插入关键字48后得到一棵新平衡二叉树。在新平衡二叉树中,关键字37所在结点的左、右子结点中保存的关键字分别是( )。
A.13、48 B.24、48 C.24、53 D.24、90
2. 已知一个长度为16的顺序表L,其元素按关键字有序排列。若采用折半查找法查找一个L中不存在的元素,则关键字的比较次数最多的是()。
A.4 B.5 C.6 D.7
3. 为提高散列(Hash) 表的查找效率,可以采取的正确措施是( ) 。
Ⅰ.增大装填(载)因子
Ⅱ.设计冲突(碰撞)少的散列函数
Ⅲ.处理冲突(碰撞)时避免产生聚集(堆积)现象
A.仅Ⅰ B.仅Ⅱ C.仅Ⅰ、Ⅱ D.仅Ⅱ、Ⅲ
4. 若平衡二叉树的高度为6,且所有非叶结点的平衡因子均为1,则该平衡二叉树的结点总数为( )。
A.12 B.20 C.32 D.33
5. 若将关键字1,2,3, 4,5, 6, 7依次插入到初始为空的平衡二叉树T中,则T中平衡因子为0的分支结点的个数是( )。
A.0 B.1 C.2 D.3
6. 现在有一棵无重复关键字的平衡二叉树(AVL树),对其进行中序遍历可得到一个降序序列。下列关于该平衡二叉树的叙述中,正确的是( )。
A.根结点的度一定为2 B.树中最小元素一定是叶结点
C.最后插入的元素一定是叶结点 D.树中最大元素一定是无左子树
7. 已知一棵深度为k的平衡二叉树,其每个非叶子结点的平衡因子均为0,则该树共有结点总数为( )。
8. 若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为( )。
A. (n-1)/2 B. n/2 C. (n+1)/2 D. n
9. 对于顺序查找,假定查找成功与不成功的可能性相同,对每个记录的查找概率也相同,此时顺序查找的平均查找长度为( )。
A.0.5(n+1) B.0.25(n+1) C.0.5(n-1) D.0.75(n+1)
10. 查找n个元素的有序表时,最有效的查找方法是( )。
A.顺序查找 B.分块查找 C.二分查找 D.二叉排序树
11. 具有12个关键字的有序表,折半查找的平均查找长度为( )。
A.3.1 B.4 C.2.5 D.5
12. 对一个长度为50的有序表进行折半查找,最多比较( ) 次就能查找出结果。
A.6 B.7 C.8 D.9
13. 当n足够大时,在按值有序的顺序表中进行折半查找,在查找概率相等的情况下,其查找成功的平均查找长度是( )。
A. (n+1)/2 B. n/2 C. log2(n+1)-1 D. log2(n+1)
14. 当采用分块查找时,数据的组织方式为( )。
A.数据分成若干块,每块内数据有序
B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块
C.数据分成若千块,每块内数据有序,每块内最大(或最小)的数据组成索引块
D.数据分成若干块,每块(除最后一块外)中数据个数需相同
15. 对表长为n的有序表进行折半查找,其判定树高度为: ( )。
16. 对大小均为n的有序表和无序表分别进行顺序查找,在等概率查找的情况下,对于查找失败,它们的平均查找长度是(1), 对于查找成功,它们的平均查找长度是(2)。
A.相同的 B.不同的
17. 在下列查找方法中,平均查找速度最快的是( )。
A.顺序查找 B.折半查找 C.分块查找 D.二叉排序树查找
18. 对于二叉排序树,下面的说法( ) 是正确的。
A.二叉排序树是动态树表,查找不成功时插入新结点时,会引起树的重新分裂和组合
B.对二叉排序树进行层序遍历可得到有序序列
C.用逐点插入法构造二叉排序树时,若先后插入的关键字有序,二叉排序树的深度最大
D.在二叉排序树中进行查找,关键字的比较次数不超过结点数的1/2
19. 构造一棵具有n个结点的二叉排序树,最理想情况下的深度为( )。
20. 在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A的左孩子的平衡因子为0,右孩子的平衡因子为1,则应作( ) 型调整以使其平衡。
A. LL B. LR C. RL D. RR
21. 在构造散列表方面,下面的说法( ) 是正确的。
A.链地址法在处理冲突时会产生聚集
B.线性探测再散列在处理冲突时会产生聚集
C.好的哈希函数可以完全避免冲突
D.在哈希表中进行查找是不需要关键字的比较的
22. 散列文件的特点是( )。
A.记录按照关键字排序 B.记录可以顺序存取
C.存取速度快,但占用的存储空间较多
D.记录不需要排序,存取速度快
23. 设哈希表长M=14,哈希函数H(KEY)=KEY MOD 11.表中已有4个结点: ADDR(15)=4,ADDR(38)=5, ADDR(61)=6, ADDR(84)=7,其余地址为空,如用二次探测再散列处理冲突,关键字为49的结点的地址是( )。
A.8 B.3 C.5 D.9
24. 散列表的地址区间为0~17,散列函数为H(K)=K mod 17。采用线性探测法处理冲突,并将关键字序列26,25,72,38,8,18,59 依次存储到散列表中。
(1) 元素59存放在散列表中的地址是( )。
A.8 B.9 C.10 D.11
(2)存放元素59需要搜索的次数是()。
A.2 B.3 C.4 D.5
25. 关于杂凑查找说法不正确的有几个? ( )
(1)采用链地址法解决冲突时,查找一个元素的时间是相同的
(2)采用链地址法解决冲突时,若插入规定总是在链首,则插入任一个元素的时间是相同的
(3)用链地址法解决冲突易引起聚集现象
(4)再哈希法不易产生聚集
A.1 B.2 C.3 D.4
26. 采用开址定址法解决冲突的哈希查找中,发生集聚的原因主要是( )。
A.数据元素过多 B.负载因子过大 C.哈希函数选择不当 D.解决冲突的算法选择不好
27. 查找低效的数据结构是( )。
A.有序顺序表 B.二叉排序树 C.堆 D.平衡的二叉排序树
28. 假定关键字K= 2789465,允许存储地址为3位十进制数,现在得到的散列地址为149,则所采用的构建散列函数的方法是( )。
A.除留余数法,模为23 B.平方取中法 C.移位叠加法 D.间界叠加法
29. 设散列地址空间为0~m-1, k为关键字,用p去除k,将所得到的余数作为k的散列地址,即H(k)=k modp,为了减少发生冲突的概率,一般取ρ为( )。
A.小于m B.小于m的最大偶数 C. m D.小于m的最大素数
解:
- (一开始写的 所以平衡因子有误)RL就是先构成RR 即旋转成第二个,然后再根据RR来旋转,用右手握拳的方向在37旋转
- log2(16)+1 = 4+1 = 5. B
- 减小装填因子可以提高散列表的查找效率;处理冲突(碰撞)时可以减少,但不能"避免"产生聚集(堆积)现象,只有选择答案II是正确的。选择B。
- (图源:NaNa1993),公式法:最小二叉平衡树:F(n)=F(n-1)+F(n-2)+1(1 是根节点,F(n-1) 是左子树的节点数量,F(n-2) 是右子树的节点数量)
从下往上数(源自:悦千言):深度为2时,f(2)=f(1)+f(0)+1=2;
f(3)=f(2)+f(1)+1=4;
依此类推 f(4)=7,f(5)=12,f(6)=20。 B - D (图源:)
- D
- 平衡因子都为即满二叉树,则2^k-1即为节点总数.C
- (图源)前面成功就是1...n 后面不成功即每次都要遍历到最后一个结点才可以所以是n(n+1)(无序的情况下,有序即找到比他大的就停止了)
- C
- A
- 2^5-1=31 < 50 < 2^6-1=63 所以A
- -1 公式记住即可(内含推导)
- B
- 判定树不是完全二叉树,但是n个结点的判定树的高度和n个结点的完全二叉树的高度相同。
- BA。
- B。答案中无该答案 记录一下。
- C (留坑 后续找各项错误) 有点不知道为什么备注是该题 姑且先把链接放这儿
- D。关于二叉树高度 即完全二叉树是最理想的情况 不理想就是单支树
- 右子树平衡因子为1 所以只能在右子树的左子树的结点插入才会导致不平衡,则A的右子树的左子树失衡 RL旋转。C (内含RL、LR旋转小技巧,即这两种第一步都是先转化成RR或LL然后根据这个下一次旋转就简单了)类似第一题
- 答案B是正确的。应该说答案C也并非完全错误。事实是,经过很多人的努力,处理Pascal关键字的函数的确是"perfect",就不产生冲突。
拉链法优点:①无堆积现象;②动态扩充;③α可以≥1;④易删除。 缺点:指针需要额外的空间
开放定址法-线性探测法:①处理溢出需另编程序;②删除困难;③堆积现象 - 二次探测再散列 是1 -1 2 -2 这样子所以C
- 注意区分线性探测和探测:线性探测不需要处理第一个,探测需要处理第一个所以n(n+1)/2 D (同义词应该知道吧 就是有相同关键字的比如全是1)
- 线性探测法 1 2 3 4 5 这样子
- B
- D. 关于哈希的诸多概念
- A、B和C都数据有序,而堆只有双亲和左右子女间的关系,查找某元素效率最低。而且堆是用来排序的
- 一般看到这么长的关键字 还取三位就是平方取中法
- 仅作记录用 p选取小于m的最大素数(又称质数)D 本题就是除留余数法(有趣的网址)
填空题
1. 在各种查找方法中,平均查找长度与结点个数n无关的查找方法是_____。
2. 动态查找表和静态查找表的重要区别在于前者包含有_____和_____运算,而后者不包含这两种运算.
3. 在等概率情况下,对具有n个元素的顺序表进行顺序查找,查找成功(即表中有关键字等于给定值K的记录)的平均查找长度为_____;比较关键字的次数最多为_____次;查找不成功(即表中无关键字等于给定值K的记录)的平均查找长度为_____,当使用监视哨时,若查找失败,则比较关键字的次数为_____
4. 在n个记录的有序顺序表中进行折半查找,最大比较次数是_____
5. 在有序表A[1...20]中,按二分查找方法进行查找,查找长度为5的元素个数是_____
6. 长度为10的按关键字有序的查找表采用顺序存储。若使用折半查找法,则在等概率情况下,查找失败时的ASL值是_____
7. n个结点的用于折半查找的判定树,表示查找失败的外部结点共有_____个。
8. 设表长为1023的有序线性表,查找每个元素的概率相等,采用折半查找方法,查找成功的ASL是_____。
9. 在一个按值有序排列的顺序表示中进行折半查找,其查找过程可以用一棵称之为“判断树”的二叉树来描述。若顺序表的长度为19,则对应的“判断树”的根结点的左孩子之值(元素在表中的位置)是_____
10. 执行顺序查找时,储存方式可以是__(1)__ , 二分法查找时,要求线性表__(2)__, 分块查找时要求线性表__(3)__, 而散列表的查找,要求线性表的存储方式是__(4)__.
11. 查找是非数值程序设计的-一个重要技术问题,基本上分成__(1)__查找,__(2)__查找和__ (3) 查找。 处理哈希冲突的方法有(4)、(5)、(6)和(7)
12. 在二叉排序树上成功地找到一个结点,在平均情况下的时间复杂性是_____, 在最坏情况下的时间复杂性是_____
13. AVL树_____是完全二叉树;完全二叉树_____是AVL树。
14. 哈希表用_____确定 记录的存储位置。
15. 设已知n个关键字具有相同的散列函数值,并且采用线性探测再散列方法处理冲突,将这n个关键字散列到初始为空的地址空间中, 一共发生了_____次散列冲突。
解
- 哈希查找
- 插入、删除
- (n+1)/2;n;n+1;n+1
- ASL失败= (5x3+6x4) /11 = 39/11。折半查找失败结点是判定树的外部结点,该结点不存在。计算查找次数时,和外部结点对应的内部结点在查找成功时相同。例如,本题长度为3的外部结点有5个,长度为4的外部结点有6个,故得以上计算公式。折半查找成功即计算顶点数×层数;失败就是空顶点数×边数
- n+1
- 9 n取9即1023。摘自
- 5 ,这里最后从1...19来标 使其在表中的位置跟下标一致,如果从0开始 最后的答案需要+1。注意题目中指的是元素在表中的位置
- (1)顺序存储或链式存储、(2)顺序存储且有序、(3)块内顺序存储,块间有序、(4)散列存储
- (1)静态查找表、(2)动态查找表、(3)哈希表、(4)开放定址方法、(5)链地址方法、(6)再哈希、(7)建立公共溢出区
- 不一定,一定。需要说明,AVL是平衡二叉树,各个结点值之间满足确定关系。从树形上看,完全二叉树任意结点左右子树的高度差的绝对值不大于1。仅从结点平衡因子角度看,可以说完全二叉树是平衡二叉树。
- 关键字
- n^2。 进行了n(n+1)次探测, 每个关键字在其最后一次探测中无冲突,故发生n^2次散列冲突。大概本题原意是问发生了多少次探测。
第九章 排序
稳定性:鸡毛归警察(基数、冒泡(起泡)、归并、计数、简单插入)
排序趟数和初始无关的是:折纸选归西鸡(折半、直接插入、简单选择、归并、希尔、基数)
元素比较次数和初始序列无关:这归鸡选(折半、归并、基数、简单选择)
时间复杂度为nlog2n:希,快归队(快速、归并、堆,希尔(考试也算,但事实上)),其他的就是n*n(个别例子不管用)
辅助空间就快速为logn、归并n、基数n+k,其他都为1(不考的例子不管用)
经过1趟后各个排序算法的序列特点:
- 冒泡排序:最后一个位置必定最小或最大
- 快速排序:中间结点必定比左边大比右边小(左大右小)
- 插入排序:前i趟元素必定有序
- 希尔排序:根据增量判断,一般不好判断,借助排除其他选项再看这个(若某趟后感觉序列无序,可以试试(前提排除快排,快排也有点无序的))
- 归并排序:先将子序列排好序,一般不好判断,同希尔的操作
- 选择排序:前i趟必定有i个排好序(有序和排好序是不一样的概念 如123 排好序 231 前2个有序)
- 堆排序:最大值或者最小值位于根节点
- 基数排序:不好判断,一般直接告诉你是基数排序,进行排序
- 一定能放在最终位置上:堆、冒泡、快速、选择 (快选炮堆,不用死记硬背,理解原理就行)
- 不一定能放在最终位置上:希尔、直接插入、归并
排序算法:(来源王道思维导图)
- 若n较小,可采用直接插入排序或简单选择排序
- 当记录本身信息量较大时,用简单选择排序较好
- 若文件的初始状态已按关键字基本有序,则选用直接插入或冒泡排序为宜
- 快速排序被认为是目前基于比较的内部排序方法中最好的方法待排序的关键字随机分布时,快速排序的平均时间最短;数据有序则时间n*n空间n
- 若n较大,则应采用时间复杂度为O(nlog2n) 的排序方法:快速排序、 堆排序或归并排序
- 要求排序稳定且时间复杂度为O(nlog2n)则可选用归并排序
- 若n很大,记录的关键字位数较少且可以分解时,采用基数排序较好
- 当记录本身信息量较大时,为避免耗费大量时间移动记录,可用链表作为存储结构
直接插入:(稳定、适用顺序、链式存储)
- 时间效率:最好(有序):O(n) ; 最坏(逆序) :比较次数: 移动次数:; 平均:O(n^2)
折半插入:(稳定、顺序存储)
- 时间效率:O(nlog2n)、比较次数与表中元素个数有关
希尔排序:
- 时间效率:O(n^2)
(图片有误,贴个链接)
(算了直接拿过来了,链接在上面,里面也有一些内容,ps上副图错误在堆的空间复杂度)
题:
1. 已知关键字序列5,8, 12, 19, 28, 20, 15, 22是小根堆(最小堆),插入关键字3,调整后得到的小根堆是( )。
A.3,5, 12, 8, 28, 20, 15, 22, 19 B.3,5, 12, 19, 20, 15,22, 8, 28.
C.3,8, 12,5, 20, 15, 22, 28, 19 D.3, 12, 5, 8, 28, 20, 15, 22, 19
2. 若数据元素序列11, 12, 13, 7, 8, 9, 23, 4, 5是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是( )。
A.起泡排序 B.插入排序 C.选择排序 D.二路归并排序
3. 采用递归方式对顺序表进行快速排序。下列关于递归次数的叙述中,正确的是()。
A.递归次数与初始数据的排列次序无关
B.每次划分后,先处理较长的分区可以减少递归次数
C.每次划分后,先处理较短的分区可以减少递归次数
D.递归次数与每次划分后得到的分区的处理顺序无关
4. 为实现快速排序算法,待排序序列宜采用的存储方式是( )。
A.顺序存储 B.散列存储 C.链式存储 D.索引存储
5. 对同一待排序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是( )。
A.排序的总趟数 B.元素的移动次数
C.使用辅助空间的数量 D.元素之间的比较次数
6. 对给定的关键字序列110, 119, 007, 911, 114, 120, 122进行基数排序,则第2趟分配收集后得到的关键字序列是( )。
A. 007, 110, 119, 114, 911, 120, 122
B.007, 110, 119, 114, 911, 122, 120
C.007, 110, 911, 114, 119, 120, 122
D. 110, 120,911, 122, 114, 007, 119
7. 用希尔排序方法对一个数据序列进行排序时,若第1趟排序结果为9, 1,4, 13, 7, 8, 20, 23,15,则该趟排序采用的增量(间隔)可能是( )。
A.2 B.3 C.4. D.5
8. 下列选项中,不可能是快速排序第2趟排序结果的是()。
A.2,3,5,4,6,7,9 B.2, 7,5, 6,4,3, 9 C.3,2,5,4, 7,6,9 D.4, 2,3,5,7,6, 9
9. 已知小根堆为8,15, 10, 21, 34,16, 12, 删除关键字8之后需重建堆,在此过程中,关键字之间的比较数是( )。
A.1 B.2 C.3 D.4
10. 希尔排序的组内排序采用的是( )。
A.直接插入排序 B.折半插入排序 C.快速排序 D.归并排序
11. 若要求排序是稳定的,且关键字为实数,则在下列排序方法中应选( )排序为宜。
A.直接插入 B.直接选择 C.堆 D.快速 E.基数
12. 下列内部排序算法中:
A.快速排序 B.直接插入排序 C.二路归并排序
D.简单选择排序 E.起泡排序 F.堆排序.
(1)其比较次数与序列初态无关的算法是( )
(2)不稳定的排序算法是( )
(3)在初始序列已基本有序(除去n个元素中的某k个元素后即呈有序,k<<n) 的情况下,排序效率最高的算法是( )
(4)排序的平均时间复杂度为O(nlogn)的算法是(),为O(n*n)的算法是( )
13. 排序趟数与序列的原始状态有关的排序方法是( ) 排序法。
A.插入 B.选择 C.冒泡 D.快速
14. 设被排序的结点序列共有N个结点,在该序列中的结点已十分接近排序的情况下,用直接插入法、归并法和一般的快速排序法对其排序,这些算法的时间复杂性应为( )。
15. 数据序列(8, 9, 10,4,5, 6, 20, 1,2)只能是下列排序算法中的( ) 的两趟排序后的结果。
A.选择排序 B.冒泡排序 C.插入排序 D.堆排序
16. 一个排序算法的时间复杂度与( ) 有关。
A.排序算法的稳定性
B.所需比较关键字的次数
C.所采用的存储结构
D.所需辅助存储空间的大小
17. 下列排序算法中,( ) 排序在一趟结束后不一定能选出一一个 元素放在其最终位置上。
A.希尔 B.冒泡 C.选择 D.直接插入
18. 适合并行处理的排序算法是( )。
A.选择排序 B.快速排序 C.希尔排序 D.基数排序
19. 如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用( )方法最快。
A.起泡排序 B.快速排列 C. Shell排序
D.堆排序 E.简单选择排序
20. 对数据序列(8,9, 10,4,5, 6, 20, 1,2)采用(由后向前次序的)冒泡排序,需要进行的趟数(遍数)至少是( )。
A.3 B.4 C.5 D.8
21. 下列排序算法中,占用辅助空间最多的是: ( )。
A.归并排序 B.快速排序 C.希尔排序 D.堆排序
22. 在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是( )。
A.直接插入排序 B.冒泡排序 C.简单选择排序 D.快速排序
23. 对下列关键字序列用快速排序法进行排序时,速度最快的情形是( ) 。
A. {21,25, 5, 17, 9, 23, 30}
B. {25, 23, 30, 17,21,5, 9}
C. {21, 9, 17, 30, 25, 23, 5}
D. {5, 9, 17, 21, 23, 25, 30}
24. 对n个记录的线性表进行快速排序为减少算法的递归深度,以下叙述正确的是( )。
A.每次分区后,先处理较短的部分
B.每次分区后,先处理较长的部分
C.与算法每次分区后的处理顺序无关
D.以上三者都不对
25.当n个整型数据是有序时,对这n个数据用快速排序算法排序,则时间复杂度是(1), 当用递归算法求n!时,算法的时间复杂度是(2), 则: (1) - (2) = ( )。
A. O(n) B. O(nlogn) C. O(n*n) D. O(logn)
26. 在含有n个关键字的小根堆(堆顶元素最小)中,关键字最大的记录有可能存储在( )位置上。
27. 若对n个元素进行堆排序,则在初始建堆的过程中需要进行( ) 筛选。
A.1 B. n/2 C. (n-1)/2 D. n
28.对n个记录的文件进行堆排序,最坏情况下的执行时间是多少?()
A. O(log2n) B. O(n) C. O(nlog2n) D. O(n*n)
29. 就分类算法所用的辅助空间而言,堆分类、快速分类和归并分类的关系是()。
A.堆分类<快速分类<归并分类
B.堆分类<归并分类<快速分类
C.堆分类>归并分类>快速分类
D.堆分类>快速分类>归并分类
30. 对给出的一-组关键字{13, 6, 19, 30, 10, 18},若按关键字非递减排序,第一趟排序结果为{13,6,18,30,10,19},问可能采用的排序算法是()。
A.单选择排序 B.快速排序 C.希尔排序 D.2路归并排序
31. 排序方法有许多种,_(1)_法从未排序的序列中 依次取出元素,与已排序序列(初始时为空)中的元素作比较,将其放入已排序序列的正确位置上;_(2)_法从未排序的序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端;交换排序方法是对序列中的元素进行一系列比较,当被比较的两元素逆序时,进行交换;_(3)_和_(4)_是基于这类方 法的两种排序方法,而_(4)_是比_(3)_效率更高的方法;_(5)_法是基于选择排序的一种排序方法,是完全二叉树结构的一个重要应用。
A.选择排序 B.快速排序 C.插入排序
D.起泡排序 E.归并排序 F. Shell排序
G.堆排序 H.基数排序
32.设要将序列(q, h,c,y,p, a, m,s,r,d,f,x)中的关键码按字母升序重新排序,
(1)()是初始步长为4的Shell排序一趟扫描的结果;
(2)( ) 是对排序初始建堆的结果;
(3)( )是以第一个元素为分界元素的快速一趟扫描的结果。
从下面供选择的答案中选出正确答案填入括号内。
A.f,h,c,d,p,a, m,q,r,s,y,x
B.p,a,c,s,q,d,f,x,r,h, m,y
C.a,d,c,r,f,q, m,s,y,p, h,x
D.h,c,q,p,a, m,s,r,d,,x,y
E.h,q,c,y,a,p, m,s,d,r,f,x
33. n个英文单词,每个单词长度基本相等,为m。当n>>50、m<5时,时间复杂度最佳的为( )
A.快速排序 B.归并排序 C.基数排序 D.直接插入排序
34.设关键字序列为:3,7,6,9,8,1,4,5,2.进行排序的最小交换次数为( ).
解:
- (A冒泡,23不在最后,B前两位有序,可能对,C45并不在最前面或者54在最后面,D二路归并。综合选B)起泡排序的特点是待排序元素相邻两两比较,逆序交换,每趟有一个最大元素到达底部(或一个最小元素到达顶部);插入排序的特点是先假定第一个元素有序, 从第二个元素起,每趟将未排序元素的第一个元素插入的前面有序子文件中;选择排序的特点是第一趟在待排序元素中选最小(或最大)元素和第一个元素交换,第二趟在未排序元素中选次小(或次大)和第二个元素交换:二路归并排序是两两归并,再四四归并,等等。
- D。快速排序和数据的初始排列次序相关。每次划分后,先处理较短分区可以减少递归深度,递归次数和先处理哪个分区无关。
- A
- D
- 基数排序第一趟的个位肯定拍好序,且第二趟属于同一个十位下的个位应该有序,所以A119、114和B119、114错误。D十位无序。选C
- 9和1没有换位置 所以增量不是1;9和4没有,所以不是2;9比13小,待定3;9和7没有。选B
- C的中间 并没有左小右大。初态是A,经过两趟快速排序后,状态未变; B的初态可能是97,5,6,43,2; D的初态可能是{9,2,3,4,7,6,5};
- (建堆过程)
- A
- A 根据上面口诀排除,堆不能用实数
- 熟悉口诀用:CD、ADF、B(E应该是因为必须比较完n次才可以吧B只需要k次)、ACF、BDE
- CD、题目是有关
- C.
- ABD都会有元素在确定的位置上,但题目中没有体现,且C可以使i趟后前i个位置有序
- B.时间复杂度与关键字比较次数有关
- AD。第三版答案有误
- B
- D
- C。只需要拍好1、2、然后4、5、6即可
- A。辅助空间就快速为logn、归并n、基数n+k,其他都为1,其中logn < n
- A.简单选择排序来说,其比较次数与待排序列的初始状态无关、冒泡排序下沉到底部仍需n-1趟排序
- A
- A
- CAC
- A 小根堆中,关键字最大的记录只能在叶结点上,故不可能在小于等于的结点上。例子中A是最后一个分支结点, B是分支结点, C是小堆顶,值最小,D是叶子结点,所以选D。
(真多A,依稀感觉在树的题目中遇到过) - B。建堆要从最后一一个分支结点开始筛选,直至根结点,最后一个分支结点的编号是n/2(也可以特殊法)。建堆流程上面有图片了,这里再赋个链接。
这图看起来好叼 - C
- 熟悉辅助空间大小 A
- B没有左小右大,D没有两两有序,C为路长3,一般看着这种前后两趟感觉无序的可以试试希尔排序的思想。
- C、A、D、B、G,第四个(希尔不是,因为居然是插入排序,
我一直以为是交换,害) - B、C、A。(
字母到现在都还不会背🙃老是卡在GHIJ这里GJ读音分不清,害) - C。快速排序和归并排序的时间复杂度都是O(nlogn),直接插入排序的时间复杂度是O(n*n),基数排序的时间复杂度是O(m*(rd+n)),其中m是“分配”和“收集”的趟数,rd是基数,因字母共26个,所以rd取26。在n较大, m较小时,基数排序最有效。(积累用,另外这种告诉你位数(字母长度),没有基数排序那味儿吗😁)
- 6次
填空题:
1. 若不考虑基数排序,则在排序过程中,主要进行的两种基本操作是关键字的____和记录的____。
2. 直接插入排序用监视哨的作用是____。
3. 对n个元素的序列进行起泡排序时,最少的比较次数是____
4. 设用希尔排序对数组{98, 36, 9, 0, 47, 23, 1, 8, 10, 7}进行排序,给出的步长(也称增量序列)依次是4,2,1,则排序需____趟, 写出第一趟结束后,数组中数据的排列次序____
5. 快速排序在____的情况 下最易发挥其长处。
6. 堆排序是一种__(1)__类型的排序, 它的一个基本问题是如何建堆,常用的建堆算法是1964年Floyd提出的__(2)__, 对含有n个元素的序列进行排序时,堆排序的时间复杂
度是__(3)__, 所需要的附加结点是__(4)__。 堆实质上是一棵__(5)__结点的层次序列。
7. 不受待排序初始序列的影响,时间复杂度为O(N)的排序算法是____,在排序算法的最后一趟开始之前,所有元素都可能不在其最终位置上的排序算法是____
8. 在基于关键字比较且时间为O(nlog2n)的排序中,若要求排序是稳定的,则可选用____排序;若要求就地排序(及辅助空间为O(1)),则可选用____排序。
解:
- 比较、移动
- 免去查找过程中每一步都要检测整个查找表是否查找完毕,提高了查找效率
- n-1
- 一开始对希尔理解没到位,就是根据d划分子区间、然后比较区间里的值,进行排序(10,7,-9, 0, 47,23, 1,8, 98, 36)
- 最好每次划分能得到两个长度相等的子文件。
- (1)选择(2)筛选法(3) O(nlog2n) (4)1个,(5)完全二叉树
- 选择、插入
- 归并、堆
✨感谢在本文中出现的链接中各位优质博主的分享!✨题目源自《算法与数据结构考研试题精析 第3版》,感谢作者✨至此更新完毕,考完研后进行填坑
有些文章如果觉得不好,可以评论/私聊我发 好点的 链接,我更换掉,考研时间紧张,就做了一点筛选。