实用算法实践-第 32 篇 其它

PID算法在STM32上的实现 PID调节算法在STM32上的实现 (一)PID控制算法(P:比例 I:积分 D:微分) (二)首先先说明原理,使用的是数字PID算法,模拟PID算法在计算机这样的系统中是不能够直接使用的,数字PID算法又分为位置式PID控制算法和增量式PID控制算法,那么下面从原理上说明这两种算法 (三)原理分析如图 (四)从上面图中我们可以得到定义 定义变量 用户设定值: SV 当前值(实际值): PV 偏差: E = SV - PV (五)如果我们在一段时间内就从传感器读取一个值,那么我.. 阅读详情

32.1    平衡三进制

       PKU JudgeOnline, 1702, Eva'sBalance是一个平衡三进制问题的实例。将一个某进制数转换为平衡三进制数的方法为:先转化为用0,1,2表示的3进制,然后通过“借位”转换。也即:

       若对应的系数为2,则变为-1,高一位+1。

       若对应的系数为3,则变为0,高一位+1。

       为0或1时不变

32.1.1   实例

PKU JudgeOnline, 1702, Eva's Balance.

32.1.2   问题描述

有一个天平和一套重量为3^n的砝码,每种砝码只有一个。给定一个重量,给出维持天平平衡的砝码和重物的放置方法。

32.1.3   输入

3

9

5

20

32.1.4   输出

empty9

1,39

1,9 3,27

32.1.5   程序

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
     int cases;
     int num;
     inttri[40];
     int top;
     int i;
     int poise;
     int first;
     cin >> cases;
     for(; cases> 0; cases--){
         memset(tri, 0, sizeof(tri));
         cin >> num;
         top = 0;
         while(num!= 0){
              tri[top++] = num % 3;
              num /= 3;
         }
         for(i =0; i < top; i++){
              if(tri[i]> 1){
                   tri[i] -= 3;
                   tri[i + 1] ++;
                   if(i== top - 1)
                   {
                       top ++;
                   }
              }
         }
         poise = 1;
         first = 1;
         for(i =0; i < top; i++){
              if(tri[i]< 0){
                   if(first== 1){
                       first = 0;
                       cout << poise;
                   }else{
                       cout<< "," << poise ;
                   }
              }
              poise *= 3;
         }
         if(first== 1)
         {
              cout << "empty";
         }
         cout << "";
 
         poise = 1;
         first = 1;
         for(i =0; i < top; i++){
              if(tri[i]> 0){
                   if(first== 1){
                       first = 0;
                       cout << poise;
                   }else{
                       cout<< "," << poise ;
                   }
              }
              poise *= 3;
         }
         if(first== 1)
         {
              cout << "empty";
         }
         cout << endl;
 
     }
}

32.2    按位运算

PKU JudgeOnline, 3652, Persistent Bits.

32.3    分数的循环小数表示法

32.3.1   实例

任一分数1/n  (2 ≤ n ≤ 100),均可表示为循环小数的形式。例如:

1/2= .5

1/3= .(3)

1/6= .1(6)

求1/n的循环小数表示形式中k(0 ≤ k ≤ 9)出现的次数。

32.3.2   输入

35

73

70

32.3.3   输出

1

1

0

32.3.4   分析

由于这里的n仅是一个两位数,所以这个题目显得比较简单。

32.3.5   程序

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream.h>
int a[101][10];
int b[101][100];
int main()
{
     int sum;
     int i,j;
     int divided;
     int remain;
     int n,k;
     memset(a, 0 , sizeof(a));
     memset(b, 0 , sizeof(b));
     for(i = 2;i < 10; i++)
     {
         remain = 1;
         while(remain!= 0){
              if(b[i][remain]!= 0)
              {
                   break;
              }
              b[i][remain] ++;
              remain = remain * 10;
              divided = remain/i;
              remain = remain%i;
              a[i][divided] ++;
         }
     }
     a[10][1] = 1;
     for(i = 11;i < 100; i++)
     {
         remain = 10;
         a[i][0] ++;
         b[i][1]++;
         while(remain!= 0){
/*            if(i ==12)
                   cout<<"remain"<< remain << " ";*/
              if(b[i][remain]!= 0)
              {
                   break;
              }
              /*if(i== 12)
                   cout<< "remain"  <<remain << "divided"<< divided <<endl;*/
              b[i][remain] ++;
              remain = remain * 10;
              divided = remain/i;
              remain = remain%i;
              a[i][divided] ++;
         }
     }
/*   for(i = 99; i <101; i++)
     {
         cout << i<<": ";
         for(j = 0; j< 10; j++){
              cout<< a[i][j] << " ";
         }
         cout<<endl;
     }*/
     a[100][0] = 1;
     a[100][1] = 1;
     while(cin>> n >> k){
         sum = 0;
         for(i =2; i <= n; i++){
              sum += a[i][k];
         }
         cout <<sum<<endl;
     }
     return 1;
}

