自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 带权图的 Dijkstra 最短路径算法

Dijkstra算法用于求解带权非负图的最短路径问题。核心思想是通过贪心策略,逐步确定从起点到各顶点的最短路径。算法维护距离数组dist[]、路径计数cnt[]、最大点权和max_quan[]等数据结构,优先队列优化后时间复杂度更优。样题"城市间紧急救援"要求输出最短路径数量、最大救援队数量及具体路径,通过邻接表存储图结构,使用优先队列实现堆优化Dijkstra算法,在更新距离时同步维护路径计数和点权和,最后通过前驱数组回溯得到完整路径。

2026-04-01 17:21:35 380

原创 并 查 集

并查集是一种处理不相交集合的高效数据结构,支持查找和合并操作。它通过父节点数组记录元素归属,初始时每个元素自成一个集合。查找操作采用路径压缩优化,将节点直接指向根节点;合并操作则按秩合并,将较小树合并到较大树下。这两种优化使操作接近常数时间。示例代码展示了并查集的初始化、查找和合并实现,适用于集合合并与查询场景。

2026-03-11 15:31:36 70

原创 堆与优先队列

堆是一种基于完全二叉树的特殊数据结构,分为大根堆和小根堆。大根堆的父节点值≥子节点,小根堆相反。堆通常用数组存储,索引计算方便。堆排序通过建堆和下沉调整实现,时间复杂度O(nlogn),空间复杂度O(1),是不稳定排序。C++的priority_queue基于堆实现,提供push、pop等操作,适用于TopK问题。例如求最小K个数可用小根堆实现,时间复杂度最优为O(nlogK)。堆结构在内存受限场景下优势明显,适合处理大规模数据。

2025-11-24 22:44:25 941

原创 二叉树糕手

摘要:二叉树具有节点数与高度的特定关系,高度为h时最少h个节点(斜树),最多2^h-1个节点(满二叉树)。关键性质包括:叶节点数=度为2的节点数+1;完全二叉树可由节点数反推层数;存储结构分为顺序存储(适合完全二叉树)和链式存储;遍历方式包括深度优先(栈实现)和广度优先(队列实现)。二叉树结构与二进制数存在相似性,递归特性使其操作多可通过递归实现。

2025-11-24 15:50:42 308

原创 滑动窗口与单调队列

本文介绍了滑动窗口算法的三种典型应用场景。1)定长窗口问题,如力扣最大区间平均数,通过维护固定长度的窗口和来求解;2)变长窗口问题,如最大连续1个数,通过动态调整窗口边界满足条件;3)窗口内最值问题,如滑动窗口最大值,需使用单调队列维护窗口内元素的单调性,保证队首始终为当前最值。文章通过具体代码示例展示了每种场景的实现方法,并分析了时间复杂度的优化效果,从O(nk)提升到O(n)。

2025-11-21 18:38:15 473

原创 指针和内存地址

计算机内存以字节为单位连续存储,每个字节有唯一地址。32位系统地址范围0x00000000-0xFFFFFFFF(4GB),64位系统更大。1字节=8位二进制,可用2位十六进制简洁表示。指针是存储内存地址的变量,其大小由系统位数决定:32位系统指针为4字节,64位系统为8字节。十六进制最适合表示内存地址,因其与字节二进制完美对应。现代主要采用64位系统,其16EB寻址能力远超实际需求。

2025-11-21 15:22:13 179

原创 ​单调栈神养成手册

摘要:单调栈是一种保持栈内元素单调递增或递减的特殊数据结构,用于高效解决数组元素间大小关系问题。主要分为单调递增栈(栈底到栈顶递增)和单调递减栈(栈底到栈顶递减),时间复杂度为O(n)。典型应用包括:1)寻找右侧第一个更大元素(使用单调递减栈);2)计算直方图最大矩形面积(维护左右两侧第一个更小值);3)求解股票价格跨度(寻找左侧第一个更大值)。通过灵活选择入栈顺序和比较条件,单调栈能高效处理多种区间极值问题。

2025-11-20 15:46:38 1169

原创 <vector>

本文详细解析了C++标准库中的vector容器实现原理与使用方法。vector作为动态数组,具有内存连续存储、高效随机访问和自动扩容的特点。其底层通过三个指针管理内存(begin、end、_end_of_storage),当元素数量超过容量时会触发1.5-2倍的动态扩容,导致原有迭代器失效。文章从创建初始化、元素访问、修改操作、容量管理和迭代器等五个维度系统介绍了vector的常见使用方式,并强调了操作时的注意事项,如扩容机制和迭代器失效问题。掌握这些核心知识有助于开发者更高效地使用vector容器。

