当前位置: 首页 > news >正文

信息学奥赛初赛天天练-39-CSP-J2021基础题-哈夫曼树、哈夫曼编码、贪心算法、满二叉树、完全二叉树、前中后缀表达式转换

PDF文档公众号回复关键字:20240629

在这里插入图片描述

2022 CSP-J 选择题

单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)

5.对于入栈顺序为a,b,c,d,e的序列,下列( )不合法的出栈序列

A. a,b,c,d,e

B. e,d,c,b,a

C. b,a,c,d,e

D. c,d,a,e,b

8.如果一颗二叉树只有根节点,那么这棵二叉树高度为1。请问高度为5的完全二叉树有( )种不同的形态

A. 16

B. 15

C. 17

D. 32

9.表达式a* (b+c)* d的后缀表达式为( ),其中 *和 +是运算符

A. * * a + b c d

B. a b c + * d *

C. a b c + d * *

D. * a * + b c d

11.在数据压缩编码中的哈夫曼编码方法,在本质上是一种( ) 策略

A. 枚举

B. 贪心

C. 递归

D. 动态规划

15.有四个人要从A点坐一条船过河到B点,船一开始在A点。该船一次最多可坐两个人。已知这四个人中每个人独自坐船的过河时间分别为1、2、4、8,且两个人坐船的过河时间为两人独自过河时间的较大者。则最短( )时间可以让四个人都过河到B点(包括从B点把船开回A点的时间)

A. 14

B. 15

C. 16

D. 17

2 相关知识点

栈又名堆栈,是一种限定仅在表尾进行插入和删除操作的线性表,这一端称为栈顶,另一端称为栈底

栈中的数据元素遵守后进先出的原则

二叉树

每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒,例如下面是一棵二叉树

满二叉树

满二叉树又叫完美二叉树,除了叶子结点之外的每一个结点都有两个孩子,树的叶子节点均在最后一层(也就是形成了一个完美的三角形)

完全二叉树

除了最下层,其他每层都饱满,去除最后一层是一棵满二叉树,最下层的结点都集中在该层最左边的若干位置上

前缀表达式

前缀表达式,也称为波兰表达式,是一种算术表达式表示方法,其中运算符位于操作数之前.

//示例1 中缀表达式a+b对应的前缀表达式
+a bC++
//示例2 中缀表达式3+4*2对应的前缀表达式
+ 3 * 4 2 

中缀表达式

是一种常见的算术表达式表示方法,其中运算符位于操作数之间

//示例1
3 + 4 * 2
//示例2
(1 + 2) * (3 - 4)C++

后缀表达式

后缀表达式,也称为逆波兰表达式,是一种算术表达式表示方法,其中运算符位于操作数之后

//示例1 中缀表达式a+b对应的后缀表达式C++
a b+
//示例2 中缀表达式3+4*2对应的前缀表达式3 4 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 -

哈夫曼树

1 选剩下的两棵根权值最小的树合并成一棵新树

2 新树的根权值等于两棵合并前树的根权值和

3 重复1和2

哈夫曼编码

哈夫曼树的左右孩子进行编码称为哈夫曼编码,通常左边为0,右边为1

只对叶子节点进行编码/解码,编码唯一

哈夫曼编码是前缀编码,任何一个字符的编码都不是另一个字符编码的前缀(只有叶子节点编码)

哈夫曼编码左边为0,右边为1是通常规定,也可以左边为1右边为0,但确定后编码是唯一的

如果下图为字母a,b,c,d,e的编码,字母旁边对应数字为其出现的频率

贪心算法

所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择 。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的 局部最优解

哈夫曼编码总是把出现频率少的编码相对较长,从而保证全局总的编码最短

哈夫曼编码使用的是贪心算法进行编码

3 思路分析

5.对于入栈顺序为a,b,c,d,e的序列,下列( D )不合法的出栈序列

A. a,b,c,d,e

B. e,d,c,b,a

C. b,a,c,d,e

D. c,d,a,e,b

分析

根据入栈出栈性质模拟,栈为后进先出

A a 进 a 出 b 进 b 出 c 进 c 出 d 进 d 出 e 进 e 出 出栈顺序合法
B a 进 b 进 c 进 d 进 e 进 e 出 d 出 c 出 b 出 a 出 出栈顺序合法
C a 进 b 进 b 出 a 出 c 进 c 出 d 进 d 出 e 进 e 出 出栈顺序合法
D a 进 b 进 c 进 c 出 d 进 d 出 此时b在栈顶,a无法出栈 
所以选 D

8.如果一颗二叉树只有根节点,那么这棵二叉树高度为1。请问高度为5的完全二叉树有( A )种不同的形态

A. 16

B. 15

C. 17

D. 32

分析

