信息学奥赛初赛天天练-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大排序算法中不稳定的排序算法如下

快速排序

选择排序

堆排序

希尔排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/32820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【从0实现React18】 (四) 如何触发更新 带你了解react触发更新的流程以及更新后如何触发render

常见的触发更新的方式 创建 React 应用的根对象 ReactDOM.creatRoot().render();类组件 this.setState();函数组件 useState useEffect; 我们希望实现一套统一的更新机制,他的特点是: 兼容上述触发更新的方式方便后续…

c++学习-----内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 答案揭晓: 这里很多人会误认为*char2在常量区,这其实是错误的 因为: 首先在内存字符常量区分配一块内存空间放下”abcd\0”,然后在栈中分配一块连续的内存空间,…

SQL-Python

师从黑马程序员 数据库介绍 数据库就是存储数据的库 数据组织:库->表->数据 数据库和SQL的关系 MySQL的基础命令 SQL基础 SQL语言的分类 SQL的语法特征 DDL-库管理 show DATABASES;use sys;SELECT database();CREATE DATABASE test CHARSET utf-8;SHOW D…

学习C++第二天

1.缺省参数 缺省参数的概念&#xff1a; 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void show(int a 10) {cout << a << endl; }int main() {sho…

ubuntu18.04 编译HBA 并实例运行

HBA是一个激光点云层级式的全局优化的程序&#xff0c;他的论文题目是&#xff1a;HBA: A Globally Consistent and Efficient Large-Scale LiDAR Mapping Module&#xff0c;对应的github地址是&#xff1a;HKU-Mars-Lab GitHub 学习本博客&#xff0c;可以学到gtsam安装&am…

提升Python技能的七个函数式编程技巧

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 递归📝 结构化模式匹配📝 不变性📝 纯函数📝 高阶函数📝 函数组合📝 惰性求值⚓️ 相关链接 ⚓️📖 介绍 📖 在现代编程中,虽然Python并不是一门纯粹的函数式编程语言,但函数式编程(Funct…

Linux C/C++ socket函数

目录 socket函数 函数原型 头文件 功能 返回值 参数 错误码 socket函数 函数原型 int socket(int domain, int type, int protocol); 头文件 #include <sys/types.h> #include <sys/socket.h> 功能 创建一个用于通信的端点&#xff0c;并返回一个文件描述符…

登录安全分析报告:链家地产

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

力扣刷题 杨辉三角(使用c++ vector解法)

杨辉三角 题目描述示例1示例2提示:代码 题目描述 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例1 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例2 …

上位机图像处理和嵌入式模块部署(mcu和swd接口)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 最近学习mcu的时候&#xff0c;接触了不少调试器&#xff0c;这里面有daplink、st-link v2、j-link v9。虽然模块的形状可能不太一样&#xff0c;但…

基于I2C协议的AHT20温湿度传感器的数据采集

一、I2C总线通信协议 软件I2C 软件I2C&#xff0c;也称为模拟I2C或bit-bang I2C&#xff0c;是一种通过微控制器的通用输入输出&#xff08;GPIO&#xff09;引脚来模拟I2C总线通信的方式。它不依赖于专门的硬件I2C接口&#xff0c;而是通过编程控制GPIO引脚的电平状态来实现I…

快去复习吧+++常用算法及参考算法 递推法++穷举法++排序(冒泡、选择)++查找(顺序、折半)++字符串处理++方程求根++无穷级数求和

接上&#xff1a;常用算法及参考算法 &#xff08;1&#xff09;累加 &#xff08;2&#xff09;累乘 &#xff08;3&#xff09;素数 &#xff08;4&#xff09;最大公约数 &#xff08;5&#xff09;最值问题 &#xff08;6&#xff09;迭代法 常用算法及参考算法 7. 递推法…

Vue-观察器(watch)的定义方式引发组件初始值没有渲染成功问题(已解决)

问题描述&#xff1a;在测试环境发现一个问题&#xff0c;打开一张表单的时候&#xff0c;所有字段都成功赋上了值&#xff0c;唯独一个人员组件的值&#xff08;出差人员&#xff09;没有带出&#xff0c;而接口返回的数据是正常的&#xff0c;也就是说不是后端接口的问题&…

JVM专题七:JVM垃圾回收机制

JVM专题六&#xff1a;JVM的内存模型中&#xff0c;我们介绍了JVM内存主要分哪些区域&#xff0c;这些区域分别是干什么的&#xff0c;同时也举了个例子&#xff0c;在运行过程种各个区域数据是怎样流转的。细心的小伙伴可能发现一个问题&#xff0c;在介绍完方法弹栈以后就没有…

指令微调数据集构建方法

指令微调&#xff08;Instruction Tuning&#xff09;&#xff0c;是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调&#xff0c;在一些文章中也称为有监督微调&#xff08;Supervised Fine-tuning&#xff0c;SFT&#xff09;或多任务提示训练&#xff08;Multi…

CARLA自动驾驶模拟器基础

CARLA 使用服务器-客户端架构运行&#xff0c;其中 CARLA 服务器运行模拟并由客户端向其发送指令。客户端代码使用 API 与服务器进行通信。要使用 Python API&#xff0c;您必须通过 PIP 安装该模块&#xff1a; pip3 install carla-simulator # Python 3World and client 客…

React18中各种Hooks用法总结( 内附案例讲解)

React中各种Hooks用法总结 内附案例讲解 一、useState useState 是一个 React Hook&#xff0c;它允许你向组件添加一个 状态变量。 import React, { FC, memo, useState } from react import { MainContainer } from ./style interface IProps {children?: React.ReactNo…

FRP内网穿透及多级代理的使用

目录 0、前言 1、场景介绍 2、环境准备 2.1 下载frp 2.2 配置一台VPS 2.3 socks5客户端 2.5 网络环境准备 3、Frp设置 3.1 一层代理 3.1 二层代理 4、Frp总结 0、前言 FRP是比较老牌的也是比较流行的反向代理、内网穿透软件。FRP用途和使用场景可以看官方文档&#xff0c;…

JavaScript 预编译与执行机制解析

在深入探讨JavaScript预编译与执行机制之前&#xff0c;我们首先需要明确几个基本概念&#xff1a;声明提升、函数执行上下文、全局执行上下文以及调用栈。这些概念共同构成了JavaScript运行时环境的核心组成部分&#xff0c;对于理解代码的执行流程至关重要。本文将围绕这些核…

美团携手HarmonyOS SDK,开启便捷生活新篇章

华为开发者大会&#xff08;HDC 2024&#xff09;于6月21日在东莞松山湖拉开序幕&#xff0c;通过一系列精彩纷呈的主题演讲、峰会、专题论坛和互动体验&#xff0c;为开发者们带来了一场知识与技术的盛宴。6月23日&#xff0c;《HarmonyOS开放能力&#xff0c;使能应用原生易用…