AC dream 1730 Use Machine Learning to Find GF
来源:互联网 发布:如何减腹部的赘肉 知乎 编辑:程序博客网 时间:2024/06/04 18:14
Use Machine Learning to Find GF
Problem Description
众所周知,朴素贝叶斯分类是机器学习中一种经典而有效的算法。 小Xu是一个对机器学习充满兴趣的ACMer,每天沉浸在各种算法中,乐此不疲。 然而有一天,他喜欢上了系里的某一个漂亮女学霸,然而他却不敢跟她表白,更不知道是否能够追到她。经过一番痛苦的纠结,与学长的敦敦教导之后,小Xu,决定通过男人的方法——机器学习中朴素贝叶斯分类的方法来预测一下自己能否追得上自己的心上人。。。。
小Xu将以(财富a,长相b,知识c)3个维度作为特征,学长们的经历作为训练数据,自身情况作为测试数据,来进行训练和分类和预测。其中 0<=a,b,c<=1,小Xu通过朴素贝叶斯算法将结果分为两类即0(没追到)或1(追到)。E表示训练数据的全集数量(即作为训练数据的学长经历数),0<E<=100。
根据朴素贝叶斯算法:
X = P(abc)P(0|abc) = P(a|0) P(b|0) P(c|0) P(0)
Y = P(abc)P(1|abc) = P(a|1) P(b|1) P(c|1) P(1)
其中P(x|0) 表示没有成功的人中具有x特征的概率。
P(x|1) 表示成功的人中具有x特征的概率。
P(0)表示训练数据中没有成功的概率,即没有成功的经历所占总数的比例。
P(1)表示训练数据中成功的概率,即成功的经历所占总数的比例。
首先用学长们的经历作为训练数据,算出各个情况的P(x|0)和 P(x|1),以及P(0)和P(1),紧接着输入测试数据(a,b,c),通过训练数据中已经得到的结果算出X,Y。
当X<=Y时,认为这是属于1,即成功这个类别的,输出”Come on guys,you can do it!”。
当X>Y时,认为这是属于0,即失败这个类别的,输出”Poor guys,you can go back to sleep now..”
Input
输入的第一行,有1个数E分别表示训练数据和测试数据的行数。
接下来的E行,每行包括a,b,c,g4个整数。其中a,b,c如上文所述,g为0,或 1 ,即是否追到。
最后一行,包括三个值,即小Xu的财富值,长相值,知识值。
Output
Sample Input
51 1 1 10 0 0 01 0 0 10 0 1 11 1 0 01 0 1
Sample Output
Come on guys,you can do it!
Source
Manager
本题如题意可以直接按照题意套公式。刚开始自己觉得要用分数表示概率,然后列了一大堆变量来当分母分子。后来想到了可以用二维数组来计数。并直接用小数来表示概率,最后比较时,只要在一定误差范围内,就可以认为X==Y。。。这样这题就很简单了。。。
分别设立四个二维数组,比如设立a【2】【2】数组。则a【1】【0】:代表失败并且具有a品质的人数。a【0】【0】:代表失败并且不具有a品质的人数。
这样就可以很方便的记录人数。
记录完毕后,直接套用题目所给的公式即可。不需要用分数,直接乘除。最后若Y-X>1e-6 则认为Y>=X.
上代码:
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>using namespace std;int a[2][2], b[2][2], c[2][2], g[2];///用数组来记录数量,十分方便。int main(){ int n; while(cin>>n) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); memset(g,0,sizeof(g));///把数组清空 int x,y,z,f; for(int i=0; i<n; i++) { scanf("%d %d %d %d",&x,&y,&z,&f); a[x][f]++;///记录数量 b[y][f]++; c[z][f]++; g[f]++; } scanf("%d %d %d",&x,&y,&z); double X,Y; X=1.0*(a[x][0]*b[y][0]*c[z][0])/(g[0]*g[0]*n);///直接套用公式 Y=1.0*(a[x][1]*b[y][1]*c[z][1])/(g[1]*g[1]*n); if(Y-X>1e-6) { puts("Come on guys,you can do it!");///此处没有换行 } else { puts("Poor guys,you can go back to sleep now.."); } } return 0;}
ps:本题输出无需换行。。。。
- AC dream 1730 Use Machine Learning to Find GF
- Introduction to Machine Learning
- Introduction to Machine Learning
- Introduction to Machine Learning
- Introduction to Machine Learning
- Introduction to machine learning
- Introduction to Machine Learning
- when can we use machine learning ?
- how-to-learn-machine-learning
- Introduction to Machine Learning (一)
- Introduction to Machine Learning【转】
- To solve machine learning problems
- use hash to find dup
- Deep-Learning NotePad1 : Machine-Learning to Deep-Learning
- Is functional analysis relevant to machine learning?
- Using Machine Learning to Name Malware
- Understanding Machine Learning: From Theory to Algorithms
- An Introduction to Machine Learning with Python
- Linux——grep文本搜索命令
- JavaScript 创建存放对象的数组注意的问题
- MFC “0x00402683”指令引用的“0x00000088”内存,该内存不能为written
- 学习笔记第六周——switch语句之加减乘除
- Mybatis映射文件SQL讲解
- AC dream 1730 Use Machine Learning to Find GF
- 基于Nginx实现10万+并发,你应该做的Linux内核优化
- Android音频开发(1):基础知识
- Vmware 搭建Centos7 Minimal支持共享
- JavaScript 1.1 基础知识
- Android XML文件使用
- c++计算
- 编程式实现Spring AOP
- linux后台运行和关闭、查看后台任务