#include <map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <string>
#include <vector>
#include <bitset>
#include <fstream>
#include <sstream>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <sys/time.h>
using namespace std;
#define li long long int
#define rep(i,to) for(li i=0;i<((li)(to));++i)
#define pb push_back
#define sz(v) ((li)(v).size())
#define bit(n) (1ll<<(li)(n))
#define all(vec) (vec).begin(),(vec).end()
#define each(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)
#define MP make_pair
#define F first
#define S second
#define MAX 2
#define RANGE 100
string name[]={"even","odd "};
double cnt1[MAX];
double cnt2[MAX][RANGE];
void study(){
rep(i,10000){
int target=rand()%2;
int num=rand()/2*2+target;
if(rand()%3==0) num++;
cnt1[target]++;
cnt2[target][num%RANGE]++;
}
}
void init(){
rep(i,MAX) cnt1[i]++;
rep(i,MAX)rep(j,RANGE) cnt2[i][j]++;
}
void classify(vector<int> a){
double ans[2]={0,0};
rep(i,MAX){
ans[i]+=sz(a)*log(cnt1[i]/(cnt1[0]+cnt1[1]));
rep(j,sz(a)) ans[i]+=log(cnt2[i][a[j]]/(cnt2[0][a[j]]+cnt2[1][a[j]]));
}
rep(i,sz(a)) cout<<a[i]<<" "; cout<<endl;
rep(i,MAX) printf("%s : %0.6lf\n",name[i].c_str(),ans[i]); cout<<endl;
}
int main(){
init();
study();
rep(i,2){ rep(j,10) cout<<cnt2[i][j]<<" "; cout<<endl; } cout<<endl;
rep(i,10){
vector<int> vec;
rep(i,5) vec.pb(rand()%RANGE);
classify(vec);
}
}
最終更新:2012年02月17日 10:09