题目描述
在⼈⼯智能中,“分类” 是⼀项⾮常重要的任务。例如,公安系统通过⼈⼯智能分类潜在的电信诈骗,并进⾏及时的预警。现在我们考虑⼀种最简单的 “线性⼆分类器”,它由 n 个整数参数 (常数)a1,a2......an组成。在输⼊⼀组整数x1,x2......xn时,如果a1·x1+a2·xn < 0 成⽴,则分类器输出 true,否则分类器输出 false。如果分类器的输⼊ (称为 “特征”) 选择得当,即便是简单的线性分类器也能取得很好的分类效果。
现在,我们得到了两个⽤于同⼀分类任务的分类器:
分类器 A,当a1·x1+a2·x2+...+an·xn<=0时输出 true,否则输出 false
分类器 B,当b1·x1+b2·x2+...+bn·xn<=0时输出 true,否则输出 false
由于 A 和 B 是两个不同的分类器,它们可能会在某些输⼊的 x 上产⽣分歧,给出不同的分类结果——这样的问题值得我们特别关注。因此,你的任务就是求出⼀组x1,x2...xn,,使得分类器 A 和 B 返回不同的结果。
为了帮助⼤家理解,我们假设a1,b1分别保存在数组 a 和 b 中 (数组下标从 1 到 n)。你的任务就是求出数组 x 的元素x[1],x[2],....x[n]。使下⾯的函数 diverge 返回 true:
int n; // 参数/输⼊的个数
bool classify(int param[], int x[]) {
int y = 0;
for (int i = 1; i <= n; i++) {
y += param[i] * x[i];
}
if (y <= 0) {
return true;
} else {
return false;
}
}
bool diverge(int x[]) {
return classify(a, x) != classify(b, x);
}