2025-11-17 22:04:03 634

原创 Makefile入门指南

功能:将变量var作为 “函数模板”,用替换模板中的(参数占位符)。示例:# 定义模板变量(参数$(1)、$(2)为占位符)# 调用模板,传递参数a和bresult = $(call template,a,b) # result的值为a_b.txtMakefile 通过规则定义、变量、函数等机制,实现了项目的自动化、增量构建,是 C/C++ 项目中最常用的构建工具。掌握其基础规则和进阶用法,可大幅提升大型项目的开发效率。

2025-11-16 16:56:23 1213

原创 欧拉筛——找出 [2, n] 区间内的所有素数

欧拉筛(线性筛)是一种高效的素数筛选算法,时间复杂度为O(n)。其核心思想是让每个合数只被其最小质因数筛除,避免重复标记。算法通过遍历每个数进行素性判断,将素数存入数组,同时用当前数与其已发现的素数相乘来标记合数。关键优化在于当当前数能被素数整除时立即终止内层循环,确保每个合数仅被其最小质因数筛除一次。这种机制有效减少了不必要的计算,使算法效率达到线性级别,适用于大规模素数查找需求。

2025-11-16 16:18:15 344

原创 GCC入门指南

GCC是Linux环境下开发的核心编译器工具集,支持C/C++等语言。其编译流程分为预处理、编译、汇编和链接四个阶段,可通过选项单独控制。常用命令包括:-o指定输出文件,-Wall开启警告,-g生成调试信息,-I/-L指定头文件和库路径,-D定义宏。GCC支持静态库(.a)和动态库(.so),并可通过优化选项(-O2)提升性能。多文件项目可统一编译或分段处理,数学库等需用-l参数链接。掌握GCC命令能有效控制编译过程,提高开发效率。

2025-11-09 16:44:17 1675

原创 Linux实用操作

本文介绍了Linux终端常用快捷键、软件包管理工具apt、系统服务管理工具systemctl、软连接创建方法、网络传输命令(ping/wget/curl)、端口基础知识、环境变量操作以及压缩工具(tar/zip)的使用。主要内容包括:1. 终端快捷键如Ctrl+C强制停止、Ctrl+D退出等高效操作;2. apt安装/更新/卸载软件包及依赖管理;3. systemctl管理服务状态和系统运行级别;4. 软连接创建与使用技巧;5. 网络诊断与文件传输命令;6. 端口类型与管理方法;7. 环境变量设置与永久配置

2025-11-06 20:18:28 836

原创 Linux用户和权限

本文介绍了Linux系统中的用户权限管理机制。系统包含普通用户和root管理员用户,root拥有最高权限但需谨慎使用。文章详细讲解了用户切换命令su和sudo的使用方法,以及用户组管理操作如groupadd、useradd等。同时阐述了Linux权限控制的三个级别(用户、组、其他)和三种权限(读r、写w、执行x),并介绍了修改权限的chmod命令和修改属主/属组的chown命令。重点强调了普通用户与root用户的权限差异,以及通过sudo临时获取root权限的安全操作方式。

2025-11-06 15:26:48 768

原创 Linux 基本命令

