尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

算法在各领域的广泛应用:100个实例全解析

发布时间:2026/9/27 1:50:14

资讯中心
01
ARTICLE

算法在各领域的广泛应用:100个实例全解析

算法在各领域的广泛应用:100个实例全解析
算法这两个字在搜索引擎里的热度常年居高不下。从“冒泡排序算法 c”到“强化学习算法”从“A*算法原理图”到“pid算法程序代码实现”每个搜索词条背后都是不同领域的人在解同一个问题的不同切面。我一度被这种碎片化信息淹没直到一次跨领域项目里把十几个行业的典型算法摊在同一张表上才发现算法的真正魅力不在某个具体技巧而在于它作为“通用解题语言”的跨界能力。这篇文章想做的是把“算法在各领域的广泛应用100 个实例全解析”这个题目真正落到地上——不是堆一百张无关的算法卡片而是按领域拆成几条主线每条线挑最典型的几个实例讲透。刚入门的人能借此建立地图感有经验的工程师也能找到跨领域参照。1. 排序、查找与字符串匹配把基本功练到骨子里热搜词里“归并排序算法”“冒泡排序算法c”“堆排序算法”“数据结构与算法”“二分查找算法”“kmp算法”扎堆出现说明这一块永远是算法学习的起点也是很多从业者面试前临时抱佛脚的必修课。我平时带新人时发现大家普遍会写冒泡排序但真正遇到海量数据排序、外部排序、TopK 问题照样懵。原因就在于只记住了代码没理解每种排序的“性格”。1.1 三种经典排序的选型逻辑冒泡排序是绝大多数人的第一个排序算法两层循环加一个交换标志逻辑简单到可以闭眼写出来。但它的时间复杂度稳定在 O(n²)数据量过万就开始吃力。教学价值远大于工程价值我用它来给新人讲“循环不变量”和“交换操作”这两个基础概念比直接上快排容易接受得多。归并排序的思路是分治把数组一分为二各自排好序再合并。它的时间复杂度是 O(n log n)而且是稳定排序这三个特性让它成为外部排序的核心。比如几十 G 的日志文件没法一次性读进内存就切成小块各自排序再用多路归并合成完整有序结果这个场景归并排序是无可替代的。堆排序则利用了完全二叉树的性质建堆 O(n)每次取堆顶 O(log n)整体 O(n log n)。它最大的优势是无需额外空间但劣势同样明显——不稳定且缓存命中率低实际运行速度往往不如快排。不过遇到“从一亿个数里找前 100 个最大数”这种 TopK 问题用大小为 100 的小顶堆一遍扫完空间占用 O(1)效率远超全量排序。1.2 二分查找的边界陷阱二分查找代码只有十来行但能一次写对的人极少。关键坑在边界条件while (left right)还是while (left right)mid取(leftright)//2时 left 和 right 怎么更新搞错一个符号就是死循环。我的习惯是遵循“左闭右开”原则区间定义为[left, right)循环条件写left right更新时left mid 1或right mid这样既不用考虑mid-1导致的下标越界语义也最清晰。前提是数据必须有序复杂度 O(log n)在一亿个有序数据里找目标值最多比较 27 次这就是算法威力最直观的体现。1.3 KMP让匹配不走回头路字符串匹配朴素做法是双指针逐个比对失配后文本串指针回溯到起点下一个位置模式串指针也归零最坏 O(n*m)。KMP 的核心是预处理模式串生成 next 数组失配时文本串指针不动只移动模式串指针整体复杂度降到 O(nm)。next 数组的含义可以理解为“当前失配位置之前前缀和后缀的最长公共长度”它解决的问题是“我已经匹配过的信息不能浪费”。文档编辑器里的查找、日志关键字匹配、简单的敏感词过滤底层都能看到 KMP 的影子。学它的时候别死记代码自己拿“ABABABC”当模式串手推一遍 next 数组的生成过程比看十篇教程都管用。这里顺带说一个热搜词“计算算法复杂度时什么时候用 O 什么时候用 Θ”。O 表示渐进上界说明算法最坏不会超过这个量级Θ 表示紧确界说明算法运行时间的增长率和这个量级严格一致。二分查找可以说 O(log n) 也可以说 Θ(log n)因为它的最坏和平均是同一个量级但快排只能说 O(n²)平均情况才是 Θ(n log n)上下界不一致时只能用 O 来表达最坏承诺。2. 控制与信号处理算法在噪声和反馈中拿捏分寸这一部分对应热搜词里的“pid算法程序代码实现”“增量式pid算法”“mppt算法”“烟雾传感器 滑动平均滤波算法”“modbus crc 算法”。这些词背后是电机控制、电源管理、工业通信、传感器数据清洗这些硬核场景。算法在这里不是跑在服务器上的而是跑在单片机、PLC 和嵌入式设备里讲究的是实时性、确定性和资源占用。2.1 PID工业控制的事实标准PID 控制就是比例、积分、微分三个环节的加权和。比例项 P 对当前误差做出即时反应系数大了反应快但容易震荡积分项 I 累积历史误差用来消除静差比如温度控制系统里要让温度最终精确落在 100℃靠 P 是不够的一定需要 I 把稳态误差压掉微分项 D 预测误差变化趋势提前施加抑制作用可以减小超调。三者的关系类似开车P 是看到偏了就打方向盘I 是发现一直偏左就一直修正D 是看到偏左的速度很快提前回一点方向。实现上分成位置式 PID 和增量式 PID。位置式直接输出控制量绝对数值需要累加历史误差容易积分饱和增量式只输出控制量的增量 Δu等于本次控制量减去上次控制量不需要累加执行机构只需要记住上一次位置工程上更常用。增量式核心公式长这样// 增量式PID伪代码 int8_t pid_incremental(float setpoint, float feedback, float kp, float ki, float kd) { static float err[3]; // err[0]当前误差, err[1]上次误差, err[2]上上次误差 float delta; err[0] setpoint - feedback; delta kp * (err[0] - err[1]) ki * err[0] kd * (err[0] - 2 * err[1] err[2]); err[2] err[1]; err[1] err[0]; return (int8_t)delta; }调参经验上我习惯先只留 P从小到大加到系统出现等幅震荡记下临界系数再加 D 抑制震荡最后加 I 消除静差。工程设备的 PID 参数没有通用数值必须结合系统惯性和采样周期现场调节。2.2 MPPT太阳能系统的最大功率狩猎MPPT最大功率点跟踪算法解决的是太阳能电池板输出电压电流随光照和温度变化什么时候输出功率最大这个动态寻优问题。最简单实用的是扰动观察法每次给工作电压加一个小扰动比较扰动前后的功率。功率变大说明扰动方向正确继续同方向扰动功率变小就反向扰动。它的缺点是稳态时会在最大功率点附近小幅震荡但胜在实现简单、不需要精确的电池模型所以微逆和充电控制器里大量使用。2.3 滑动平均滤波给传感器数据“去毛刺”烟雾传感器这类模拟量输出往往伴有尖刺噪声滑动平均滤波是性价比最高的处理手段。维护一个长度为 N 的窗口每次采入新值就丢弃最旧值输出窗口内平均值。N 越大越平滑但滞后越大烟雾报警这类对突变敏感的场合N 取 5 到 10 比较合适。比中值滤波好在计算量小比卡尔曼滤波好在大材小用单片机裸奔时多搓几个这种算法比一上来就上状态估计稳妥得多。2.4 Modbus CRC通信协议的守护神工业现场最流行的 Modbus RTU 协议每帧数据都带着一个 CRC16 校验码用来检测总线传输中的比特翻转。CRC 的数学原理是把整个报文看作一个大二进制数对生成多项式做模二除法余数就是校验码。工程上没人真的做除法都用查表法事先算好 256 个多项式余数放进常量表每字节查一次表加一次异或和移位速度比逐位计算快 8 倍。理解 CRC 建议先用手算走一遍小数据再对照查表实现能彻底搞清楚“为什么校验码能检出突发错误”。3. 机器学习与深度学习算法从“规则”走向“学习”搜索热词里的“线性回归算法”“聚类算法”“随机森林回归算法”“深度学习算法”“强化学习算法”“随时间反向传播算法bptt”“yolo算法讲解ppt”“基于贝叶斯算法的建模”把这条线拉得整整齐齐。传统算法是我们写规则让机器执行机器学习算法是机器从数据里找规则而深度学习又在这个基础上增加了“自动提取特征”这一步。这不是渐进式改良是范式跃迁。3.1 线性回归与贝叶斯建模一切复杂的起点线性回归用一条直线或超平面拟合数据目标是最小化预测值与真实值的平方误差也就是最小二乘。它求解有闭式解θ (XᵀX)⁻¹Xᵀy几十行代码就能实现。虽然简单但它是理解梯度下降、过拟合、正则化这些后续所有概念的锚点。贝叶斯视角则把参数本身看作随机变量通过先验分布和数据似然更新出后验分布。两者的差别是频率派回答“哪个参数最可能”贝叶斯派回答“参数取每个值的概率是多少”。对小样本数据贝叶斯建模通常比纯线性回归稳定因为先验本身就是一种正则化。3.2 聚类与随机森林无监督和有监督的代表K-means 聚类算法是无监督学习的代表目标是把样本分成 k 簇让簇内平方和最小。实现循环就两步把每个样本分配到最近的中心点然后重新计算中心点。它最大的坑是 k 值怎么定工程上用肘部法则看 SSE 曲线拐点或者直接用业务含义定簇数。随机森林则是 Bagging 思想加特征随机选择的产物训练多棵决策树每棵树在样本和特征上都做随机抽样预测时投票或平均。它抗过拟合能力强对缺失值鲁棒是表格数据竞赛里最稳的 baseline 之一。3.3 BPTT 与强化学习时间维度的学习随时间反向传播 BPTT 是循环神经网络 RNN 的训练算法。RNN 每一步共享同一组权重展开后就是一个深到时间步数的前馈网络所以反向传播不仅要沿网络层走还要沿时间步走梯度容易在长序列里指数级衰减或爆炸这就是 LSTM 引入门控机制的原因。强化学习则完全换了一套范式智能体通过和环境互动获取奖励信号目标是学到一个策略函数最大化累计奖励。AlphaGo 是强化学习加蒙特卡洛树搜索的经典代表工业界调参、推荐排序、机器人控制里也越来越多地用到它。你需要记住的关键闭环是状态、动作、奖励、策略更新四者缺一不可。3.4 YOLO实时目标检测的标准答案YOLO 算法把目标检测当作回归问题直接做一张图一次前向推理就输出所有目标框和类别摆脱了 R-CNN 系列“先提候选框再分类”的两阶段繁琐流程。从 YOLOv1 到 YOLOv8 演进的核心是特征提取网络加深、多尺度检测、无锚框设计这些优化。部署时要注意模型推理速度用 FPS 衡量但工程上更关心的是“每帧延迟”因为缓存队列、预处理、后处理 NMS 都可能成为瓶颈。讲解 YOLO 原理最好的切入点也是画一张网络结构图看它从输入到输出的张量维度变化比只看 loss 公式直观得多。4. 搜索、图论与最优化算法在解空间里找答案这一章的对应词条最多“a*算法”“贪心算法”“剪枝算法”“粒子群算法原理”“海星优化算法”“匈牙利算法”“弗洛伊德算法”“tarjan算法”“混合整数线性规划算法”“算法流程图”。原因是搜索和最优化问题的适用面极广从地图导航到物流调度、从排课表到下围棋本质都是“在一个巨大的候选解空间里找最优解”。4.1 A*算法启发式让搜索不再盲闯A* 在 Dijkstra 算法基础上引入了启发式函数 h(n)评价函数 f(n) g(n) h(n)其中 g(n) 是从起点到当前点的实际代价h(n) 是当前点到目标点的估计代价。Dijkstra 只按 g(n) 展开像一个圆形水波向外扩散A* 加上了方向的指引更像朝着目标直线前进但是有障碍物时绕开。h(n) 必须满足可采纳性也就是不超过真实代价否则找不到最优解。二维栅格地图里最常用的 h 是曼哈顿距离路网导航里常用欧氏距离。实现 A* 一定用优先队列管理待展开节点否则每次取最小 f 值的开销会把算法拖慢一个数量级。4.2 贪心、剪枝与动态规划效率的三种姿态贪心算法每一步做当下看起来最好的选择期望局部最优叠加成全局最优。它只在问题具有贪心选择性质时可靠比如活动安排、哈夫曼编码但换一个背包问题贪心立刻失效。剪枝算法是搜索树的加速器在回溯搜索的过程中提前判断某些分支不可能产生更优解直接砍掉。Alpha-beta 剪枝让博弈树搜索的复杂度从 O(bᵈ) 降到约 O(b^(d/2))这就是象棋 AI 能多算几步棋的秘诀。动态规划则是通过子问题重叠用空间换时间把指数级暴力搜索优化成多项式。三者选型时可以这样判断能证明贪心正确就用贪心解空间能表示成搜索树就考虑剪枝有大量重复子问题就上 DP。4.3 群体智能与元启发式不需要梯度也能寻优粒子群算法模拟鸟群觅食行为每个粒子在解空间里有一个位置和速度根据自身历史最优和群体历史最优更新飞行方向。它最大的优势是只需要能计算出适应度函数的值不需要函数可导特别适合黑箱优化问题比如调 PID 参数、神经网络超参搜索。海星优化算法属于比较新的元启发式借鉴海星再生和捕食行为探索和开发能力的平衡设计得更细致但目前论文多于工业落地建议先在标准测试函数上验证对比再决定是否使用。这类算法的共同弱点是结果有随机性需要多次运行取最优或平均值不能像解析方法那样保证找到全局最优。4.4 图论三件套Floyd、Tarjan、匈牙利算法弗洛伊德算法是动态规划的全源最短路径三层循环枚举中间节点 k用 d[i][j] min(d[i][j], d[i][k] d[k][j]) 更新任意两点间距离。O(n³) 复杂度让它更适合节点数小于几百的情况但代码极短是面试手撕高频题。Tarjan 算法用于在有向图中求强连通分量基于时间戳和追溯值 low 数组一遍 DFS 就能完成缩点是解决环检测、连通性判定、2-SAT 问题的底层工具。匈牙利算法解决二分图最大匹配问题核心是增广路径搜索从一个未匹配点出发寻找一条“非匹配边-匹配边交替出现”的路径把路径上的匹配关系翻转匹配数就加一。任务分配、相亲配对、多目标跟踪的数据关联里都能看到它的身影。4.5 混合整数线性规划把业务约束写成等式很多排产、物流、资源调度问题的真正战场不在“跑得快”的启发式算法而在数学规划的建模能力。混合整数线性规划MILP要求目标函数和约束都是线性的但部分变量必须取整数。电力系统机组启停、航空机组排班都是典型 MILP 问题。核心技巧是引入 0/1 决策变量表示“做不做”的选择用大 M 法处理逻辑或约束。开源求解器 SCIP、商业求解器 Gurobi 都能处理过万变量规模实际工作中建模比求解耗时长得多因为把业务语言翻译成数学语言才是真正的难点。5. 不可绕过的密码与校验算法MD5、CRC 和签名那些事密码和校验在热搜词里显得另类但不可缺席“md5 算法详细完整过程并举例。”和“modbus crc 算法”以及“作业帮 sign算法”都属于这一类。它们的共同点是算法必须对输入极其敏感哪怕一个比特翻转输出也要天翻地覆。5.1 MD5 的完整过程填充、分块、压缩MD5 算法把任意长度的输入变成 128 位摘要完整过程分四步。第一步是补位。要求消息长度对 512 取模等于 448不足则先在消息末尾补一个 1再补一串 0最后留 64 位表示原始消息长度的二进制值所以补完后总长度是 512 的整数倍。第二步是初始化四个 32 位链接变量A0x67452301B0xEFCDAB89C0x98BADCFED0x10325476。第三步是以 512 位为一块每块分成 16 个 32 位子分组进入四轮共 64 步压缩循环。每一轮的步函数里用非线性的 F、G、H、I 函数之一参与运算加上常数表 K[i]由 sin 函数生成和左移位数表对 A、B、C、D 做一系列加法、移位和代入。最后将本块压缩后的结果累加到上一轮结果上。第四步输出时按小端序把 A、B、C、D 拼接成一个 16 字节序列。写程序验证非常快输入空字符串得到的 md5 是 d41d8cd98f00b204e9800998ecf8427e这个值背下来可以作为自测基准。MD5 现在不建议用于密码存储因为碰撞攻击已经可行它的合理用途是文件完整性校验、缓存键生成、去重场景。密码存储至少要用 bcrypt、scrypt 或 argon2 这类带盐和慢哈希的设计。5.2 业务签名算法保护接口不被篡改热搜里的“作业帮 sign算法”本质上属于业务接口签名公开资料很少但通用原理是明确的。服务端给客户端一个密钥客户端把所有请求参数按字典序拼接加上时间戳和随机数再用哈希算法可能是 MD5、SHA 系列也可能是 HMAC计算出签名放在请求头里。服务端拿到请求后用相同逻辑重新计算签名并比对。时间戳防止重放攻击随机数保证同一秒内多次请求签名不同密钥防篡改。这类算法的工程实现要注意三点签名参数排序必须固定且和服务端一致密钥不能硬编码在前端代码里至少要做混淆和加固签名过程必须包含版本号否则算法升级时老客户端全部挂掉。5.3 CRC 和哈希的关系一个查错一个防改CRC 和哈希函数本质都是把变长输入映射到定长输出但它们的设计目标完全不同。CRC 是针对随机信道噪声优化的多项式设计使得它能检出所有奇数个错误和一定长度的突发错误查表实现快如闪电适合硬件校验。而 MD5、SHA 系列是密码学哈希设计目标是抗碰撞输入哪怕改变一个字符输出都看不出任何关联。业务系统里两者常搭配使用物理层用 CRC 保证传输正确应用层用哈希保证数据未被恶意篡改。这也是为什么 Modbus 报文查 CRC 和文件下载查 MD5 可以同时出现在一个技术方案里。6. 从百例到一图建立你自己的算法地图写到这里已经覆盖了约三十个高频算法实例离“100 个实例”还有不少距离但我想先停一下聊一个更值得思考的问题面对这么多算法学习和选型的正确姿势到底是什么。我的体会是按“输入输出形态”而不是按“算法名字”来记忆。拿排序说不管冒泡、归并、堆排序还是快排输入端都是一个无序序列输出端都是一个有序序列区别只是代价和约束不同。拿最优化说A*、粒子群、贪心、MILP输入端都是“解空间加目标函数”输出端都是最优解或近优解区别是解空间的形态和能否接受近似。按这个方式重新组织你会发现“100 个实例”很快就收敛成几十个问题模板每个模板下面挂着几条解决路线。选型顺序我建议反着来先从问题形态入手——数据有多大、是否在线、是否允许近似、有没有约束再匹配算法家族——精确还是启发式、贪心还是动态规划、线性还是非线性最后才落到具体算法名字上做细节对比。比如你想做路径规划先确认是栅格地图还是路网允许近似就跑 A* 的变体或者 RRT要求全局最优且规模小就直接上 Dijkstra 或者连 Floyd 都行。先定家族再选名字比对着热搜词前十条逐个尝试高效得多。我在实际项目里还有一个习惯就是为每个算法做一张“一页卡”包含解决什么问题、输入输出形态、复杂度、典型工程陷阱、最小可运行示例代码。这个卡片集积累到几十张之后遇到新问题先翻卡片基本五分钟就能锁定候选算法。这也是为什么我主张初学者不要直接刷“一百个算法题”而是先刷“一百个问题模板”每个模板亲手实现一次最朴素版本再用真实数据测一遍复杂度表现。数据结构与算法这门课的本质不是背代码而是建立这种“问题到解法”的反射弧。另外提一句热搜里还有“算法流程图”这个词。我见过太多人一开始就画五花八门的流程图画完才写代码最后发现流程图和代码对不上。我的建议是流程图只画关键分支和数据结构状态变化不要画所有赋值语句。A* 的流程图画 open/close 集合的流转足够归并排序画递归栈的变化足够。流程图是思考辅助不是交付物画得太细反而失去意义。7. 跨领域迁移当一个算法进入陌生战场文章最后一部分我想专门聊聊算法跨领域迁移这件事因为这是“100 个实例全解析”背后真正的深水区。同样一个算法换一个行业名字可能变了但内核一模一样。粒子群优化算法最早我是为调 PID 参数学到的后来发现它用在神经网络超参搜索、天线阵列方向图优化、风电场的机组出力分配上只要把“粒子位置”改成对应问题的决策变量适应度函数换成对应目标的评估函数流程完全不用改。剪枝算法我在搜索引擎的倒排索引查询优化里用过后来下棋 AI 里的 Alpha-beta 剪枝也是同一套逻辑评估一下这个分支还有没有希望没希望就立刻止损。再比如滑动平均滤波既能平滑烟雾传感器读数也能平滑股票价格的短期波动区别只是窗口长度和权重策略。迁移的关键在于提炼“抽象问题”。当你拿到一个陌生场景时先试着把业务描述翻译成算法术语。举个我印象很深的例子一家做仓储机器人的公司它们需要调度多台 AGV 在仓库里穿梭取货避让冲突。表面看是路径规划问题但把时间维度展开把它建模成“带时间的多智能体路径规划”瓶颈又变成约束求解于是可以用冲突搜索算法也可以用混合整数线性规划来处理。如果你只见过 A* 解决单机路径规划没有形成约束建模的抽象能力这个题就无从下手。所以我对算法学习的终极建议是每学一个新算法强制自己问三个问题——它解决了什么抽象问题它做了哪些前提假设如果假设不成立它会以什么方式失败把这三个答案写在算法卡片上。等你积累了五十张卡片再去看那个“100 个实例全解析”的标题你会发现真正需要记忆的不是一百个孤立的名字而是几十类抽象问题以及它们之间的联系。最后说一个我自己的小习惯每年第一季度我会把当年最常用的十几个算法用最原始的方式重新实现一遍不查资料不用库从数学推导到代码全部独立完成。这个过程极其折磨但每次都能暴露出我理解上的空洞。算法这种东西看着别人写觉得自己懂了合上书自己推一遍才知道哪里没通。希望这篇从热搜词里长出来的解析能帮你把碎片拼成地图然后在自己的领域里找到那第一百零一个应用。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。