PDF文档公众号回复关键字:20240623
2022 CSP-J 选择题
单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)
6.对表达式a+(b-c)*d的前缀表达式为( ),其中 + 、- 、 * 是运算符。
A. * +a - bcd
B. + a * - bcd
C. abc-d * +
D. abc-+d
7.假设字母表{a,b,c,d,e}在字符串出现的频率分别为10% ,15%,30%,16%,29%,若使用哈夫曼编码方式对字母进行不定长的二进制编码,字母d的编码长度为( ) 位
A. 1
B. 2
C. 2或3
D. 3
8.一棵有n个结点的完全二叉树用数组进行存储与表示,已知根节点存储在数组的第1个位置。若存储在数组的第9个位置的结点存在兄弟结点和两个子结点,则它的兄弟结点和右子结点的位置分别是( )
A. 8、18
B. 10、18
C. 8、19
D. 10、19
9.考虑由N个顶点构成的有向连通图,采用邻接矩阵的数据结构表示时,该矩阵中至少存在( ) 个非零元素
A. N-1
B. N
C. N+1
D. N^2
12.以下排序算法的常见实现中,哪个选项的说法时错误的:( )
A. 冒泡排序算法时稳定的
B. 简单选择排序时稳定的
C. 简单插入排序时稳定的
D. 归并排序算法时稳定的
2 相关知识点
1) 有向图相关
连通性
如果任意两点间存在路径,此图具有连通性
无向图的连通性
任意两点是连通的,任意两点都可以形成通路
有向图的连通
有向图中,如果一个节点能通过单向通道到达另一个节点,可认为这两点之间是连通的
如下图
4->1、2->4->1
是连通的
2-3
是不连通的
强连通
强连通是有向图的特定概念
在有向图中, 若对于每一对顶点v1和v2, 都存在一条从v1到v2和从v2到v1的路径,则称此图是强连通图
弱连通
将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则有向图是弱连通图
有向图讨论连通的局部性没有太大意义,有向图中讨论的是强连通性
邻接矩阵
在邻接矩阵表示中,除了存放顶点本身信息外,还用一个矩阵表示各个顶点之间的关系。如果i~j连通,则矩阵中第i行 第j列元素值为1,否则为0 。
例1 无向图
对应邻接矩阵
1~2 对应1行2列为1,2~1对应2行1列为1
例2 有向图
对应邻接矩阵
1~2有向边,对应1行2列为1, 2~3有向边对应2行3列为1
2) 中缀表达式转后缀表达式
确定优先级,按优先级逐一处理操作符(把操作符从操作数中间移到操作数后边)
例如如下中缀表达式转为后缀表达式
1 + ( 2 + 3)* 4 ) – 5
// 按优先级对表达式数字加括号
((1 + (( 2 + 3)* 4 )) – 5 )
//从最里面的一层括号开始运算,转换成后缀表达式
//转换方法,去除括号,数字在前,顺序不变,操作符移到最后
1. ( 2 + 3) => 2 3 +
// ( 2 + 3)可以看作一个整体x
2. (( 2 + 3)* 4 ) => (x+4) => x 4 + => 2 3 + 4 *
//(( 2 + 3)* 4 )看作一个整体x
3. (1 + (( 2 + 3)* 4 ))=> (1+x)=>1 x + = 1 2 3 + 4 * +
// (1 + (( 2 + 3)* 4 )) 看作一个整体x
4. ((1 + (( 2 + 3)* 4 )) – 5 ) =>(x-5)=>x 5 - => 1 2 3 + 4 * + 5 -
所以转换后的后缀表达式为 1 2 3 + 4 * + 5 -
3) 哈夫曼树
哈夫曼树的构造
1 选剩下的两棵根权值最小的树合并成一棵新树
2 新树的根权值等于两棵合并前树的根权值和
3 重复1和2
哈夫曼编码
对哈夫曼树的左右孩子进行编码称为哈夫曼编码,通常左边为0,右边为1
只对叶子节点进行编码/解码,编码唯一
哈夫曼编码是前缀编码,任何一个字符的编码都不是另一个字符编码的前缀(只有叶子节点编码)
哈夫曼编码左边为0,右边为1是通常规定,也可以左边为1右边为0,但确定后编码是唯一的
4) 二叉树
每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒
完全二叉树
除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐
完全二叉树的存储
一个满二叉树或者完全二叉树可以直接使用数组存储,并且结点的存储位置,就是数组的下标索引
子节点下标
左子节点下标=父节点下标 *2
右子节点下标=父节点下标*2+1
父节点下标
父节点=⌊左儿子/2⌋
父节点=⌊右儿子/2⌋
5) 排序算法的稳定性
稳定性
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的
选择排序不稳定
排序思路
如果有n个数进行选择排序,从小到大进行排序
需要进行n次
每次从剩余数未排序的数中选择选择最小的进行排序
例子
15 10 15 8 从小到大排序
排序后第1列的15排到了第4列,原来第3列的15位置不变
第1列的15和第3列的15交换了顺序,因此是不稳定的
常见十大排序思路及其实现
https://www.cnblogs.com/myeln/articles/13909087.html
3 思路分析
6.对表达式a+(b-c)*d的前缀表达式为( B ),其中 + 、- 、 * 是运算符。
A. * +a - bcd
B. + a * - bcd
C. abc-d * +
D. abc-+d
分析
//按优先级加括号
(a+((b-c)*d))
//最外层括号操作符+,前移到括号前
+(a((b-c)*d))
//((b-c)*d)中*号提到括号前
+(a*((b-c)d))
//(b-c)中-号提到括号前
+(a*(-(bc)d))
//去除括号
+a*-bcd
所以选B
7.假设字母表{a,b,c,d,e}在字符串出现的频率分别为10% ,15%,30%,16%,29%,若使用哈夫曼编码方式对字母进行不定长的二进制编码,字母d的编码长度为( B ) 位
A. 1
B. 2
C. 2或3
D. 3
分析
构造哈夫曼树
1 从所有节点中找最小的2个节点合并
2 从剩余节点中找最小的2个节点合并
3 从剩余节点中找最小的2个节点合并
4 从剩余节点中找最小的2个节点合并
对哈夫曼树编码
使用左0右1原则
所以d的编码为00,为2位
8.一棵有n个结点的完全二叉树用数组进行存储与表示,已知根节点存储在数组的第1个位置。若存储在数组的第9个位置的结点存在兄弟结点和两个子结点,则它的兄弟结点和右子结点的位置分别是( C )
A. 8、18
B. 10、18
C. 8、19
D. 10、19
分析
完全二叉树的数组存储,根节点在1位置
子节点下标
左子节点下标=父节点下标 *2
右子节点下标=父节点下标*2+1
父节点下标
父节点=⌊左儿子/2⌋
父节点=⌊右儿子/2⌋
第9个位置的右子节点
右子节点下标=父节点下标*2+1=9*2+1=19
第9个位置父节点下标
⌊左儿子/2⌋=⌊9/2⌋=4
4有2个子节点
左子节点下标=4 *2 =8
右子节点下标=4*2+1=9
所以9的兄弟节点位8,9的右儿子为9
所以选C
9.考虑由N个顶点构成的有向连通图,采用邻接矩阵的数据结构表示时,该矩阵中至少存在( B ) 个非零元素
A. N-1
B. N
C. N+1
D. N^2
分析
有向连通图,通常指强连通图,即图中任意2点都有通路
邻接矩阵表示,只有2节点可以连通时为1,否则为0
所以此题求强连通时,任意2点连通的最小值
如下图时形成环时,最小,4个节点4条边,n个节点n条边
所以选B
12.以下排序算法的常见实现中,哪个选项的说法时错误的:( B )
A. 冒泡排序算法时稳定的
B. 简单选择排序时稳定的
C. 简单插入排序时稳定的
D. 归并排序算法时稳定的
分析
根据知识点分析,选择排序是不稳定的,其他3个都是稳定的排序算法
所以选B
10大排序算法中不稳定的排序算法如下
快速排序
选择排序
堆排序
希尔排序