华为 · 二分 · 算法编程题
华为 二分 时限 1 秒 / 256 MB

题目描述

在运维中心收集到的一批样本中,每条样本包含 m 个二值特征与一个二分类标签(0=正常,1=劣化)。请基于 ID3 决策树训练一个二叉分类器,并对 q 条查询样本给出预测结果。
规则与细节
·
划分准则:信息增益(Entropy + Information Gain)。在当前节点,从“尚未使用”的特征中选择信息增益最大的进行二分。
·
并列处理:若多个特征增益相同,选择“特征下标更小”的那个。
·
终止与叶子:
·
若当前样本标签全同,直接返回该标签;
·
若没有任何特征能带来正的增益(或特征已经用尽),返回“多数标签”;若平票,返回 0。
·
为保证可预测性,某次划分若一侧样本为空,该子结点直接作为“多数标签叶子”(平票仍为 0)。
·
预测:从根出发,按节点记录的特征下标读取 0/1 向左/向右,直到叶子。

输入输出

输入描述
第一行:n m
接下来 n 行:每行 m+1 个整数,前 m 个为特征值(0/1),最后 1 个为标签(0/1)
下一行:q
接下来 q 行:每行 m 个整数,表示待预测样本的特征(0/1)
输出描述
共 q 行,每行 1 个整数(0 或 1),为对应查询样本的预测值

样例共 1 组

样例 1 · 在根节点,按信息增益选择特征1(与特征2并列时,因下标更小而被选中);左支(特征1=0)标签几乎全为 0,右支(特征1=1)标签几乎全为 1;因此三个查询分别预测为 0、1、1。
输入
6 2
0 0 0
0 1 0
1 0 1
1 1 1
0 0 0
1 1 1
3
0 1
1 0
1 1
输出
0
1
1

算法解析依据一般

考点:二分

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

题目画像

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

解题思路

参考方向:二分

把「求最优值」转化为「判定某值是否可行」,用单调性二分逼近答案。

思路框架(二分 通法 · 非本题专属)

  1. 确认单调性:答案越大/越小,条件越容易(或越难)满足。
  2. 写出 check(x):判断值为 x 时是否可行。
  3. 在答案区间 [lo, hi] 上二分,每次取 mid 调 check,收缩区间。
  4. 边界收敛到唯一答案,注意取整方向(求最小可行值用上取整)。

实现要点:模板:while (lo < hi) { mid = (lo+hi)/2; if (check(mid)) hi = mid; else lo = mid+1; } 求最小可行值。

复杂度:时间 O(check 的代价 × log(答案范围)) | 空间 O(1)

该范式的通法易错点

  • check 函数不满足单调性却硬套二分(会得到错误答案)。
  • 二分边界或取整方向写错,陷入死循环或漏掉边界答案。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

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

在根节点,按信息增益选择特征1(与特征2并列时,因下标更小而被选中);左支(特征1=0)标签几乎全为 0,右支(特征1=1)标签几乎全为 1;因此三个查询分别预测为 0、1、1。

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

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

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