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

题目描述

用一小段带噪声的复数信号样本来训练一棵 CART 决策树,对16QAM符号进行分类判决。每个样本用两维实数特征表示:实部 x1 与虚部 x2;标签是整型类标(如0~15,对应16QAM的16个星座点)。
·
划分标准:使用基尼系数(Gini)作为节点不纯度度量,选择加权 Gini 最小且左右子集均非空的划分。
·
切分方式:只允许在特征 x1 或 x2 上,用固定阈值集合 {-3, -2, -1, 0, 1, 2, 3} 中的某个阈值 t 进行二分;样本按“特征值 < t 进左子集,否则进右子集”分配。
·
叶子输出:叶子节点输出该节点内样本的多数类;若并列,取数值较小的标签,保证确定性。
·
树深度:最大深度为 5(根深度计 1)。
·
训练集整体 Gini:按训练集中各标签频率一次性计算并输出。
请在读入训练样本后,先输出训练集整体 Gini(四舍五入保留 4 位小数),再用训练好的树对给定测试点 (tx1, tx2) 进行预测并输出其标签。
约束与说明
·
仅使用特征 x1、x2;阈值必须从 {-3, -2, -1, 0, 1, 2, 3} 中选择。
·
每次划分两侧必须均非空;若所有候选划分都不能降低加权 Gini,或深度到限,则当前节点为叶子。
·
并列多数类时取数值更小的类标。

输入输出

输入描述
· 第 1 行:整数 M,表示训练样本数。
· 第 2~M+1 行:每行三个数 x1 x2 y(x1、x2 为实数,y 为整型类标)。
· 第 M+2 行:两个实数 tx1 tx2,表示测试样本的特征。
输出描述
· 第 1 行:训练集整体 Gini,四舍五入保留 4 位小数。
· 第 2 行:对测试样本的预测标签(整数)。

样例共 1 组

样例 1 · 训练集中只有 1 条样本,其标签分布完全单一,训练集 Gini=0。 无法有效划分,根即叶,预测恒为 7。
输入
1
2.10 3.00 7
-0.50 1.20
输出
0.0000
7

算法解析依据一般

考点:二分

限制 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:输入 1 / 2.10 3.00 7 / -0.50 1.20 → 输出 0.0000 / 7

训练集中只有 1 条样本,其标签分布完全单一,训练集 Gini=0。

无法有效划分,根即叶,预测恒为 7。

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

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

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