小红正在给一套智能运维平台做故障诊断模块。平台会持续收到交换机和路由器上报的多项运行指标,例如 CPU 使用率、内存占用、丢包率和温度等。 为了让规则学习过程更统一,小红会先把每个连续值指标转成二值告警信号:如果该指标值小于对应阈值,则记为 0;如果该指标值大于等于对应阈值,则记为 1。 在完成这一步之后,每条训练样本都会变成一个只包含 0/1 特征的告警向量,再配合样本标签(0 表示正常,1 表示故障)用于训练一棵 ID3 决策树。 构建决策树时,设当前样本集合为 D,其信息熵为 H(D) = -sum(p_i * log2(p_i)),其中 p_i 表示第 i 类样本在集合 D 中所占的比例。 对于某个尚未使用过的特征 A,它在当前节点上的信息增益定义为 Gain(D, A) = H(D) - sum((|D_v| / |D|) * H(D_v)),其中 D_v 表示特征 A 取值为 v 的样本子集。 决策树的构建规则如下:先把所有训练样本按给定阈值离散化成 0/1 特征;如果当前节点样本标签已经完全相同,则该节点直接成为叶子;否则,从当前还未使用的特征中选择信息增益最大的那个作为划分特征;如果有多个特征的信息增益相同,则选择下标更小的特征;对于某个分支,如果继续划分时没有可用特征,或者该分支样本无法再继续有效区分,则该节点输出当前样本集合中的多数类;如果两类数量相同,则输出 0。 预测新样本时,先按同样阈值离散化,再沿决策树向下走到叶子并输出预测类别。 请你输出所有待预测样本的分类结果。
第一行包含两个整数 N 和 M,分别表示训练样本数量和特征数量,满足 1 第二行包含 M 个浮点数,表示每个特征各自对应的告警阈值。 接下来 N 行,每行包含 M+1 个数。前 M 个为该训练样本的原始特征值,最后一个为标签,标签只会是 0 或 1。 下一行包含一个整数 q,表示待预测样本数量,满足 1 接下来 q 行,每行包含 M 个原始特征值,表示一个需要预测的新样本。
输出一行,包含 q 个整数,表示这 q 个待测样本的预测类别,类别之间用空格分隔。
6 3 50.0 60.0 70.0 40.0 55.0 65.0 0 55.0 58.0 90.0 1 52.0 80.0 72.0 1 30.0 50.0 60.0 0 75.0 40.0 85.0 1 35.0 75.0 50.0 0 3 45.0 65.0 68.0 70.0 50.0 75.0 60.0 85.0 90.0
0 1 1
考点:模拟
限制 2 秒 / 256MB | 标准输入输出
推荐方向:模拟
本题切入点
按 ID3 流程建树:先按阈值把特征二值化,递归算各特征的信息增益(熵用 log2),取增益最大者划分(同增益取下标小者),标签一致或无可用特征时用多数类作叶子,再预测 q 个样本。
不涉及复杂算法,把题目描述的流程原样翻译成代码逐步执行即可。
思路框架(模拟 通法 · 非本题专属)
实现要点:结构上通常是一个外层循环包住若干 if/else 分支;只要状态定义清楚,正确率很高。
复杂度:时间 O(操作次数) | 空间 O(状态数)
该范式的通法易错点
样例 1:输入 6 3 / 50.0 60.0 70.0 / 40.0 55.0 65.0 0 / 55.0 58.0 90.0 1 / 52.0 80.0 72.0 1 / 30.0 50.0 60.0 0 / 7 → 输出 0 1 1
先按阈值把训练样本转成二值特征,例如第一条会变成 0 0 0,第二条会变成 1 0 1。在这组数据里,第三个特征最先把两类样本区分开,因此三个待测样本的预测结果依次为 0、1、1。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-04月23日留学生AI岗。