华为 · 模拟 · 算法编程题
华为 模拟 时限 1 秒 / 256 MB

题目描述

在终端设备上部署模型时,常需要先压缩网络规模。现给定一批样本矩阵 X(n 行 d 列)、一层线性分类器的权重矩阵 W(d 行 c 列),以及剪枝比例 ratio。请对 W 进行“按行剪枝”(即移除整行,对应丢弃一个输入特征),然后用剪枝后的模型对每个样本做预测,输出每行样本的预测类别索引(从 0 开始)。
任务要求
·
剪枝指标:对 W 的每一行计算 L1 范数(该行各元素绝对值之和)。L1 越小,越不重要。
·
剪枝行数:k = floor(ratio × d)。若 ratio > 0 且 floor(ratio × d) = 0,则令 k = 1(至少剪 1 行)。
·
剪枝规则:移除 L1 范数最小的 k 行,得到新权重 W'(形状为 (d−k) × c)。
·
特征对齐:将 X 中与被移除行同索引的列一并删除,得到 X'(形状为 n × (d−k))。
·
线性输出:h = X' × W',得到大小为 n × c 的分数矩阵。
·
稳定 Softmax:对 h 的每一行 i,先减去该行最大值,再做 softmax,得到概率分布 y_i。softmax 仅用于说明稳定做法;最终类别索引与直接对 h 行取最大位置相同。
·
预测结果:对每行取 argmax(若有并列则取最左的列索引),输出为一行,用空格分隔各样本类别索引。

输入输出

输入描述
· 第一行:三个整数 n d c。
· 接着 n 行:每行 d 个浮点数,构成矩阵 X。
· 接着 d 行:每行 c 个浮点数,构成矩阵 W。
· 最后一行:一个浮点数 ratio(0 <= ratio <= 1.0)。
输出描述
· 一行,输出 n 个整数,空格分隔,为每个样本的预测类别索引。

样例共 1 组

样例 1 · d=3,ratio=0.33 → floor(0.33×3)=0,但 ratio>0,因此 k=1; W 的行 L1:row1=3,row2=1,row3=5 → 移除 row2; 删除 X 的第 2 列,得到 X';W 删除对应行得到 W'; 计算 h=X'W' 后逐行取最大位置,得到预测 0 0 1。
输入
3 3 2
1 0 0
0 1 0
0 0 1
2 1
0 -1
-2 3
0.33
输出
0 0 1

算法解析依据充分

考点:模拟

限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:模拟

本题切入点

按 L1 范数从小到大剪掉 k = floor(ratio×d) 行(ratio>0 但结果为 0 时保底剪 1 行),同步删除 X 的对应列,再做线性输出与 argmax 取类别。

不涉及复杂算法,把题目描述的流程原样翻译成代码逐步执行即可。

思路框架(模拟 通法 · 非本题专属)

  1. 用变量记录题目要求的「状态」(当前值、剩余数量、当前位置等)。
  2. 按题面给出的顺序,把每一步操作写成一段代码,逐条执行。
  3. 每一步执行后更新状态,并在题目要求的位置输出或累计答案。
  4. 注意循环的边界:执行多少次、何时终止、是否能终止。

实现要点:结构上通常是一个外层循环包住若干 if/else 分支;只要状态定义清楚,正确率很高。

复杂度:时间 O(操作次数) | 空间 O(状态数)

该范式的通法易错点

  • 终止条件写错导致死循环或漏做最后一次操作。
  • 状态更新顺序颠倒(先改了下标又用旧下标)。
  • 题目里「最多 / 恰好 / 至少」的语义差别没区分。

样例解读

样例 1:输入 3 3 2 / 1 0 0 / 0 1 0 / 0 0 1 / 2 1 / 0 -1 / -2 3 / 0.33 → 输出 0 0 1

d=3,ratio=0.33 → floor(0.33×3)=0,但 ratio>0,因此 k=1;

W 的行 L1:row1=3,row2=1,row3=5 → 移除 row2;

删除 X 的第 2 列,得到 X';W 删除对应行得到 W';

计算 h=X'W' 后逐行取最大位置,得到预测 0 0 1。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2025年秋招-华为-12月3号AI岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解