信息学奥赛初赛天天练-32-CSP-J2022基础题-中缀表达式、后缀表达式、哈夫曼编码、连通图、邻居矩阵、完全二叉树、数组存储

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大排序算法中不稳定的排序算法如下

快速排序

选择排序

堆排序

希尔排序

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值