Linux常用命令摘要 Linux命令通过Shell与系统交互,基本格式为命令 [选项] [参数],支持选项组合(如ls -la)。核心命令包括: 文件操作:ls(列出文件)、cd(切换目录)、mkdir(创建目录)、rm -rf(删除目录,慎用)、cp/mv(复制/移动)、cat/less(查看文件内容); 系统信息:df -h(磁盘空间)、top/htop(进程监控)、ps aux(进程快照); 权限管理:chmod(修改权限)、sudo(临时提权); 网络工具:ping(连通测试)、ip addr(查

2025-11-04 22:36:20 839

原创 STM32F103C8T6--DMA

DMA(直接存储器访问)技术可实现外设与存储器间的高效数据传输,无需CPU干预。其核心优势在于减少CPU负担,提升系统效率。存储器类型包括ROM(存储程序代码)、RAM(存储临时变量)和外设寄存器等,各有特定地址范围。DMA初始化涉及配置源/目标地址、数据宽度、传输方向等参数,通过AHB总线工作。使用时需先禁用通道、设置传输计数器再启用,并通过标志位判断传输完成。该技术支持外设到存储器、存储器间等多种传输模式,能显著优化嵌入式系统性能。

2025-10-26 20:59:27 503

原创 STM32F103C8T6--ADC

STM32F103C8T6的ADC模块采用12位逐次逼近型转换器,支持10个外部和2个内部通道。其核心原理是将0-3.3V模拟信号转换为0-4095的数字值,转换过程包括采样保持和二分法逼近。转换时间受时钟频率影响,最大14MHz(PCLK2/6=12MHz),包含1.5周期采样和12.5周期转换。使用前需校准以消除电容误差,可选择单次/连续转换和扫描模式。分辨率达0.8mV(3.3V/4096),寄存器采用16位右对齐存储12位结果。

2025-10-26 20:46:36 425

原创 STM32F103C8T6--外部中断

EXTI中断机制通过GPIO电平变化触发中断,同号引脚共享EXTI线(如PA0/PB0共用EXTI0),需通过AFIO寄存器配置映射。支持上升沿、下降沿和双边沿三种触发方式,中断请求经NVIC裁决后执行。EXTI0-4为独立中断通道,EXTI5-9和EXTI10-15分别共享中断通道,需通过NVIC设置优先级。

2025-10-25 15:18:35 341

原创 STM32F103C8T6--定时器

定时器是嵌入式系统中的重要模块,主要功能包括计数、触发事件和信号生成。根据功能分为高级、通用和基本三类定时器,通过预分频器(PSC)和自动重载寄存器(ARR)控制计数速度和范围。定时器支持多种时钟源和触发模式,包括内部触发(ITR)、边沿检测(TI1_ED)和外部触发(ETR)。输入捕获功能可测量脉冲参数,输出比较可生成PWM等信号。从模式提供复位、门控等同步方式,编码器接口支持正交解码。这些功能共同实现了精准定时、电机控制等应用需求。

2025-10-25 15:18:14 1863 1

原创 STM32F103C8T6--深入GPIO

STM32的GPIO是微控制器与外部交互的基础接口,可实现数字信号输入输出及复用功能。其硬件结构包含保护电路、输出电路和输入电路,支持8种工作模式。输出电路包括推挽和开漏两种方式,输入电路则通过施密特触发器处理信号波动,并提供模拟、浮空、上下拉等多种输入模式。GPIO引脚具有保护二极管,可防止异常电压损坏芯片,5V容忍引脚还支持更高电压输入。

2025-10-20 19:53:42 714

原创 向上取整 和 四舍五入

摘要:本文分析了整数运算中的向上取整和四舍五入技巧。对于向上取整问题(n/m),提出通过计算(n+m-1)/m来实现,利用整数除法的截断特性确保结果正确。对于四舍五入,介绍了(x+y/2)/y的计算方法,该技巧能正确处理边界情况,但仅适用于非负整数运算。这两种方法都利用了整数除法的特性,为计算机编程中的数值处理提供了有效解决方案。

2025-10-20 12:46:44 569

原创 PID——双环PID

摘要:多环PID通过串级控制实现对多个物理量的精确调节,在工业控制中广泛应用。其中双环PID(如位置环+速度环)具有显著优势:1)内环快速抑制扰动;2)分层调试简化参数整定;3)提升系统稳定性和动态性能;4)提高稳态精度;5)增强系统鲁棒性。文中提供了基于STM32的双环PID电机控制代码实现,展示了外环位置控制通过内环速度控制最终输出PWM的典型架构。这种控制方式在需要兼顾动态响应与稳态精度的场合(如电机控制、机械传动)具有重要价值。

2025-10-09 18:03:53 1684 1

原创 PID——输出偏移输&输入死区

摘要:本文介绍了PID控制中输出偏移和输入死区两种优化方法。输出偏移通过在非零输出值上叠加固定偏移量(±5),解决执行器在低输出时无动作的问题;输入死区则在误差绝对值小于5时停止调控,避免微小波动导致的频繁调节。两种方法通常结合使用,既能提高响应速度,又能有效抑制抖动问题。

2025-10-09 18:03:34 339

原创 PID--微分项D

