华为杯“华南理工大学程序设计竞赛(同步赛) A KNN算法

题目:华为杯“华南理工大学程序设计竞赛(同步赛) A KNN算法
参考:“华为杯“华南理工大学程序设计竞赛(同步赛)题解A——二分的深入理解


思路

思路挺好想的,二分枚举答案,判断距离为mid时是否满足范围内刚好有k个点
但是赛场了调了很久…果然我不会二分

注意点

1.lower_bound和upper_bound:

lower_bound返回的是第一个大于等于目标值的迭代器。
upper_bound返回的是第一个大于目标值的迭代器。
如果目标值在序列中有多个,lower_bound返回的是第一个目标值的迭代器,而upper_bound返回的是最后一个目标值的下一个迭代器。

现在我们要求所有坐标落在[x-mid, x+mid]范围内的点的个数
lc表示第一个坐标大于等于x-mid的点的下标
rc表示第一个坐标大于x+mid的点的下标(也就是最后一个坐标小于等于x+mid的点的下标(设为rct)+1)
那么rc-lc就是所求
(其实所有满足条件的点下标在[lc, rtc]之间,个数就是rct - lc + 1,也就是rc - lc

2.l和r的初值

l和r的初值其实就是答案的可能取值,由于坐标范围是[-1e9, 1e9],所以答案的取值是[0, 2e9],l取0,r取2e9

3.开long long

在二分过程中l和r的取值范围是[0, 2e9],l+r是会爆int的,所以l、r、mid都要开long long
因为这个wa了好多好多发…甚至过几天重新来理才反应过来

代码

#include 
华为数学建模竞赛中,选择合适的机器学习算法对于解决复杂的数据分析任务和建模问题至关重要。根据竞赛题目涉及的领域,如通信、网络、大数据、人工智能、物联网等,以下是一些常用的机器学习算法推荐: ### 常用机器学习算法 #### 1. 线性回归(Linear Regression) 线性回归是一种基本的监督学习算法,适用于预测连续型变量。它通过拟合一个线性模型来描述输入特征与输出之间的关系。在线性关系较强的情况下,线性回归可以提供简单而有效的解决方案。例如,在处理通信信号强度预测或网络流量分析时,线性回归可以作为初步建模工具。 #### 2. 决策树(Decision Tree) 决策树是一种非参数监督学习方法,适用于分类和回归任务。它通过递归分割数据集,生成一棵树状结构,每个节点代表一个特征测试,每个叶子节点代表最终的分类或预测值。决策树的优点在于易于解释和可视化,适合处理非线性关系的数据。 #### 3. 随机森林(Random Forest) 随机森林是一种集成学习方法,基于多个决策树的组合进行预测。它通过引入随机性来减少过拟合风险,提高模型的泛化能力。随机森林在处理高维数据和噪声数据时表现出色,适合用于大数据分析任务,如网络异常检测或用户行为分析。 #### 4. 支持向量机(Support Vector Machine, SVM) 支持向量机是一种强大的分类和回归算法,尤其适用于小样本数据集。SVM通过寻找一个最优超平面来最大化不同类别之间的边界,从而实现分类。在处理高维空间中的分类问题时,SVM具有较好的性能,适合用于图像识别或文本分类任务。 #### 5. K-近邻算法(K-Nearest Neighbors, KNNKNN是一种简单的非参数分类和回归算法,基于距离度量来预测样本的类别或值。KNN适用于数据分布较为均匀且特征维度较低的情况。在处理实时数据流或在线学习任务时,KNN可以快速适应新数据。 #### 6. 神经网络(Neural Networks) 神经网络是一种模拟人脑神经元结构的计算模型,适用于复杂的非线性关系建模。深度学习是神经网络的一个分支,特别适用于图像识别、自然语言处理和时间序列预测等任务。在处理大规模数据集时,神经网络可以自动提取特征并进行端到端的学习。 #### 7. 聚类算法(如K-Means) 聚类是一种无监督学习方法,用于发现数据中的潜在结构。K-Means是最常用的聚类算法之一,适用于将数据划分为若干个簇。在市场细分、用户分群或图像压缩等任务中,K-Means可以提供直观的解决方案。 #### 8. 主成分分析(Principal Component Analysis, PCA) PCA是一种降维技术,通过线性变换将高维数据投影到低维空间,保留尽可能多的信息。PCA适用于处理高维数据,减少计算复杂度并去除冗余特征。在特征选择和数据可视化任务中,PCA可以显著提升模型性能。 #### 9. 梯度提升树(Gradient Boosting Decision Tree, GBDT) GBDT是一种集成学习方法,通过迭代地构建决策树并优化损失函数来提高模型性能。GBDT在处理非线性关系和高维数据时表现出色,适合用于推荐系统、广告点击率预测等任务。 #### 10. 贝叶斯方法(如朴素贝叶斯) 贝叶斯方法是一类基于概率论的机器学习算法,适用于分类任务。朴素贝叶斯假设特征之间相互独立,尽管这一假设在现实中不一定成立,但在许多实际应用中仍然表现良好,特别是在文本分类任务中。 ### 示例代码 以下是一个使用Scikit-learn库实现随机森林分类器的示例代码: ```python from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import pandas as pd # 加载数据集 data = pd.read_csv('data.csv') X = data.drop('target', axis=1) y = data['target'] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 初始化随机森林分类器 rf = RandomForestClassifier(n_estimators=100, random_state=42) # 训练模型 rf.fit(X_train, y_train) # 预测结果 y_pred = rf.predict(X_test) # 评估模型 accuracy = accuracy_score(y_test, y_pred) print(f'模型准确率: {accuracy:.2f}') ``` ### 总结 在华为数学建模竞赛中,选择合适的机器学习算法需要结合具体问题的特点和数据的性质。上述推荐的算法涵盖了监督学习、无监督学习和集成学习等多个领域,能够应对多种类型的建模任务。通过合理选择和组合这些算法,可以在比中取得更好的成绩。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值