完全二叉树,除最后一层,其他层都是满的
高度为5有4层是满的,后面1层节点是前面节点的2倍(1个父节点都有2个子节点)
前4层是满的,形态不会变化,只有第5层形态可能变化,第5层节点只要保证从左到右排即可
具体如下
满二叉树
高度为1  1个节点  2^1-1=1
高度为2  1+2 个节点 2^2-1=3
高度为3  1+2+4个节点 2^3-1=7
高度为4  1+2+4+8 个节点2^4-1=15
高度为5  1+2+4+8+16 个节点 2^5-1=31
由于是完全二叉树,说明第5层必有节点,第5层的节点最多可以31-15=16个
当第5层节点为16个时,此时是5层的满二叉树,是特殊的完全二叉树
因此有16种不同的形态

9.表达式a* (b+c)* d的后缀表达式为( B ),其中 *和 +是运算符

A. * * a + b c d

B. a b c + * d *

C. a b c + d * *

D. * a * + b c d

分析

确定优先级,按优先级逐一处理操作符(把操作符从操作数中间移到操作数后边)
a * (b+c)* d  -- ((a * (b+c))* d)((a * (b+c))* d)    
1 (b+c) => b c+ 
//  (b+c)  可以看作一个整体x
(a * (b+c)) => (a * x) => a x * => a b c + *
//(a * (b+c)) 可以看作一个整体x((a * (b+c))* d)  => (x * d) => x d * => a b c + * d * 

11.在数据压缩编码中的哈夫曼编码方法,在本质上是一种( B ) 策略

A. 枚举

B. 贪心

C. 递归

D. 动态规划

分析

哈夫曼编码总是把出现频率少的编码相对较长,从而保证全局总的编码最短

哈夫曼编码使用的是贪心算法进行编码

15.有四个人要从A点坐一条船过河到B点,船一开始在A点。该船一次最多可坐两个人。已知这四个人中每个人独自坐船的过河时间分别为1、2、4、8,且两个人坐船的过河时间为两人独自过河时间的较大者。则最短( B )时间可以让四个人都过河到B点(包括从B点把船开回A点的时间)

A. 14

B. 15

C. 16

D. 17

分析

贪心算法解决此问题,贪心策略

1从剩余的人中选择用时最小的2人过河

2 用时最小的人返回去接剩余的人

1 初始 1 2 4 8 在河的A边

2从剩余的 1 2 4 8 找用时最少的2人(1 和 2)过河到B ,用时为2

3 在B端选择用时间最少的去接,1去接,用时1

4 从剩余的 4 8 找用时最少的2人(4 和 8)过河到B ,用时为8

5 在B端选择用时间最少的去接,2去接,用时2

6 从剩余的 1 2 过河 用时为2

上述过河时间累加 2+1+8+2+2=15

相关文章:

信息学奥赛初赛天天练-39-CSP-J2021基础题-哈夫曼树、哈夫曼编码、贪心算法、满二叉树、完全二叉树、前中后缀表达式转换

PDF文档公众号回复关键字:20240629 2022 CSP-J 选择题 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 5.对于入栈顺序为a,b,c,d,e的序列,下列( )不合法的出栈序列 A. a,b&a…...

第11章 规划过程组(收集需求)

第11章 规划过程组(一)11.3收集需求,在第三版教材第377~378页; 文字图片音频方式 第一个知识点:主要输出 1、需求跟踪矩阵 内容 业务需要、机会、目的和目标 项目目标 项目范围和 WBS 可…...

探索WebKit的守护神:深入Web安全策略

探索WebKit的守护神:深入Web安全策略 在数字化时代,网络已成为我们生活的一部分,而网页浏览器作为我们探索网络世界的窗口,其安全性至关重要。WebKit作为众多流行浏览器的内核,例如Safari,其安全性策略是保…...

unity ScrollRect裁剪ParticleSystem粒子

搜了下大概有这几种方法 通过模板缓存通过shader裁剪区域:案例一,案例二,案例三,三个案例都是类似的方法,需要在c#传入数据到shader通过插件 某乎上的模板缓存方法link,(没有登录看不到全文&a…...

凤仪亭 | 第7集 | 大丈夫生居天地之间,岂能郁郁久居人下 | 司徒一言,令我拨云见日,茅塞顿开 | 三国演义 | 逐鹿群雄

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 📌这篇博客分享的是《三国演义》文学剧本第Ⅰ部分《群雄逐鹿》的第7️⃣集《凤仪亭》的经典语句和文学剧本全集台词 文章目录 1.经典语句2.文学剧本台词 …...

React实战学习(一)_棋盘设计

