下面进行华为2026年7月15日AI岗机考题的复盘和关键知识点重点深度剖析笔者7月18日刷完选择题和2道算法题。选择题考到条件概率和贝叶斯公式、线性变换的性质、MLE估计泊松分布均值、样本方差的无偏性、大模型LN层、t-SNE非线性聚类算法、层次聚类与Linkage合并、词嵌入、向量检索、Token Merging、KNN、数值分析与误差理论等知识点。编程题都是传统的数据结构与算法的考点150分题目考察最小堆和模拟基于数据库ADD和QUERY指令的KV缓存动态稀疏压缩策略评级中等300分题目考察最小堆版本实现的Dijkstra算法、状态二进制压缩和模拟评级困难。目录第十二题1数值分析误差理论与概率统计2随机变量累乘方差变换公式第十七题Ward Linkage方差定义ESS和增量计算公式四种常用的簇合并的方法层次聚类Linkage算法在三维重建-3D Gaussian3DGS算法中的应用第十八题RMSNorm计算方法代码题1中等6代码题2困难9选择题用时40分钟得分114。第十二题1数值分析误差理论与概率统计加法运算的绝对误差设若的误差为的误差为那么在最坏情况下总误差。这是严密的数学不等式三角不等式不是概率估计所以“加法时总绝对误差等于绝对误差相加”。乘法运算的相对误差设取对数得微分得。所以“乘法时总相对误差等于相对误差相加”。2随机变量累乘方差变换公式设且独立正确的方差公式是只有当且时才有。在绝大多数误差分析中误差的均值期望不为零。第十七题层次聚类Linkage合并算法正确答案ABCD。Ward Linkage方差定义ESS和增量计算公式Δ(A,B)​⋅四种常用的簇合并的方法Linkage方法簇间距离的定义特点与趋势Single Linkage两个簇中最近的两个点之间的距离易产生“链式”的长条状簇Complete Linkage两个簇中最远的两个点之间的距离倾向产生紧凑、球状的簇Average Linkage两个簇中所有点对之间距离的平均值是一种折中方案结果介于Single和Complete之间Ward Linkage合并两个簇后总ESS的增量倾向产生大小相近、内部紧凑的簇层次聚类Linkage算法在三维重建-3D Gaussian3DGS算法中的应用“分割-合并”流程一个典型的流程是先通过网格划分将场景分成子网格分别训练后再合并。在这个过程中Ward Linkage这类方法可用于优化合并策略。连通性约束直接对3D点云使用欧氏距离进行层次聚类可能出错。因此有研究提出加入连通性约束如K-近邻图的层次聚类能有效避免将空间上接近但实际不连通的部分错误合并。第十八题批量归一化、层归一化、RMSNorm等归一化层正确答案ACD。RMSNorm计算方法具体来说对于单个样本的所有特征RMSNorm会计算其均方根Root Mean Square, RMS特性Layer Normalization (LN)RMS Normalization (RMSNorm)计算公式中心化 (减均值)有。计算均值并用将数据中心化。无。不减去均值直接使用原始值。缩放 (除以标准差/RMS)有。除以标准差。有。除以均方根 RMS。可学习参数缩放参数和平移参数。通常只有缩放参数。没有平移参数。代码题1中等6最小堆、数据库插入/查询模拟、KV Cache压缩技术模拟、输入输出规范化用时57分钟全部AC。第2题-动态 KV Cache 稀疏化管理器 - problem_ide - CodeFun2000def code(): import heapq K, N map(int, input().split()) Cache [[], []] Score [[], []] heap [] for n in range(N): l input().split() if l[0] ADD: pos int(l[1]) score float(l[2]) kl list(map(float, input().split())) vl list(map(float, input().split())) if len(Score[0]) K: item heapq.heappop(heap) print(fPRUNED {Score[0][item[1]]}) del Score[0][item[1]] del Score[1][item[1]] del Cache[0][item[1]] del Cache[1][item[1]] heapq.heappush(heap, ((score, len(Score[0])))) Cache[0].append(kl) Cache[1].append(vl) Score[0].append(pos) Score[1].append(score) elif l[0] QUERY: print(len(Score[0])) for i in range(len(Score[0])): print(Score[0][i], Score[1][i], sep ) print( .join(list(map(str, Cache[0][i])))) print( .join(list(map(str, Cache[1][i]))))代码题2困难9最小堆、状态压缩与Dijkstra算法用时2小时左右AC率90%最后一个用例运行超时。第3题-Agent执行轨迹压缩 - problem_ide - CodeFun2000# AC率90%第10个测试用例超时15x15x4096的dist数组加Dijkstra def code2(): # 输入处理 N, M map(int, input().split()) K int(input()) state [[0 for i in range(M)] for j in range(N)] pos [N // 2, M // 2] for i in range(K): move, op, param input().split() if move D: pos[0] min(N - 1, pos[0] 1) elif move U: pos[0] max(0, pos[0] - 1) elif move L: pos[1] max(0, pos[1] - 1) elif move R: pos[1] min(M - 1, pos[1] 1) if op I: state[pos[0]][pos[1]] int(param) elif op D: state[pos[0]][pos[1]] - int(param) special [[-1 for i in range(M)] for j in range(N)] need [[0 for i in range(M)] for j in range(N)] waitcost [[0 for i in range(M)] for j in range(N)] special_count 0 for i in range(N): for j in range(M): if state[i][j] ! 0: need[i][j] (abs(state[i][j]) // 100) int(state[i][j] % 100 ! 0) special[i][j] special_count special_count 1 if i 0 or i N - 1 or j 0 or j M - 1: waitcost[i][j] 1 else: waitcost[i][j] 2 # 状态压缩Dijkstra算法求解 INF 10 ** 18 dist [[[INF for k in range(2 ** special_count)] for i in range(M)] for j in range(N)] import heapq # (dist,r,c,mask) mask 0 full 2 ** special_count - 1 heap [(0, N // 2, M // 2, mask)] while heap: d, r, c, mask heapq.heappop(heap) # print(d, r, c, mask) if mask full and rpos[0] and cpos[1]: # print(MaskFull!) print(d) break # 修改数值 sid special[r][c] if sid ! -1 and not (mask(1sid)): add 0 if (r, c) (N // 2, M // 2) and d0: add (need[r][c]) * waitcost[r][c] else: add (need[r][c] - 1) * waitcost[r][c] nd add d new_mask mask | (1 sid) if nd dist[r][c][new_mask]: dist[r][c][new_mask] nd heapq.heappush(heap, (nd, r, c, new_mask)) # 移动处理 new_r min(r 1, N - 1) if d 1 dist[new_r][c][mask]: dist[new_r][c][mask] d 1 heapq.heappush(heap, (d 1, new_r, c, mask)) new_r max(0, r - 1) if d 1 dist[new_r][c][mask]: dist[new_r][c][mask] d 1 heapq.heappush(heap, (d 1, new_r, c, mask)) new_c min(c 1, M - 1) if d 1 dist[r][new_c][mask]: dist[r][new_c][mask] d 1 heapq.heappush(heap, (d 1, r, new_c, mask)) new_c max(c - 1, 0) if d 1 dist[r][new_c][mask]: dist[r][new_c][mask] d 1 heapq.heappush(heap, (d 1, r, new_c, mask))说明1用例里的m和n存在偶数不符合题意这种情况下需要明确坐标原点的位置是在左上角而不是左下角因为相同的移动和服务操作可能会导致不同的结果2在Python中位或用|表示、异或用^表示没有专门的同或XNOR运算符。