摘要:PID控制中的微分项通过误差变化斜率预测未来趋势,增强系统稳定性但易受噪声干扰。普通PID微分项对目标值突变敏感,微分先行将其改为对实际值微分以减少影响。不完全微分通过低通滤波器平滑微分输出,缓解噪声干扰问题。两种改进方法分别通过调整微分项计算方式(目标值vs实际值)和引入加权平均机制,有效提升了PID控制器的抗干扰能力和响应平稳性。

2025-10-08 18:50:54 705

原创 PID公式的部署与选择

本文介绍了PID控制器的两种离散形式:位置式和增量式。位置式PID直接由连续形式离散化得到,输出全量控制值;增量式PID通过位置式推导得到,输出控制增量。两种形式可通过调整中间变量实现不同特性。文中还给出了位置式PID的C语言代码实现,包括误差计算、积分处理、输出限幅等关键步骤。通过比较两种PID形式的特点,为选择合适的控制算法提供了参考。

2025-10-08 17:27:13 285

原创 PID--积分项I

本文探讨了PID控制中积分项的作用及优化方法。积分项通过累积历史误差消除稳态误差,但会导致系统滞后性和超调问题。文章分析了离散化积分实现方式,指出积分项权重过大时会影响响应速度。针对积分项带来的问题,提出了三种解决方案:积分限幅防止积分饱和、积分分离避免早期误差积累、变速积分动态调整积分作用。这些方法通过合理设置阈值和参数,在保证消除稳态误差的同时,优化系统响应特性。实际应用中需根据具体场景平衡积分项作用,以获得最佳控制效果。

2025-10-06 18:40:32 1771

原创 PID --比例项P

摘要:纯比例(P)控制的PID系统中,输出仅与当前误差成正比。较大的比例系数可加快响应速度但会增大超调,系统通常存在稳态误差。以汽车速度控制为例,当牵引力与阻力平衡时,实际速度将稳定在低于目标值的状态,形成稳态误差。这种现象源于被控对象的自发偏移特性:当比例输出为0时,系统仍会产生固有偏差。实验显示增大比例系数虽能减小稳态误差,但会导致系统震荡。因此仅靠比例控制难以完全消除稳态误差。

2025-10-06 18:40:05 490

原创 PID 算法系统详解

PID算法是一种广泛应用于工业控制的闭环控制方法,通过比例(P)、积分(I)、微分(D)三个环节协同作用来消除偏差。

2025-10-03 17:03:54 547 1

原创 以江协科技STM32入门教程的方式打开FreeRTOS——STM32C8T6如何移植FreeRTOS

本文介绍了FreeRTOS实时操作系统在STM32F103C8T6上的移植过程。FreeRTOS通过多任务管理和实时调度,解决了传统单任务系统的局限性,实现多任务有序并发运行。移植核心在于适配硬件环境,包括任务上下文切换、系统时钟节拍和内存管理三个关键问题。文章详细说明了移植步骤:从工程模板准备、FreeRTOS源码获取、文件配置(特别是关键的FreeRTOSConfig.h文件),到中断优先级设置和系统时钟配置。最后通过LED闪烁示例验证移植成功,展示了FreeRTOS在STM32

2025-10-01 19:45:59 1595 4

原创 标准库容器——<set>

C++标准库中的set是一种关联容器,基于红黑树实现,具有自动排序和去重的特性。set通过红黑树保持元素有序性,支持O(logn)时间复杂度的查找、插入和删除操作。元素不可直接修改,必须删除后重新插入。set支持多种初始化方式,提供insert、find、erase等核心操作,以及迭代器遍历功能。与multiset和unordered_set相比,set具有有序性和元素唯一性的特点,适用于需要自动排序且元素唯一的场景。

2025-09-29 15:55:22 929

原创 一次性搞懂异或^

异或运算(XOR)是一种基本位运算,符号为^,遵循"相同为0,不同为1"的规则。它具有自反性(x^x=0)、恒等性(x^0=x)、交换律和结合律等特性,在编程中有多种实用价值:1)无临时变量交换数值;2)查找数组中唯一出现一次的数字;3)翻转特定位;4)判断整数同号;5)简单加密解密;6)计算汉明距离。这些应用利用了异或运算的还原律和位操作特性,实现高效简洁的解决方案,在算法优化和数据加密等场景中有重要作用。

2025-09-28 18:13:24 1706

原创 Brian Kernighan 算法