32.1    参考资料

本文中没有加以注释的算法在[i]中都可以找到。本文中没有介绍的算法论述、推导也基本可以在该文中找到。

[ii]文对状态空间搜索的讨论十分细致、深入,图示也非常清晰明了,写得非常不错。

[iii]文也是介绍人工智能的非常不错的书。

[iv]文内容丰富,不过由于很多问题没有详细引入数学模型和推导证明,所以稍显复杂难懂。

[v]文中对图算法进行了综合、精细的论述,其中最惹人注目的是其中对于算法的数学模型分析,如其中的第四章。但是该文比较难懂。

[vi]文中对欧拉回路、欧拉通路、有向欧拉回路、有向欧拉通路进行了介绍。不过其中的算法描述不够精炼、清晰。

[vii]文全面介绍了最小割模型的原理和应用。

 [viii]介绍了图。

本文的很多算法的实现很多都没有优化。例如Prim算法中,从集合中取出最小的一条边,并从集合中删除的实现,性能上就远不及斐波那契堆的实现。还有包含这种操作的其它算法也是如此。

本文章欢迎转载,请保留原始博客链接http://blog.youkuaiyun.com/fsdev/article



[i] Introduction to Algorithms, Second Edtion. Thomas H.Cormen, CharlesE.Leiserson, Ronald L.Rivest, Clifford Stein.

[ii] Artificial Intelligence, Structures and Strategies for Complex ProblemSolving. Geoge F. Luger.

[iii] Artificial Intelligence, A Modern Approach. Stuart Russell, PrterNorvig.

[iv] 算法艺术与信息学竞赛。刘汝佳,黄亮。清华大学出版社。

[v] 网络算法与复杂性分析,第二版。谢政。国防科技大学出版社。

[vi] Discrete Mathematics, Fifth Edition. John A.Dossey, Albert D.Otto,Lawrence E.Spence, Clarles Vanden Eynden.

[vii] 最小割模型在信息学竞赛中的应用。胡伯涛(Amber)。

[viii] Introduction to Gragh Theorty. Douglas B.West.

CRC32算法开发详解 本文详细解析了CRC32算法在汽车电子系统中的应用与实现。CRC32作为高可靠性校验算法,广泛应用于车载以太网通信、ECU固件验证和ADAS系统等关键场景。文章深入剖析了CRC32的基本原理、计算流程和关键参数(多项式、初始值、反转设置等),并对比了不同标准模型(如ISO-HDLC、AUTOSAR、Castagnoli)的特点和适用领域。最后提供了基于宏定义的参数化实现方案,通过修改宏定义即可快速切换不同CRC32算法模型,满足汽车电子系统多样化的校验需求。该实现方案具有高度可配置性,便于在不同应用场景中灵 阅读详情

相关推荐

CRC32算法c#

 最近项目中,要用到crc32算法,项目组数据层技术员给了一个perl程序里面的crc32算法版本(c语言的),自己修改后,改成c#版本的了。c版本的:#include unsigned int crcTable[256] = { 0x0, 0x77073096, 0xee0e612c, 0x990951ba, 0x76dc419, 0x706af48f, 0xe963a535, 0x

烟缸 1万+

STM32CubeIDE的STM32H750XB下载算法

