蓝桥杯备赛笔记(二)
这里的笔记是关于蓝桥杯关键知识点的记录,有别于基础语法,很多内容只要求会用就行,无需深入掌握。
文章目录
- 前言
- 一、时间复杂度
- 1.1 时间复杂度⭐
- 1.2 空间复杂度
- 1.3 分析技巧
- 二、枚举
- 2.1 枚举算法介绍
- 2.2 解空间的类型
- 2.3 循环枚举解空间
- 三、模拟算法介绍
- 3.1 模拟算法介绍
- 四、递归
- 4.1 递归的介绍
- 4.2 递归如何实现
- 4.3 递归和循环的比较
- 总结
前言
持续更新,千里之行始于足下
一、时间复杂度
1.1 时间复杂度⭐
1、时间复杂度是衡量算法执行时间随输入规模增长的增长率。
2、通过分析算法中基本操作的执行次数来确定时间复杂度。
3、常见的时间复杂度包括:常数时间O(1)、线性时间O(n)、对数时间O(log n)、平方时间O(n^2)等。
4、在计算的时候我们关注的是复杂度的数量级,并不要求严格的表达式。
一般我们关注的是最坏时间复杂度,用O(f(n))表示,大多数时候我们仅需估计即可。
一般来说,评测机1秒大约可以跑2e8次运算,我们要尽可能地让我们的程序运算规模的数量级控制在1e8以内。
常数时间例子:10→100ms,10000→100ms,这里常数无论多少都是100ms。
线性时间例子:for循环嵌套for循环的情况下,时间复杂度为O(2n)但由于我们并不要求严格的表达式,所以这里的O(2n)=O(n)即可。
评测机1秒跑的2e8即 2 ∗ 1 0 8 2*10^8 2∗108,假如此时我们的n=1e4的情况下,O( n 2 n^2 n2)约等于1e8次。
但如果是n=1e5的情况下,O( n 2 n^2 n2)约等于1e10次就超过了运算规模的数量级控制了,此时我们应该用O(nlogn)的算法,约等于3e6。
1.2 空间复杂度
1、空间复杂度是衡量算法执行过程中所需的存储空间随输入规模增长的增长率(vector)。
2、通过分析算法中所使用的额外存储空间的大小来确定空间复杂度。(全局大数组)
3、常见的空间复杂度包括:常数空间O(1)、线性空间O(n)、对数空间O(log n)、平方空间O( n 2 n^2 n2)等。
一般我们关注的是最坏空间复杂度,用O(f(n))表示,大多数时候程序占用的空间一般可以根据开的数组大小精确算出,但也存在需要估算的情况。题目一般不会卡空间,一般是卡时间。
举个例子:假如题目限制128MB,1int = 32bit = 4Bytes。128MB = 32 * 2^20int = 3e7int。
1.3 分析技巧
1、理解基本操作:基本操作可以是算术运算(加法、乘法、位运算等)、比较操作、赋值操作等。
2、关注循环结构:循环是算法中常见的结构,它的执行次数对于时间复杂度的分析至关重要。
3、递归算法:递归算法的时间和空间复杂度分析相对复杂。需要确定递归的深度以及每个递归调用的时间和空间开销。(树的数据结构,n层的情况下就是 2 n − 1 2^n-1 2n−1个)
4、最坏情况分析:对于时间复杂度的分析,通常考虑最坏情况下的执行时间。要考虑输入数据使得算法执行时间达到最大值的情况。
5、善用结论:某些常见算法的时间和空间复杂度已经被广泛研究和证明。可以利用这些已知结果来分析算法的复杂度。
二、枚举
2.1 枚举算法介绍
枚举算法是一种基本的算法思想,它通过穷举所有可能的情况来解决问题。它的基本思想是将问题的解空间中的每个可能的解都枚举出来,并进行验证和比较,找到满足问题条件的最优解或所有解。
枚举算法适用于问题规模较小,解空间可穷举的情况。它的优点是简单直观,不需要复杂的数学推导,易于实现。但是,由于需要穷举所有可能的情况,对于问题规模较大的情况,枚举算法的时间复杂度可能会非常高,效率较低。
2.2 解空间的类型
解空间可以是一个范围内的所有数字(或二元组、字符串等数据),或者满足某个条件的所有数字。
当然也可以是解空间树,一般可分为子集树和排列树,针对解空间树,需要使用回溯进行枚举(在后面讲到搜索的时候会讲到)。
我们目前仅使用循环去暴力枚举解空间,具体的解空间类型需要根据题目来理解构造。
2.3 循环枚举解空间
1、首先确定解空间的维度,即问题中需要枚举的变量个数。
例如当题目要求的是满足条件的数字时,我们可以循环枚举某个范围内的数字。
如果要求的是满足条件的二元组,我们可以用双重循环分别枚举第一个和第二个变量,从而构造出一个二元组。
2、对于每个变量,确定其可能的取值范围。这些范围可以根据问题的性质和约束条件来确定。这一步往往是时间复杂度优化的关键。
3、在循环体内,针对每个可能解进行处理。可以进行问题的验证、计算、输出等操作。
三、模拟算法介绍
3.1 模拟算法介绍
模拟算法通过模拟实际情况来解决问题,一般容易理解但实现起来比较复杂,有很多需要注意的细节,或者是一些所谓很“麻烦”的东西。
模拟题一般不涉及太难的算法,一般就是由较多的简单但是不好处理的部分组成的,考察选手的细心程度和整体的逻辑思维。
一般为了使得模拟题写的逻辑清晰一些,经常会写比较多的小函数来帮助解题,例如int和string的相互转换、回文串的判断、日期的转换、各种特殊条件的判断等等。
四、递归
4.1 递归的介绍
概念:递归是指函数直接或间接调用自身的过程。
解释递归的两个关键要素:
基本情况(递归终止条件):递归函数中的一个条件,当满足该条件时,递归终止,避免无限递归。可以理解为直接解决极小规模问题的方法。
递归表达式(递归调用):递归函数中的语句,用于解决规模更小的子问题,再将子问题的答案合并成为当前问题的答案。
4.2 递归如何实现
递归函数的基本结构如下:
实现过程:
1、将大问题分解为规模更小的子问题。
2、使用递归调用解决每个子问题。
3、通过递归终止条件来结束递归。
设计时需注意的细节:
1、确保递归一定能到递归出口,避免无限递归,这可能导致TEL(超时)、MLE(超内存)、或RE(运行错误)。
2、考虑边界条件,有时候递归出口不止一个。
3、避免不必要的重复计算,尽可能优化递归函数的性能(例如使用记忆化)。
4.3 递归和循环的比较
递归的特点:
1、直观、简洁、易于理解和实现。
2、适用于问题的规模可以通过递归调用不断减小的情况。
3、可以处理复杂的数据结构和算法,如树和图的遍历。
4、存在栈溢出风险(栈空间一般只有8MB,所以递归层数不宜过深,一般不超过1e6层)。
循环的特点:
1、直接控制流程,效率较高。
2、适用于问题的规模没有明显的缩减,或者需要特定的迭代次数。
3、适合处理大部分的动态规划问题。
在部分情况下,递归和循环可以相互转化。(dfs栈)
总结
相关文章:
蓝桥杯备赛笔记(二)
这里的笔记是关于蓝桥杯关键知识点的记录,有别于基础语法,很多内容只要求会用就行,无需深入掌握。 文章目录 前言一、时间复杂度1.1 时间复杂度⭐1.2 空间复杂度1.3 分析技巧 二、枚举2.1 枚举算法介绍2.2 解空间的类型2.3 循环枚举解空间 三…...
MATLAB中的APPdesigner绘制多图问题解析?与逻辑值转成十进制
在matlab APPdesigner中绘图可以用UIAxes组件进行绘图,但是当想多张图时,只能提前绘制图像区域不方便。下面是几种办法: 为了操作可以添加Panl组件,方便操作。 1、当是要求的几个图像大小都是相同时刻采用函数: til…...
Spring Cloud-Sentinel
Sentinel服务熔断与限流 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。 官网地址:home | Sentinelhttps://sen…...
Java中使用EasyExcel
Java中使用EasyExcel 文章目录 Java中使用EasyExcel一:EasyExcel介绍1.1、核心函数导入数据导出数据 1.2、项目实际应用导入数据导出数据 1.3、相关注解ExcelProperty作用示例 二:EasyExcel使用2.1、导入功能2.2、导出功能 三:EasyExcel完整代…...
Linux中退出vi编辑器的命令
在Linux中退出vi编辑器的命令有以下几种: 保存并退出:在命令模式下,按下Esc键退出插入模式,然后输入:wq或:x,按下回车键即可保存修改并退出vi编辑器。 不保存退出:在命令模式下,按…...
建筑兔零基础自学python记录18|实战人脸识别项目——视频检测07
本次要学视频检测,我们先回顾一下图片的人脸检测建筑兔零基础自学python记录16|实战人脸识别项目——人脸检测05-CSDN博客 我们先把上文中代码复制出来,保留红框的部分。 然后我们来看一下源代码: import cv2 as cvdef face_detect_demo(…...
自定义基座实时采集uniapp日志
自定义基座实时采集uniapp日志 打测试包给远端现场(测试/客户)实际测试时也能实时看到日志了,也有代码行数显示。 流程设计 #mermaid-svg-1I5W9r1DU4xUsaTF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid…...
【java】方法:遍历/求最大值/判断是否存在
1.遍历 public class ArrayTraversal {// 定义一个静态方法用于遍历数组并在一行上显示元素public static void printArray(int[] arr) {for (int num:arr) {// 打印数组元素,不换行System.out.print(num" ");}// 遍历结束后换行System.out.println();}p…...
【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第六节】
ISO 14229-1:2023 UDS诊断服务测试用例全解析(ReadDataByIdentifier0x22服务) 作者:车端域控测试工程师 发布日期:2025年2月13日 关键词:UDS诊断协议、0x22服务、ReadDataByIdentifier、DID读取、ECU测试 一、服务功能…...
dedecms 开放重定向漏洞(附脚本)(CVE-2024-57241)
免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…...
AI知识库 - Cherry Studio
1 引言: 最近 DeepSeek 很火啊,想必大家都知道,DeepSeek 这个开源的模型出来后,因其高质量能力和R1 的思维链引发了大家本地部署的热潮。我也不例外,本地部署了一个 14B 的模型,然后把,感觉傻傻…...
20250213 隨筆 雪花算法
雪花算法(Snowflake Algorithm) 雪花算法(Snowflake) 是 Twitter 在 2010 年開發的一種 分布式唯一 ID 生成算法,它可以在 高併發場景下快速生成全局唯一的 64-bit 長整型 ID,且不依賴資料庫,具…...
(前端基础)HTML(一)
前提 W3C:World Wide Web Consortium(万维网联盟) Web技术领域最权威和具有影响力的国际中立性技术标准机构 其中标准包括:机构化标准语言(HTML、XML) 表现标准语言(CSS) 行为标准…...
pdf.js默认显示侧边栏和默认手形工具
文章目录 默认显示侧边栏(切换侧栏)默认手形工具(手型工具) 大部分的都是在viewer.mjs中的const defaultOptions 变量设置默认值,可以使用数字也可以使用他们对应的变量枚举值 默认显示侧边栏(切换侧栏) 在viewer.mjs中找到defaultOptions,大概在732行,或则搜索sidebarViewOn…...
学习总结三十三
括号序列 如果它是一个右括号,考察它与它左侧离它最近的未匹配的的左括号。如果该括号与之对应(即小括号匹配小括号,中括号匹配中括号),则将二者配对。简单理解,找到一个右括号,向左找一个左括号…...
微信小程序 - 组件
组件通信事件 父传子 父组件如果需要向子组件传递指定属性的数据,在 WXML 中需要使用数据绑定的方式 与普通的 WXML 模板类似,使用数据绑定,这样就可以向子组件的属性传递动态数据。 父组件如果需要向子组件传递数据,只需要两…...
如何在Ubuntu中切换多个PHP版本
在Ubuntu环境下实现PHP版本的灵活切换,是众多开发者与系统管理员的重要技能之一。下面,我们将深入探讨如何在Ubuntu系统中安装、配置及管理多个PHP版本,确保您的开发环境随心所欲地适应各类项目需求。 开始前的准备 确保您的Ubuntu系统保持…...
解决DeepSeek服务器繁忙问题
目录 解决DeepSeek服务器繁忙问题 一、用户端即时优化方案 二、高级技术方案 三、替代方案与平替工具(最推荐简单好用) 四、系统层建议与官方动态 用加速器本地部署DeepSeek 使用加速器本地部署DeepSeek的完整指南 一、核心原理与工具选择 二、…...
Huatuo热更新--安装HybridCLR
1.自行安装unity编辑器 支持2019.4.x、2020.3.x、2021.3.x、2022.3.x 中任一版本。推荐安装2019.4.40、2020.3.26、2021.3.x、2022.3.x版本。 根据你打包的目标平台,安装过程中选择必要模块。如果打包Android或iOS,直接选择相应模块即可。如果你想打包…...
flink cdc2.2.1同步postgresql表
目录 简要说明前置条件maven依赖样例代码 简要说明 在flink1.14.4 和 flink cdc2.2.1下,采用flink sql方式,postgresql同步表数据,本文采用的是上传jar包,利用flink REST api的方式进行sql执行。 前置条件 1.开启logical 确保你…...
Golang协程调度模型MPG
深入解析Golang协程调度模型MPG:原理、实践与性能优化 一、为什么需要MPG模型? 在传统操作系统调度中,线程作为CPU调度的基本单位存在两个根本性挑战:1)内核线程上下文切换成本高昂(约1-5μs)…...
纪念日倒数日项目的实现-【纪念时刻-时光集】
纪念日/倒数日项目的实现## 一个练手的小项目,uniappnodemysql七牛云。 在如今快节奏的生活里,大家都忙忙碌碌,那些具有特殊意义的日子一不小心就容易被遗忘。今天,想给各位分享一个“纪念日”项目。 【纪念时刻-时光集】 一…...
WPF的MVVMLight框架
在NuGet中引入该库: MVVMLight框架中的命令模式的使用: <StackPanel><TextBox Text"{Binding Name}"/><TextBox Text"{Binding Title}"/><Button Content"点我" Command"{Binding ShowCommand…...
DeepSeek从入门到精通(清华大学)
DeepSeek是一款融合自然语言处理与深度学习技术的全能型AI助手,具备知识问答、数据分析、编程辅助、创意生成等多项核心能力。作为多模态智能系统,它不仅支持文本交互,还可处理文件、图像、代码等多种格式输入,其知识库更新至2…...
【DeepSeek】DeepSeek R1 本地windows部署(Ollama+Docker+OpenWebUI)
1、背景: 2025年1月,DeepSeek 正式发布 DeepSeek-R1 推理大模型。DeepSeek-R1 因其成本价格低廉,性能卓越,在 AI 行业引起了广泛关注。DeepSeek 提供了多种使用方式,满足不同用户的需求和场景。本地部署在数据安全、性…...
windows平台上 oracle简单操作手册
一 环境描述 Oracle 11g单机环境 二 基本操作 2.1 数据库的启动与停止 启动: C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on 星期五 7月 31 12:19:51 2020 Copyright (c) 1982, 2013, Oracle. All rights reserved. 连接到:…...
【弹性计算】弹性计算的技术架构
弹性计算的技术架构 1.工作原理2.总体架构3.控制面4.数据面5.物理设施层 虽然弹性计算的产品种类越来越多,但不同产品的技术架构大同小异。下面以当前最主流的产品形态 —— 云服务器为例,探查其背后的技术秘密。 1.工作原理 云服务器通常以虚拟机的方…...
RAG(检索增强生成)落地:基于阿里云opensearch视线智能问答机器人与企业知识库
文章目录 一、环境准备二、阿里云opensearch准备1、产品文档2、准备我们的数据3、上传文件 三、对接1、对接文本问答 一、环境准备 # 准备python环境 conda create -n opensearch conda activate opensearch# 安装必要的包 pip install alibabacloud_tea_util pip install ali…...
【踩坑】pytorch模型导出部署onnx问题记录
问题1:repeat_interleave 无法转译 具体报错为: TypeError: torch._C.Value object is not iterable (Occurred when translating repeat_interleave).原因是我的模型代码中有: batch_indices torch.repeat_interleave(torch.arange(can…...
利用prompt技术结合大模型对目标B/S架构软件系统进行测试
利用prompt技术结合大模型对目标B/S架构软件系统进行测试,可参考以下步骤和方法: 测试需求理解与prompt设计 明确测试点:梳理B/S架构软件系统的功能需求、非功能需求(如性能、安全性、兼容性等),确定具体的测试点,如用户登录功能、数据查询功能、系统响应时间要求等。设…...
