优必选算法岗笔试复盘:从KMP到PID的机器人算法知识全解析

发布时间:2026/9/1 12:51:48
优必选算法岗笔试复盘:从KMP到PID的机器人算法知识全解析 去年秋招我投了优必选的算法岗笔试那场让我印象很深。和互联网大厂那种纯刷题风格不同优必选这份卷子带着明显的机器人底色——既考KMP、排序、Dijkstra这类通用算法又会冒出PID调参、粒子群、卡尔曼滤波这种和机器人控制强相关的题甚至还有一些跨界知识点混在里面。如果你正准备投机器人方向的算法岗这份笔经应该能帮你少走不少弯路。先交代一下背景我投的是2023届秋招的算法岗笔试是在线做的全程双机位时间大概120分钟。整体看下来题量不算变态但覆盖面相当杂杂到让我觉得这不是单纯考你会不会写代码而是在考你有没有一个完整的算法知识骨架。下面把我复盘出来的东西拆开讲。1. 笔试题目结构复盘这份卷子到底在考什么1.1 我和这份笔试的初印象刚打开卷子的时候我第一反应是还好因为前几道选择题居然是数据结构基础像栈和队列的区别、二叉树遍历顺序这种。但往后翻到中间画风突然就变了冒出来一道关于PID控制器的题问的是增量式PID和位置式PID的输出差异。我当时愣了一下因为刷了那么多互联网公司的笔试题真的很少见到控制理论直接出现在算法笔试里。从那一刻起我就意识到这不是一场普通的算法岗笔试它背后的逻辑是我们做机器人算法工程师必须懂控制、懂状态估计、懂传感器融合。整份卷子我回忆下来大致可以分成四个模块通用算法与数据结构、机器人与控制相关算法、机器学习与深度学习基础、还有一小部分工程与系统题。每个模块的分值占比不一样通用算法大概占四成机器学习大概两成机器人相关大概三成剩下的一成是一些杂项比如音频重采样、规则引擎这类乍一看和算法岗没什么关系的内容。之所以要把这个结构说清楚是因为很多投算法岗的同学会下意识地按互联网大厂的标准去准备把精力全压在DP、图论、贪心上结果一到考场上看到PID就懵了。1.2 四个模块的分值与时间分配复盘我当时的做题节奏四个模块里最耗时间的其实不是编程题而是机器人和控制相关的那几道选择题。因为通用算法题我们平时练得多看到基本就知道思路但PID、卡尔曼滤波这种题如果你没有系统学过每一个选项都像在猜。我当时大概用了40分钟做通用算法类30分钟做机器学习类剩下的50分钟几乎都耗在了机器人相关题和最后的编程题上。这里我给后来的同学一个建议如果时间有限优先保证通用算法和机器学习这两块因为它们是最能通过刷题拿分的。机器人控制相关的题至少要把PID的公式、粒子群和模拟退火的流程、Dijkstra和A*这类路径规划算法的适用场景搞清楚这已经是优必选这类机器人公司笔试里最高频的内容了。1.3 一个容易被忽视的信号题目为什么这么出我在考后复盘的时候想明白了一件事——这份卷子的出题人并不是随便从题库里抽题它很明显在围绕机器人算法工程师日常要用的算法栈来设计。为什么考KMP和BM因为字符串匹配在机器人指令解析、SLAM地图匹配里都有应用场景。为什么考PID因为机器人的运动控制核心就是它。为什么考卡尔曼滤波因为机器人的定位和传感器融合离不开它。搞懂了这层逻辑你准备笔试的方向就会清晰很多不是在准备一场通用的算法考试而是在准备一场机器人算法工程师岗位技能摸底。2. 通用算法题备考重心从字符串到排序一个都不能侥幸2.1 KMP与字符串处理笔试写不出next数组才是最痛的优必选这份卷子里字符串相关的题占了不小的比重其中KMP是绝对的高频关键词。我能看到热词榜上那句对于模式串pabacaba其next数组——这就是很典型的考法。KMP算法的核心在于next数组也就是失配时模式串该跳到哪里继续匹配。很多人背得下来KMP的代码但一到手写next数组就出错尤其是处理最长相等前后缀的时候边界条件特别容易乱。我当时的做法是先把next数组的递推逻辑在草稿纸上推一遍next[i]表示模式串前i个字符组成的子串中最长相等前后缀的长度。比如abacaba逐个算next值遇到不匹配跳转的情况要用while循环去回退不能只判断一次。这里给大家一个口诀求next看前后缀失配时往前退退到0重新来。优必选这种公司考KMP考察的正是你有没有真正理解这个回退过程而不是简单调库。2.2 排序算法不只是背复杂度排序算法是笔试里绕不开的基础题但优必选的考法比快排的时间复杂度是多少要深一层。我记得题里有一道是给了一组近有序的数据问用什么排序算法效率最高。这个场景下插入排序的实践复杂度可以接近O(n)而快排因为分区不均反而可能退化。这种题考的不是知识点本身而是你对算法适用场景的理解。备考的时候我建议大家把七种常用排序都过一遍冒泡、选择、插入、希尔、归并、快排、堆排。不仅要看时间空间复杂度还要想清楚几个问题哪种排序是稳定的哪种排序适合链表哪种排序适合大数据量外排优必选这种偏向工程应用的算法岗特别爱考这些场景题因为机器人系统里数据规模往往不大但实时性要求很高选对排序算法可能直接影响系统的延迟。2.3 贪心、动态规划与图论Dijkstra是必答题如果说排序是热身那贪心、DP和图论就是通用算法题的主菜。热词榜上同时出现了贪心算法、Dijkstra算法、二分图HK算法这三个在优必选笔试里确实都有涉及。贪心算法考的是区间问题比如会议室安排、活动选择Dijkstra考的是单源最短路而且往往会和机器人路径规划结合起来考比如机器人在网格地图上从起点到终点边权为代价求最短路径。二分图HK算法是我当时没想到的因为它在ACM竞赛里才算进阶内容笔试直接考优化版的匈牙利算法说明他们对图论的深度是有要求的。我自己在准备这些题的时候建议按一个主线来先掌握建图的方式邻接矩阵、邻接表再熟悉三种最短路算法Dijkstra、Bellman-Ford、Floyd接着理解最小生成树Prim、Kruskal最后花时间啃二分图匹配。别贪多Dijkstra一定要能闭着眼睛写出来因为它在机器人导航里太常用了几乎可以算是机器人算法岗的职业基础技能。2.4 快速幂与位运算容易被忽略的小分题快速幂算法在热词里出现了好几次和C绑定在一起。这类题往往不会单独出一道大题而是作为编程题里的一个子步骤比如让你求某个数的多少次方再取模。如果不用快速幂直接for循环去乘数据一大就会超时。我当时就写过这种代码循环算幂结果在数据量稍大的case上直接卡死。快速幂的核心思想是二分加速把指数拆成二进制每次把底数平方遇到二进制位为1才乘进结果。这个过程用位运算实现非常简洁时间复杂度从O(n)降到O(log n)。虽然它只是一个小点但这种题在笔试里属于会者不难、难者不会的分水岭准备到了就是白送分没准备到就是眼睁睁丢分。3. 机器人算法岗的特殊考点PID、粒子群、卡尔曼滤波与路径规划3.1 控制算法PID的公式、调参逻辑和增量式考点优必选笔试里PID相关内容几乎是必出的这和公司做机器人有直接关系。PID控制器的公式本身并不复杂u(t) Kp·e(t) Ki·∫e(τ)dτ Kd·de(t)/dt三个环节分别管当前误差、历史误差累积和误差变化趋势。笔试喜欢考的是两个方向一是让你比较位置式PID和增量式PID的差异二是给你一组参数变化让你判断系统响应会变快还是变稳还是超调变大。增量式PID是比较常考的细节它的输出是控制量的增量Δu而不是绝对控制量。公式可以写成Δu Kp·(e(k) - e(k-1)) Ki·e(k) Kd·(e(k) - 2e(k-1) e(k-2))。增量式的优势在于只跟最近三次误差有关没有积分累积误差输出限幅实现也简单所以机器人电机控制里特别常用。如果你考场上见到这个概念一定要能把公式写出来并说清楚它和位置式PID在工程上的区别。3.2 智能优化算法粒子群、模拟退火、剪枝热词榜上出现的粒子群算法、模拟退火算法、剪枝算法这些在优必选笔试里大概率会以概念题或应用题出现。粒子群算法的核心是模拟鸟群觅食每个粒子有位置和速度通过个体最优和全局最优来更新速度与位置。公式里要记住两个关键更新式v w·v c1·rand·(pbest - x) c2·rand·(gbest - x)x x v其中w是惯性权重c1和c2是学习因子。我建议准备这类算法的思路是不看代码先理解它在模拟什么——粒子群模拟鸟群搜索模拟退火模拟金属冷却过程剪枝算法模拟决策树减少无谓搜索。想通了它们的原本意象考试时即使记不住完整公式也能根据逻辑推断出关键步骤。模拟退火那个以一定概率接受更差解的机制就是它跳出局部最优的核心笔试很容易问这个点。3.3 状态估计与数据处理卡尔曼滤波卡尔曼滤波是机器人定位和传感器融合里的基石算法优必选笔试里出现它我完全不意外。笔试对卡尔曼滤波的考察通常集中在几个层面一是预测和更新两步的公式结构二是它对噪声的处理思路三是它和普通低通滤波器的区别。卡尔曼滤波的五个核心公式我要全部列出来状态预测x̂_k|k-1 A·x̂_(k-1)|(k-1) B·u_k协方差预测P_k|k-1 A·P_(k-1)|(k-1)·A^T Q卡尔曼增益K_k P_k|k-1·H^T·(H·P_k|k-1·H^T R)^(-1)状态更新x̂_k|k x̂_k|k-1 K_k·(z_k - H·x̂_k|k-1)协方差更新P_k|k (I - K_k·H)·P_k|k-1。这五个公式看起来多但它们的逻辑其实很清晰先用运动模型预测再用传感器观测修正卡尔曼增益K决定了你更相信预测还是更相信观测。机器人用IMU加里程计定位时用的正是这套思路。3.4 路径规划与图算法Dijkstra、A*、二分图与HK算法路径规划是机器人算法岗必然要碰的内容。优必选笔试里Dijkstra作为最短路基础是必考项但如果题目想上难度就会引入A或者二分图匹配。A可以理解成带启发式信息的Dijkstra它在Dijkstra的代价之外加了一个到目标点的估算函数h(n)两者结合成f(n) g(n) h(n)在网格地图里能大幅减少搜索范围。我当时复习的时候是把A*当作Dijkstra的升级版去看的这样思路很顺。二分图HK算法比较冷门但既然热词里出现了我建议大家至少要知道它的应用场景比如机器人调度问题里多个任务分配给多个机器人每个机器人能做的事情不同怎么做到总效率最高——这就是一个典型的二分图最大匹配问题。HK算法是匈牙利算法的优化版把增广路搜索从每次BFS改成了同时找多条最短增广路复杂度从O(VE)降到O(E√V)。考场上即使记不住完整实现能把A*适合网格导航、HK适合任务分配这个匹配逻辑写清楚也能拿到大部分分数。4. 机器学习与深度学习笔试不会只考传统算法4.1 从K-Means到KNN聚类与分类的基础盘优必选算法岗的笔试里机器学习部分占比不低但难度属于只要认真学过就能答出来的级别。热点关键词里出现了K-Means聚类、KNN算法、聚类算法、KNN应用能力这些都算机器学习的基础盘。K-Means的处理流程大家应该很熟随机初始化K个中心点然后迭代地分配样本到最近中心和更新中心为簇内均值两步直到中心点不再变化。KNN则是基于样本距离的惰性分类器三个要素是距离度量、K值选择和分类决策规则。这类基础题想拿满分关键是把细节答透。比如K-Means对初始中心敏感、可能收敛到局部最优KNN在样本不平衡时分类会偏向样本多的类别。笔试选择题经常在这种细节上设陷阱如果你只知道K-Means是聚类、KNN是分类这种表面概念很容易掉坑里。4.2 XGBoost与集成学习算法岗的高频刺客几乎每份算法笔试题都会出现GBDT、XGBoost相关的内容优必选也不例外。热词里的xgboot算法显然是指XGBoost考法通常是问它的损失函数里为什么加正则项或者问它和普通GBDT的区别。要点有两个一是XGBoost在目标函数里加入了树的复杂度正则项二是它对每个特征都做了预排序并支持并行建树。还有一个常考的点是XGBoost在分裂节点时不光是看信息增益还引入了对叶子节点权重的惩罚这就是它比GBDT更不容易过拟合的原因之一。我当时笔试的时候遇到一道题问的是XGBoost为什么要做特征子采样其实就是借鉴随机森林的思路增加基学习器之间的多样性从而降低整个模型的方差。这类题你不会的话很难蒙出来但备考的时候把集成学习的Bagging和Boosting两条主线、XGBoost比GBDT的改进点想清楚就能应付过去。4.3 图像算法、目标检测与最新的模型关键词优必选毕竟是做机器人视觉感知的公司图像算法相关的题出现在笔试里合情合理。热词里有Sobel算法、图像锐化的拉普拉斯算法、图像分类算法、工业异常检测算法还出现了EVA-02这个分类算法关键词。Sobel和拉普拉斯都是边缘检测算子Sobel用的是两个方向的卷积核对图像做一阶差分能同时给边缘位置和方向拉普拉斯算子则是二阶差分对噪声更敏感所以实际应用中经常先做高斯平滑再利用拉普拉斯提取边缘。EVA-02这类模型关键词出现在热词里我觉得可能和当年视觉Transformer方向的热度有关。如果笔试题里真出现这种较新的模型名大概率只会停留在一道选择题问它的核心结构是基于ViT还是CNN或者问它适用的任务类型。备考时不需要把每种模型的论文都刷一遍但至少要对视觉Transformer、ViT、MAE这种大方向有概念知道视觉模型从ResNet到ViT再到各种自监督预训练模型的发展脉络。4.4 强化学习与模仿学习机器人算法的未来题强化学习在热词里单独出现我看了一下优必选笔试也确实会有几道RL概念题。最常考的三个点是马尔可夫决策过程的四元组(S, A, P, R)、策略和价值函数的关系、以及探索与利用的平衡。如果再深入一点还会考到Q-Learning和DQN的区别核心是DQN用深度神经网络近似Q函数并加入了经验回放和目标网络两个稳定训练的机制。这些题对于没系统学过RL的同学来说可能有点慌但别怕笔试对RL的考察基本不会超出概念层面。我当时就只熟悉了MDP的框架和Q-Learning的更新公式已经够用了。如果后续面试聊到RL和机器人的结合能说出模仿学习先学人类示范再用RL微调策略这种思路会比单纯背概念加分得多。5. 通用型问题与加分项KL散度、音频重采样与规则引擎5.1 KL散度与ELBO从原理到现场推导热词里有一项是kl elbo算法原理详解这个其实是VAE变分自编码器里的核心内容。KL散度衡量的是两个概率分布之间的差异它不是距离因为不具备对称性即KL(P||Q)不一定等于KL(Q||P)。ELBO则是在变分推断里反复出现的东西它把对数似然log p(x)拆成了ELBO加上KL散度项。笔试如果考到这里通常是要你判断优化ELBO等价于同时做什么答案是既最大化对数似然的证据下界又最小化近似后验和真实后验之间的KL散度。这类题属于会者不难而且区分度很高。我在准备时发现一个比较好记的方法KL散度就是用Q去近似P时损失的信息量ELBO就是对数似然的下界下界越高模型对数据拟合越好。有了这两个直观理解推导选择题基本能蒙对方向。5.2 音频重采样与信号处理优必选笔试的跨界考点看到音频重采样算法出现在热词里我第一反应是奇怪但仔细一想优必选做机器人语音交互音频处理确实是算法岗可能要涉及的领域。音频重采样的核心是改变采样率比如从44.1kHz转到16kHz中间需要做低通滤波和插值否则会产生混叠失真。笔试如果考这个多半是问重采样过程中为什么要先做低通滤波答案是防止信号混叠。对于专注视觉和控制方向的同学这类题确实有点偏但如果你知道重采样插值滤波抽取这个基本流程起码能排除掉一些明显错误的选项。这类题在笔试里占比不大但一旦出现就能筛掉那些知识面太窄的候选人。5.3 Drools规则引擎的Rete算法工程化选手的隐藏加分项热词里还有一条规则引擎drools的rete算法实现原理和事实匹配过程这个知识点在大多数算法岗笔试里都算冷门但它出现在热词里说明优必选过去可能真的考过。Rete算法是规则引擎里的高效模式匹配算法核心思想是构建一个判别网络把规则的匹配过程拆分成多个节点利用节点之间的共享来避免重复计算。我最开始看Rete觉得很难后来发现可以把它理解成把规则编译成一个状态机事实数据在网络里流动不断触发满足条件的动作。如果你把之前几个模块都复习得不错还有余力的话花一个小时看看Rete的节点类型和匹配流程性价比很高。因为这种题一旦遇到它就是一道能把大多数人甩开的题目而你刚好会优势非常明显。6. 实战答题策略与时间分配经验6.1 拿到卷子先扫一遍先做性价比高的题笔试时间120分钟题型杂、范围广如果按顺序硬磕很容易在前面卡死。我的建议是拿到卷子后花3到5分钟快速扫一遍所有题目心里给题目分个级一眼就会的题立刻做需要思考的题标记下来完全没思路的题先跳过。我当时就是先做了所有电子类的基础题把分值先拿到手然后再回头啃硬骨头。这个方法对优必选这种杂而不深的卷子尤其有效因为很多题只要你熟悉概念10秒就能出答案但如果你卡在一道题上会白白消耗大量的时间。6.2 编程题的输入输出与边界条件在线IDE的坑编程题部分优必选用的是在线IDE输入输出格式如果搞错代码逻辑再正确也过不了测试用例。我提醒大家两个坑一是题目给的输入可能有多个测试样例需要循环读取直到EOF二是要注意数据类型比如有的题数值范围很大需要用long long而不是int。边界条件比如数组为空、节点为NULL、输入为0这些都是测试用例里特别爱出的写代码时最好一开始就考虑进去。在线IDE还有一个坑就是它不会自动帮你引入常用的头文件。我在写C的时候习惯性地用了include bits/stdc.h但有的在线环境不支持这个头文件导致编译报错。保险的做法是逐个include你需要用到的头文件比如 、 、 、 。这些细节看上去微不足道但真正在考场上遇到的时候非常影响心态。6.3 不会的题也要骗到部分分优必选笔试的编程题虽然不会像ACM那样严格按测试点给分但如果你能交出一个思路正确但在边界情况上不完美的代码通常还是能拿到一定分数的。所以即使遇到没思路的题也千万别交空白。有一个很实用的策略是先写一个暴力解保证小数据量的测试点能过然后再在暴力解的基础上做优化。这样至少能拿到部分测试点的分总比空着好。选择题遇到不会的也不要乱蒙先排除掉那些明显违背常识的选项。我在做PID那道题的时候一开始并不确定增量式PID的输出是绝对量还是增量但我记得电机控制里用的肯定是增量式所以就选了这个。这种基于工程常识的排除法在优必选这种偏应用的试卷里往往比死记硬背公式更管用。6.4 复盘时最值得做的事把错题背后的知识点连成网笔试结束后建议大家别急着抛到脑后花半天时间把自己做错的题全部复盘一遍并且把每道题背后的知识点整理成一张算法知识地图。我当时整理完发现优必选这份卷子其实在反复强调几条线数据结构是地基机器学习是工具控制论和状态估计是机器人专属而各种优化算法和路径规划是连接理论与工程的桥梁。你把这四条线串起来再回头看这份卷子就能猜出它们后续面试大概会问什么方向了。最后再分享一个小技巧我备考的时候把所有相关算法都按是什么、解决什么问题、核心步骤、实际应用场景四个维度做了笔记。这种笔记方式在笔试前快速翻阅特别有效而且面试时如果被问到项目也能顺畅地把算法和实际场景联系起来。准备优必选这类机器人公司的算法岗笔试别光顾着刷题多想想这个算法在机器人上能拿来干什么方向对了得分自然就高了。