STM32CubeIDE 的 STM32H750XB STLDR下载算法 #STM32CubeIDE下载算法原理 #创建下载算法工程 #修改代码 #测试算法 #结束 STM32CubeIDE下载算法原理 STM32CubeIDE的下载算法和STM32CubeProg是一样的,通过创建与地址信息无关的算法文件,实现 初始化 int Init(void); 读 int Read (uint32_t Address, uint32_t Size, uint8_t* buffer); 写 int Writ

qq_37914879的博客 5395

stm32外挂spiflash的烧录算法

1,目前做了spiflash的stm32f103芯片 可以进行flash的读写 使用STM32CubeProgrammer +stlink 来实现spiflash的读写 目前只支持st的芯片 2,打算做一个mdk的spiflash 读写算法

liwen209的博客 5142

实用算法实践-第 30 篇 组合数学

30.1    Ctalan数 PKU JudgeOnline, 1095, Trees Made to Order. 30.2    Fibonacci数 Fibonacci数列的定义如下: f(n) = f(n - 1) + f(n - 2) (n >= 3) f(1) = 1, f(2) = 2 f(0)可定义为1。 用归纳法可以证明性质: f(n + m) = f(m -

李希的博客 1535

STM32上部署AI的两个实用软件——Nanoedge AI Studio和STM32Cube AI

异常检测、单分类、多分类、预测。左上角四个模型分别对应这四种库(AD:异常检测,nC:多分类,1C:单分类,E:预测),然后下面是以前做过的一些历史工程。我这里使用8.1版本,导入什么类型的模型就选什么格式,选择STM32Cube.AI runtime,Compression代表压缩模型,如果模型过于复杂,那么根据需求选择压缩程度,Optimization是选择时间和空间的协调程度,即时间优先还是空间优先。

m0_74825360的博客 1385

CRC32算法逆向分析

算法分为两部分: 1 表的构建 00401520 . 81EC 00040000 sub esp,0x400 ;给表0x400字节的空间 00401526 . 33C9 xor ecx,ecx 00401528 . 8D5424 00 lea edx,dword ptr ss:[esp] ;edx保存当前栈顶 0040152C . 56

xiaokong的专栏 1877

STM32CubeProgrammer STM32CubeIDE下载算法 外部存储QSPI Flash

随言: STM32CubeIDE QSPI间接模式和内存映射模式 读写W25Q64:https://blog.youkuaiyun.com/sudaroot/article/details/109097135 MDK KEIL 下载算法外部存储QSPI FLASH:https://blog.youkuaiyun.com/sudaroot/article/details/109517371 理论来说,STM32CubeProgrammer和 STM32 ST-LINK Utility下载算法程序是一样的,都能相互使用。 .

sudaroot的博客 1万+

STM32单片机PID控制算法实践与源码解析

本文还有配套的精品资源,点击获取 简介:本实例深入探讨STM32单片机上PID算法的实现过程,包括算法原理、参数调整以及在C/C++环境下的程序编写。通过分析PID算法的三个组成部分(比例项P、积分项I和微分项D),本课程将帮助学习者理解PID控制策略,并通过实际编程任务掌握如何在嵌入式系统中应用PID算法,优化系统性能并实现精确控制。源码文件包括初始化、误差计算、PID输...

weixin_36213081的博客 2429

实用算法实践-第 29 篇 计算几何学

29.1    最近点对 “最近”是指通常意义上的欧几里德距离。《算法导论》中对这个问题进行了介绍。[i]问对于经典的分治法求最近点对有深入的介绍和详尽的伪代码。 29.1.1   实例 PKU JudgeOnline, 3714, Raid. 29.1.2   问题描述 给定n个岗位和n个战士的坐标(0 ≤ X ≤1000000000, 0 ≤ Y ≤ 1000000000)。问这些战

李希的博客 1993

STM32平台上的FFT算法实现教程

离散傅里叶变换(DFT)是一种基本算法,用于将时域中的有限样本转换为频域。然而,DFT在计算上非常昂贵,特别是当样本数量较多时。FFT是DFT的一种快速实现算法,它通过一种称为“蝴蝶运算”的技巧极大地降低了计算复杂性,使得在资源受限的STM32微控制器上也能进行实时频谱分析成为可能。STM32FFT库是一个针对STM32微控制器优化的快速傅里叶变换(FFT)库。它被引入项目是为了解决复杂信号的频谱分析问题,从而实现快速、准确的频域转换。

weixin_33557333的博客 2581

STM32微控制器上的PID控制算法实践

htmltable {th, td {th {pre {简介:PID算法是一种用于精确控制系统响应的经典方法,它结合比例、积分和微分三部分的输出来调整控制量。STM32微控制器,以其丰富的外设接口和强大的处理能力,在嵌入式系统中实现PID算法方面表现出色。本教程介绍了PID算法的基本原理,以及在STM32中实现PID算法的步骤,包括参数初始化、误差计算、控制输出和闭环反馈。智能控制和电子大赛项目中常见的PID应用包括电机速度、温度和位置控制。

weixin_33431149的博客 1069

STM32实现PID算法,很实用

STM32实现PID算法,很实用 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了STM32微控制器实现PID算法的详细资源和代码。PID算法是一种广泛应用于工业控制系统的调节算法,通过调整比例(P)、积分(I)和微分(D)三个参数,实现对执行机构的精确控制。 功能 实现STM32上的PID算法。 支持根据实际执行机构调整PID参数,完成精确控制。 使用说明...

gitblog_06770的博客 423

SAP 运费处理方式

从直接的处理方式上看,情况1/2/3可以将运费记账到物料成本中,但情况4/5/6是直接记账到成本对象中,具体是要体现在损益表中,还是要结转到物料成本中,可依据业务要求进行好处理。如果体现在损益表中,不需要多过多额外的操作,如果要体现在物料成本中心,则需要再进行一系列的处理,最终将金额结转到物料成本中。因为在创建采购订单时不知道具体运费,可以不维护运费,只需要维护材料价格。:创建采购订单时,运费是由供应商承担,很多时候是包含在材料报价中,这种情况不需要专门针对运费进行处理,材料价格中已包含运费。

weixin_44506537的博客 3371

STM32算法的翅膀之MATLAB

仿真吧我们根本不知道我们要研究的对象的系统传递函数,不仿真直接在设备上运行如果是复杂的算法,没有借助Matlab的话首先找到合适的C算法就很困难,更别说进行调试,数据采集可视化以及分析了。今天就要带大家把Matlab和STM32结合起来,强强联合!废话不多说,开始搞事情!要实这篇文章,首先你得准备好下面的软件环境(今天的文章有点复杂,图片有点多,大家注意一点喽~) MATLAB (阿圆...

qq_39276007的博客 4441

VS2022配置Qt6

VS2022配置QT教程

Life is a struggle ! 6360

KVNAND架构:解决边缘设备部署LLM的内存与带宽挑战

大语言模型(LLM)在边缘设备部署时面临内存容量和带宽限制的核心挑战。传统方案依赖DRAM存储KV缓存,导致高昂成本和性能瓶颈。闪存计算(IFC)通过计算单元下沉和流水线优化缓解部分问题,但仍受限于DRAM依赖。KVNAND架构创新性地将KV缓存直接存储在3D NAND闪存中,结合异构计算和页面级KV映射技术,显著降低延迟和能耗。该架构特别适用于长上下文场景,如文档分析和个人助理应用,能有效解决内存溢出(OOM)问题并提升计算单元利用率。关键技术包括头组并行(HG)执行和混合键合设计,为边缘AI部署提供了新

weixin_27215337的博客 320

【转载】[经验] 嵌入式stm32实用的排序算法 - 交换排序

Ⅰ、写在前面 前面写了关于ADC采集电压的文章,大家除了求平均的方式来处理采样值,还有没有使用到其他的方式来处理采集值呢? 在某些情况下就需要对一组数据进行排序,并提取头特定的数据出来使用。 排序的应用场合很多,我这里就不再一一举例说明,掌握排序的基本算法,到时候遇到就有用武之地。 Ⅱ、排序算法分类 1.按存储分类:内部排序和外部排序 内部排序:是数据...

weixin_30540691的博客 1516

Labview实现服务器(server)与多客户端(clients)通信

服务器可以接收多个客户端发送的消息,并显示消息来源。 服务器可以发送消息到指定客户端 客户端可以自动连接服务器,断连后重连 客户端可以发送消息到服务器,可接收服务器消息 类似框架可以用做中央服务器及客户端项目

u013809089的博客 7976

stm32之外部flash下载算法

通过MDK创建一批与地址信息无关的函数,实现的功能主要有初始化,擦除,编程,读取,校验等,然后MDK调试下载阶段,会将算法文件加载到芯片的内部RAM里面(加载地址可以通过MDK设置),然后MDK通过与这个算法文件的交互,实现程序下载,调试阶段数据读取等操作。(1) 程序里面的操作adr -= QSPI_FLASH_MEM_ADDR,实际传递进来的地址是带了首地址的,即0x90000000。这个名字是方便用户查看的,比如设置为daiver_h7,那么输出的算法文件就是daiver_h7.flm。

c1063891514的博客 2905

爬取Unsplash高清壁纸:Python爬虫实战教程(最新技术)

在当今数字化时代,高清壁纸已经成为人们个性化设备的重要元素。Unsplash作为全球最知名的免费高质量图片网站,汇集了数百万张由全球摄影师贡献的高清图片。然而,Unsplash官网的下载方式需要手动操作,对于需要批量下载壁纸的用户来说效率较低。本文将带你深入探索如何使用Python爬虫技术高效爬取Unsplash高清壁纸,从基础到进阶,全面掌握图片爬取的核心技术。Unsplash成立于2013年,是一个完全免费的图片分享平台。高质量内容:所有图片均由专业摄影师上传,分辨率普遍达到4K以上免费商用。

2201_76125261的博客 935

Qt6导航组件系列专栏:30+常见导航场景的实现

本文介绍了Qt6导航组件系列专栏,涵盖30+常见导航场景的实现方案。专栏分为7组:基础侧边栏系列、社交与协作导航系列、文件与项目导航系列、工业与车载导航系列、创意与扩展导航系列、办公与效率导航系列、流程与引导导航系列。

u011186532的专栏 1133

crc32算法简单理解

最近用到CRC校验算法,就找了些资料,学习了一下,网上关于CRC32的资料也多,但感觉不是很完整,或者太高深。 CRC算法查表法很常见,但表是怎么来的,有些资料说得不很清楚。 我来说一下我的看法: 1.CRC校验变化太多,有CRC4/5/6/7/8/16/32,每一种的多项式也有很多种变化,并不是一成不变的; 2.输入输出方式也有区别,有一些初始值是0,有一些初始值是0xFFFFFFFF,有一些直...

weixin_42526491的博客 1万+

rk3576 适配以太网(百兆)

百兆以太网,也常被称为快速以太网,是一种在1990年代中期推出的计算机网络技术标准。它相当于把当时主流的10兆以太网速度提升了10倍,最高能提供 100 Mbps 的传输速率,让文件共享、视频传输等网络应用变得流畅许多。它在数据链路层面完全保留了传统以太网的帧格式和MAC机制,这意味着现有的网络软件可以无缝对接,用户从10兆网络升级到百兆网络时,通常只需要更换网卡和集线器/交换机即可,非常方便。 在rk3576平台上,原生以太网接口支持百兆、千兆,还有pcie转换的2.5G。

weixin_35723192的博客 203

用CAPL实现CRC32算法

用CAPL实现CRC32算法

farmer00的博客 6097

YOLO11改进|YOLO11中引入注意力和卷积融合模块CAFMAttention

YOLO11改进|YOLO11中引入注意力和卷积融合模块CAFMAttention

A1983Z的博客 1222

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

STM32FFT算法实现说明

STM32FFT算法实现说明 去发现同类优质开源项目:https://gitcode.com/ 欢迎使用STM32FFT算法指南 简介 本资源是专为嵌入式系统开发者,尤其是STM32平台的新手准备的FFT(快速傅里叶变换)算法实施详解。傅里叶变换在信号处理、数据分析等领域应用广泛,而STM32作为一款流行的微控制器,在实现硬件加速的FFT运算上有着独特的优势。这份文档将引导您深入了解如何在STM3...

gitblog_06671的博客 981

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 并行博弈树搜索算法-第3篇 优秀的园丁:Alpha-Beta算法
下一篇: 并行博弈树搜索算法-第5篇 人多力量大(?):并行Alpha-Beta算法
存储李希
博客等级 码龄15年 418粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值