Brian Kernighan算法是一种高效计算二进制数中1的个数的算法,其核心是利用位运算n&(n-1)消除最右边的1。该算法通过循环次数等于1的个数实现高效计算,优于逐位遍历的暴力法。算法流程包括初始化计数器、循环消除1并计数,直到n变为0。此外,该算法原理还可用于判断2的幂次方,并可通过动态规划扩展计算多个数的比特位数。LeetCode相关题目展示了该算法在解决二进制计数问题中的实际应用。

2025-09-28 17:38:56 1362

原创 C++————快慢双指针寻找链表循环

slowfast在链表中寻找循环点可以使用双指针法,也就是著名的弗洛伊德判圈算法(Floyd's Cycle-Finding Algorithm)。此算法运用两个指针,一个快指针和一个慢指针,借助它们移动速度的差异来判断链表是否存在循环,若存在则找出循环点。

2025-03-13 20:10:14 941

原创 军事理论综合版参考答案

军事理论参考答案

2025-03-01 21:50:44 3203 1

原创 数论——最大公约数和最小公倍数

介绍最大公约数和最小公倍数及其联系,使用c++根据已知最大公约数和最小公倍数求取符合的数对。

2025-03-01 08:30:00 780

原创 C++————广度优先搜索(基础)

广度优先搜索(Breadth-First Search,简称 BFS)是一种用于遍历或搜索树或图的算法。包含我的世界的模拟,算法讲解,2道进阶题。

2025-02-11 17:39:32 1454

原创 C语言————快速幂

在 C 语言中,快速幂是一种用于高效计算幂运算(即,其中 a是底数base,n 是指数power)的算法。常规的幂运算方法是通过循环将底数a连乘n次,时间复杂度为O(n)。而快速幂算法利用了指数的二进制特性,将时间复杂度优化到了O(log n),在处理大指数时能显著提高计算效率。

2025-02-09 23:02:28 1196

原创 试除法素数判断

素数是指一个大于 1 的自然数,除了 1 和它自身外,不能被其他自然数整除的数。该函数通过排除小于 2 的数、能被 2 或 3 整除的数,然后只检查6k ± 1形式的数是否能整除num,从而高效地判断一个数是否为素数。

2025-02-08 16:16:59 1076

原创 五花八门的排序算法

本文介绍了多种排序算法及其实现原理。冒泡排序通过相邻元素比较交换实现排序,时间复杂度O(n²);选择排序每次选择最小元素放在已排序末尾,复杂度同样O(n²);插入排序将元素插入到已排序部分的正确位置,最好情况O(n)。归并排序采用分治思想,稳定时间复杂度O(nlogn),但需要额外空间;快速排序选择基准值分区递归排序,平均O(nlogn),最坏O(n²)。桶排序通过分桶和桶内排序实现,平均O(n+k)复杂度,适合均匀分布数据。文章还比较了不同算法的时空复杂度及适用场景,指出桶排序在特定情况下能以空间换时间提

2025-02-07 15:09:39 2095

原创 队列<queue>和双端队列<deque>

队列是一种遵循FIFO原则的线性数据结构,支持入队(push)、出队(pop)、判空(empty)等操作。C++中可通过<queue>实现,包含front()获取队首、back()获取队尾元素等功能。双端队列(deque)则支持两端高效操作,底层采用"分段连续存储+中控数组"结构,实现O(1)时间复杂度的双端插入删除和随机访问。deque通过数据块和中控指针数组的配合,既保持随机访问能力,又避免了单一连续数组扩容时的性能问题,是STL中功能灵活的容器之一。

2025-02-03 09:00:00 2685

原创 快速读取技巧

C++快读技术通过优化输入操作提升性能,适用于大规模数据处理。相比标准cin,快读方法(如使用getchar手动解析)能减少类型检查开销,提高读取速度。实现方式包括读取正整数、带符号整数等,也可通过引用简化代码。此外,通过ios::sync_with_stdio(false)和cin.tie(nullptr)可进一步加速标准输入输出,但会禁用与C标准库的同步和输入输出绑定,适合非交互场景。这些优化在算法竞赛等需要高效输入输出的场景中尤为重要。

2025-02-02 09:00:00 1238

STM32C8T6移植FreeRTOS所需文件

包含FreeRTOS官网zip文件

2025-10-01

STM32C8T6移植FreeRTOS的完成模版

包含FreeRTOS完成模版

2025-10-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除