相对简单的模拟。C++11
/* ***********************************************
Author :guanjun
Created Time :2016/6/20 18:22:32
File Name :1.cpp
************************************************ */
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <stdio.h>
#include <algorithm>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <fstream>
#define maxn 10010
using namespace std;
int k;
struct node{
double x1,x2,x3,x4,x5;
string s;
}nod[maxn];
pair<double,string>p[maxn];
map<string,int>mp;
ifstream fin;
int input(string s){
fin.open(s);
if(!fin){
cout<<"can not open the file "<<s<<endl;
exit(1);
}
int i=1;
while(fin>>nod[i].x1>>nod[i].x2>>nod[i].x3>>nod[i].x4>>nod[i].x5>>nod[i].s){
nod[i].x1*=100.0;nod[i].x2*=100.0;nod[i].x3*=100.0;nod[i].x4*=100.0;nod[i].x5*=100.0;
i++;
}
return i;
}
double mul(double x,double y){
return (x-y)*(x-y);
}
double dis(node a,node b){
double tmp=mul(a.x1,b.x1)+mul(a.x2,b.x2)+mul(a.x3,b.x3)+mul(a.x4,b.x4)+mul(a.x5,b.x5);
return sqrt(tmp);
}
string knn(int n,node x){
for(int i=1;i<=n;i++){
p[i]={dis(x,nod[i]),nod[i].s};
}
//for(int i=1;i<=n;i++)cout<<p[i].first<<endl;
sort(p+1,p+1+n);
//for(int i=1;i<=n;i++)cout<<p[i].first<<endl;
mp.clear();
for(int i=1;i<=k;i++)mp[p[i].second]++;
int Max=0;
string ans;
for(auto x:mp){
if(x.second>Max){
Max=x.second;
ans=x.first;
}
}
return ans;
}
int main()
{
int n,m;
puts("input k");
cin>>k;
n=input("in.txt");
puts("input the test case");
cin>>m;
node tes;
for(int i=1;i<=m;i++){
cin>>tes.x1>>tes.x2>>tes.x3>>tes.x4>>tes.x5;
tes.x1*=100.0;tes.x2*=100.0;tes.x3*=100.0;tes.x4*=100.0;tes.x5*=100.0;
cout<<"belong to "<<knn(n,tes)<<endl;
}
return 0;
}
训练数据:
0 0 0 0 0 very_low 0.08 0.08 0.1 0.24 0.9 High 0.06 0.06 0.05 0.25 0.33 Low 0.1 0.1 0.15 0.65 0.3 Middle 0.08 0.08 0.08 0.98 0.24 Low 0.09 0.15 0.4 0.1 0.66 Middle 0.1 0.1 0.43 0.29 0.56 Middle 0.15 0.02 0.34 0.4 0.01 very_low 0.2 0.14 0.35 0.72 0.25 Low 0 0 0.5 0.2 0.85 High 0.18 0.18 0.55 0.3 0.81 High 0.06 0.06 0.51 0.41 0.3 Low 0.1 0.1 0.52 0.78 0.34 Middle 0.1 0.1 0.7 0.15 0.9 High 0.2 0.2 0.7 0.3 0.6 Middle 0.12 0.12 0.75 0.35 0.8 High 0.05 0.07 0.7 0.01 0.05 very_low 0.1 0.25 0.1 0.08 0.33 Low 0.15 0.32 0.05 0.27 0.29 Low 0.2 0.29 0.25 0.49 0.56 Middle 0.12 0.28 0.2 0.78 0.2 Low 0.18 0.3 0.37 0.12 0.66 Middle 0.1 0.27 0.31 0.29 0.65 Middle 0.18 0.31 0.32 0.42 0.28 Low 0.06 0.29 0.35 0.76 0.25 Low 0.09 0.3 0.68 0.18 0.85 High 0.04 0.28 0.55 0.25 0.1 very_low 0.09 0.255 0.6 0.45 0.25 Low 0.08 0.325 0.62 0.94 0.56 High 0.15 0.275 0.8 0.21 0.81 High 0.12 0.245 0.75 0.31 0.59 Middle 0.15 0.295 0.75 0.65 0.24 Low 0.1 0.256 0.7 0.76 0.16 Low 0.18 0.32 0.04 0.19 0.82 High 0.2 0.45 0.28 0.31 0.78 High 0.06 0.35 0.12 0.43 0.29 Low 0.1 0.42 0.22 0.72 0.26 Low 0.18 0.4 0.32 0.08 0.33 Low 0.09 0.33 0.31 0.26 0 very_low 0.19 0.38 0.38 0.49 0.45 Middle 0.02 0.33 0.36 0.76 0.1 Low 0.2 0.49 0.6 0.2 0.78 High 0.14 0.49 0.55 0.29 0.6 Middle 0.18 0.33 0.61 0.64 0.25 Middle 0.115 0.35 0.65 0.27 0.04 very_low 0.17 0.36 0.8 0.14 0.66 Middle 0.1 0.39 0.75 0.31 0.62 Middle 0.13 0.39 0.85 0.38 0.77 High 0.18 0.34 0.71 0.71 0.9 High 0.09 0.51 0.02 0.18 0.67 Middle 0.06 0.5 0.09 0.28 0.25 Low 0.23 0.7 0.19 0.51 0.45 Middle 0.09 0.55 0.12 0.78 0.05 Low 0.24 0.75 0.32 0.18 0.86 High 0.18 0.72 0.37 0.29 0.55 Middle 0.1 0.6 0.33 0.42 0.26 Low 0.2 0.52 0.36 0.84 0.25 Middle 0.09 0.6 0.66 0.19 0.59 Middle 0.18 0.51 0.58 0.33 0.82 High 0.08 0.58 0.6 0.64 0.1 Low 0.09 0.61 0.53 0.75 0.01 Low 0.06 0.77 0.72 0.19 0.56 Middle 0.15 0.79 0.78 0.3 0.51 Middle 0.2 0.68 0.73 0.48 0.28 Low 0.24 0.58 0.76 0.8 0.28 Middle 0.25 0.1 0.03 0.09 0.15 very_low 0.32 0.2 0.06 0.26 0.24 very_low 0.29 0.06 0.19 0.55 0.51 Middle 0.28 0.1 0.12 0.28 0.32 Low 0.3 0.08 0.4 0.02 0.67 Middle 0.27 0.12 0.37 0.29 0.58 Middle 0.31 0.1 0.41 0.42 0.75 High 0.29 0.15 0.33 0.66 0.08 very_low 0.3 0.2 0.52 0.3 0.53 Middle 0.28 0.16 0.69 0.33 0.78 High 0.255 0.18 0.5 0.4 0.1 very_low 0.265 0.06 0.57 0.75 0.1 Low 0.275 0.1 0.72 0.1 0.3 Low 0.245 0.1 0.71 0.26 0.2 very_low 0.295 0.2 0.86 0.44 0.28 Low 0.32 0.12 0.79 0.76 0.24 Low 0.295 0.25 0.26 0.12 0.67 Middle 0.315 0.32 0.29 0.29 0.62 Middle 0.25 0.29 0.15 0.48 0.26 Low 0.27 0.1 0.1 0.7 0.25 Low 0.248 0.3 0.31 0.2 0.03 very_low 0.325 0.25 0.38 0.31 0.79 High 0.27 0.31 0.32 0.41 0.28 Low 0.29 0.29 0.4 0.78 0.18 Low 0.29 0.3 0.52 0.09 0.67 Middle 0.258 0.28 0.64 0.29 0.56 Middle 0.32 0.255 0.55 0.78 0.34 Middle 0.251 0.265 0.57 0.6 0.09 very_low 0.288 0.31 0.79 0.23 0.24 Low 0.323 0.32 0.89 0.32 0.8 High 0.255 0.305 0.86 0.62 0.15 Low 0.295 0.25 0.73 0.77 0.19 Low 0.258 0.25 0.295 0.33 0.77 High 0.29 0.25 0.29 0.29 0.57 Middle 0.243 0.27 0.08 0.42 0.29 Low 0.27 0.28 0.18 0.48 0.26 Low 0.299 0.32 0.31 0.33 0.87 High 0.3 0.27 0.31 0.31 0.54 Middle 0.245 0.26 0.38 0.49 0.27 Low 0.295 0.29 0.31 0.76 0.1 Low 0.29 0.3 0.56 0.25 0.67 Middle 0.26 0.28 0.6 0.29 0.59 Middle 0.305 0.255 0.63 0.4 0.54 Middle 0.32 0.27 0.52 0.81 0.3 Middle 0.299 0.295 0.8 0.37 0.84 High 0.276 0.255 0.81 0.27 0.33 Low 0.258 0.31 0.88 0.4 0.3 Low 0.32 0.28 0.72 0.89 0.58 High 0.329 0.55 0.02 0.4 0.79 High 0.295 0.59 0.29 0.31 0.55 Middle 0.285 0.64 0.18 0.61 0.45 Middle 0.265 0.6 0.28 0.66 0.07 very_low 0.315 0.69 0.28 0.8 0.7 High 0.28 0.78 0.44 0.17 0.66 Middle 0.325 0.61 0.46 0.32 0.81 High 0.28 0.65 0.4 0.65 0.13 Low 0.255 0.75 0.35 0.72 0.25 Low 0.305 0.55 0.5 0.11 0.333 Low 0.3 0.85 0.54 0.25 0.83 Middle 0.325 0.9 0.52 0.49 0.76 High 0.312 0.8 0.67 0.92 0.5 High 0.299 0.7 0.95 0.22 0.66 High 0.265 0.76 0.8 0.28 0.28 Low 0.255 0.72 0.72 0.63 0.14 Low 0.295 0.6 0.72 0.88 0.28 Middle 0.39 0.05 0.02 0.06 0.34 Low 0.4 0.18 0.26 0.26 0.67 Middle 0.45 0.04 0.18 0.55 0.07 very_low 0.48 0.12 0.28 0.7 0.71 High 0.4 0.12 0.41 0.1 0.65 Middle 0.41 0.18 0.33 0.31 0.5 Middle 0.38 0.1 0.4 0.48 0.26 Low 0.37 0.06 0.32 0.78 0.1 Low 0.41 0.09 0.58 0.18 0.58 Middle 0.38 0.01 0.53 0.27 0.3 Low 0.33 0.04 0.5 0.55 0.1 very_low 0.42 0.15 0.66 0.78 0.4 Middle 0.44 0.08 0.8 0.22 0.56 Middle 0.39 0.15 0.81 0.22 0.29 Low 0.42 0.21 0.87 0.56 0.48 Middle 0.46 0.2 0.76 0.95 0.65 High 0.365 0.243 0.19 0.24 0.35 Low 0.33 0.27 0.2 0.33 0.1 very_low 0.345 0.299 0.1 0.64 0.13 Low 0.48 0.3 0.15 0.65 0.77 High 0.49 0.245 0.38 0.14 0.86 High 0.334 0.295 0.33 0.32 0.3 Low 0.36 0.29 0.37 0.48 0.13 very_low 0.39 0.26 0.39 0.77 0.14 Low 0.43 0.305 0.51 0.09 0.64 Middle 0.44 0.32 0.55 0.33 0.52 Middle 0.45 0.299 0.63 0.36 0.51 Middle 0.495 0.276 0.58 0.77 0.83 High 0.465 0.258 0.73 0.18 0.59 Middle 0.475 0.32 0.79 0.31 0.54 Middle 0.348 0.329 0.83 0.61 0.18 Low 0.385 0.26 0.76 0.84 0.3 Middle 0.445 0.39 0.02 0.24 0.88 High 0.43 0.45 0.27 0.27 0.89 High 0.33 0.34 0.1 0.49 0.12 very_low 0.4 0.33 0.12 0.3 0.9 High 0.34 0.4 0.38 0.2 0.61 Middle 0.38 0.36 0.46 0.49 0.78 High 0.35 0.38 0.32 0.6 0.16 Low 0.41 0.49 0.34 0.21 0.92 High 0.42 0.36 0.63 0.04 0.25 Low 0.43 0.38 0.62 0.33 0.49 Middle 0.44 0.33 0.59 0.53 0.85 High 0.4 0.42 0.58 0.75 0.16 Low 0.46 0.44 0.89 0.12 0.66 Middle 0.38 0.39 0.79 0.33 0.3 Low 0.39 0.42 0.83 0.65 0.19 Low 0.49 0.34 0.88 0.75 0.71 High 0.46 0.64 0.22 0.22 0.6 Middle 0.44 0.55 0.11 0.26 0.83 High 0.365 0.68 0.1 0.63 0.18 Low 0.45 0.65 0.19 0.99 0.55 High 0.46 0.78 0.38 0.24 0.89 High 0.37 0.55 0.41 0.29 0.3 Low 0.38 0.59 0.31 0.62 0.2 Low 0.49 0.64 0.34 0.78 0.21 Low 0.495 0.82 0.67 0.01 0.93 High 0.44 0.69 0.61 0.29 0.57 Middle 0.365 0.57 0.59 0.55 0.25 Low 0.49 0.9 0.52 0.9 0.47 High 0.445 0.7 0.82 0.16 0.64 Middle 0.42 0.7 0.72 0.3 0.8 High 0.37 0.6 0.77 0.4 0.5 Middle 0.4 0.61 0.71 0.88 0.67 High 0.6 0.14 0.22 0.11 0.66 Middle 0.55 0.1 0.27 0.25 0.29 Low 0.68 0.19 0.19 0.48 0.1 very_low 0.73 0.2 0.07 0.72 0.26 Low 0.78 0.15 0.38 0.18 0.63 Middle 0.55 0.1 0.34 0.3 0.1 very_low 0.59 0.18 0.31 0.55 0.09 very_low
测试数据
0.64 0.09 0.33 0.65 0.5 Middle 0.6 0.19 0.55 0.08 0.1 very_low 0.69 0.02 0.62 0.3 0.29 Low 0.78 0.21 0.68 0.65 0.75 High 0.62 0.14 0.52 0.81 0.15 Low 0.7 0.18 0.88 0.09 0.66 Middle 0.75 0.015 0.78 0.31 0.53 Middle 0.55 0.17 0.71 0.48 0.11 very_low 0.85 0.05 0.91 0.8 0.68 High 0.78 0.27 0.13 0.14 0.62 Middle 0.8 0.29 0.06 0.31 0.51 Middle 0.9 0.26 0.19 0.58 0.79 High 0.76 0.258 0.07 0.83 0.34 Middle 0.72 0.32 0.48 0.2 0.6 Middle 0.6 0.251 0.39 0.29 0.3 Low 0.52 0.288 0.32 0.5 0.3 Low 0.6 0.31 0.31 0.87 0.58 High 0.51 0.255 0.55 0.17 0.64 Middle 0.58 0.295 0.62 0.28 0.3 Low 0.61 0.258 0.56 0.62 0.24 Low 0.77 0.267 0.59 0.78 0.28 Middle 0.79 0.28 0.88 0.2 0.66 Middle 0.68 0.27 0.78 0.31 0.57 Middle 0.58 0.299 0.73 0.63 0.21 Low 0.77 0.29 0.74 0.82 0.68 High 0.71 0.475 0.13 0.23 0.59 Middle 0.58 0.348 0.06 0.29 0.31 Low 0.88 0.335 0.19 0.55 0.78 High 0.99 0.49 0.07 0.7 0.69 High 0.73 0.43 0.32 0.12 0.65 Middle 0.61 0.33 0.36 0.28 0.28 Low 0.51 0.4 0.4 0.59 0.23 Low 0.83 0.44 0.49 0.91 0.66 High 0.66 0.38 0.55 0.15 0.62 Middle 0.58 0.35 0.51 0.27 0.3 Low 0.523 0.41 0.55 0.6 0.22 Low 0.66 0.36 0.56 0.4 0.83 High 0.62 0.37 0.81 0.13 0.64 Middle 0.52 0.44 0.82 0.3 0.52 Middle 0.5 0.4 0.73 0.62 0.2 Low 0.71 0.46 0.95 0.78 0.86 High 0.64 0.55 0.15 0.18 0.63 Middle 0.52 0.85 0.06 0.27 0.25 Low 0.62 0.62 0.24 0.65 0.25 Middle 0.91 0.58 0.26 0.89 0.88 High 0.62 0.67 0.39 0.1 0.66 Middle 0.58 0.58 0.31 0.29 0.29 Low 0.89 0.68 0.49 0.65 0.9 High 0.72 0.6 0.45 0.79 0.45 Middle 0.68 0.63 0.65 0.09 0.66 Middle 0.56 0.6 0.6 0.31 0.5 Middle 0.54 0.51 0.55 0.64 0.19 Low 0.61 0.78 0.69 0.92 0.58 High 0.78 0.61 0.71 0.19 0.6 Middle 0.54 0.82 0.71 0.29 0.77 High 0.5 0.75 0.81 0.61 0.26 Middle 0.66 0.9 0.76 0.87 0.74 High
|
请发表评论