需求: 左上侧:状态左下侧:棋盘,保证胜利就结束 和 下过来的不能在下右侧:“时光机”,保证可以回顾,索引 语法: 父子之间属性传递(props)子父组件传递(写法上&…...

【LeetCode】每日一题:三数之和

解题思路 最开始是打算沿着二数之和的思路做,即固定了最大的,然后小的开始遍历,因为这种遍历方式只需要遍历一轮就能完成,所以复杂度应该是O(n2),但是最后几个示例还是超时了,可能进…...

逆风而行:提升逆商,让困难成为你前进的动力

一、引言 生活,总是充满了未知与变数。有时,我们会遇到阳光明媚的日子,享受着宁静与和谐;但更多时候,我们却不得不面对那些突如其来的坏事件,如工作的挫折、人际关系的困扰、健康的挑战等。这些事件如同突…...

新能源汽车CAN总线故障定位与干扰排除的几个方法

CAN总线是目前最受欢迎的现场总线之一,在新能源车中有广泛应用。新能源车的CAN总线故障和隐患将影响驾驶体验甚至行车安全,如何进行CAN总线故障定位及干扰排除呢? 目前,国内机动车保有量已经突破三亿大关。由于大量的燃油车带来严峻的环境问题,因此全面禁售燃油车的日程在…...

【涵子来信】——社交宝典:克服你心中的内向,世界总有缺陷

内向,你是内向的吗?想必每个人不同,面对的情形也是不同的。 暑假是一个很好的机会,我是可以去多社交社交。但是,面对着CSDN上这么多技术人er,那么,我的宝典,对于大家,有…...

LabVIEW项目外协时选择公司与个人兼职的比较

​在选择LabVIEW项目外协合作伙伴时,外协公司和个人兼职各有优劣。个人兼职成本较低且灵活,但在可靠性、技术覆盖面、资源和风险管理上存在不足。而外协公司拥有专业团队、丰富资源、完善的项目管理和风险控制,尽管成本较高,但能提…...

汽车电子工程师入门系列——CAN 规范系列通读

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...

泽众云真机-平台华为机型HarmonyOS NEXT系统已上线!

泽众云真机平台华为机型HarmonyOS NEXT系统已上线! 之前文章《泽众云真机-平台即将升级支持华为机型HarmonyOS NEXT系统泽众云真机-平台即将升级支持华为机型HarmonyOS NEXT系统》,为什么要升级HarmonyOS NEXT系统?我们之前有说过&#xff0c…...

AI基础:从线性回归到梯度下降

一个简单的问题: 如果此时你正站在迷路缭绕的山坡上,能见度不高,但是你又想去往最低的山谷的位置,怎么走? 很简单,哪里陡那就往那里走呗——而这就是梯度下降算法的思想。 古话说:“先发制于人…...

AI产品经理面试

把优秀当习惯把优秀当习惯肯定不是口头说说,那有什么判断标准吗? 当我做完一件事儿的时候,我会看它有没有突破我的舒适圈、能不能惊艳到我自己。这就是我的判断标准。 在自我介绍和经历介绍时,面试者应该注重以下几个方面&#xf…...

二进制方式部署consul单机版

1.consul的下载 mkdir -p /root/consul/data && cd /root/consul wget https://releases.hashicorp.com/consul/1.18.0/consul_1.18.0_linux_amd64.zip unzip consul_1.18.0_linux_amd64.zip mv consul /usr/local/bin/ 2.配置文件 // 配置文件路径: /roo…...

SpringBoot整合Quartz实现动态定时任务

目录 1、Quartz简介1.1 Quartz的三大核心组件1.2 CronTrigger配置格式 2、SpringBoot整合Quartz框架2.1 创建项目2.2 实现定时任务 1、Quartz简介 Quartz是一个开源的任务调度服务,它可以独立使用,也可与其它的Java EE,Java SE应用整合使用。…...

qt 用宏控制静态接口的统一

1.概要 /** * 单件宏实验 * 创建一个可以生成单件的宏 * 起因:想让有些控件单件,但是c不支持静态的继承(c#支持) * 那么如果保证这些接口的统一呢,用宏 */ 2.代码 2.1 a.h #ifndef A_H #define A_H#include &…...

pdf怎么转换成jpg,本地转换还是在线转换?

PDF(Portable Document Format)和JPG(Joint Photographic Experts Group)这两种文件格式在我们的日常生活和工作中扮演着举足轻重的角色。PDF因其跨平台、保持原样性强的特点,被广泛应用于文件传输和存储;而…...

【物联网】802.15.4简介

目录 一、概述 二、802.15.4主要特点 2.1 工作频段和数据速率 2.2 支持简单器件 2.3 信标方式和超帧结构 2.4 数据传输和低功耗 三、低功耗 一、概述 802.15.4包括用于低速无线个人域网(LR-WPAN)的物理层和媒体接入控制层两个规范。它能支持消耗功率最少,一般…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...