merge du fichier k_proches_voisins.cpp

This commit is contained in:
Guillaume Courrier 2019-12-09 19:39:01 +01:00
commit 9a022e67fe

View file

@ -17,8 +17,21 @@ double distance(math::csignal v1, math::csignal v2, int n){
return std::pow(d, 1/n); return std::pow(d, 1/n);
}; };
int argmax(vector<int> v){
int arg = 0;
int max = v[0];
int n = v.size();
for(int i = 1; i < n ; ++i){
if (v[i]>max){
arg = i;
max = v[i];
};
};
return arg
};
int main(math::csignal new_vect, map< math::csignal, std::string > dico, int k){ int main(math::csignal new_vect, map< math::csignal, std::string > dico, int k){
std::vector< std::pair<double , math::csignal> > k_min; std::vector<std::pair<double, math::csignal>> k_min;
std::map<math::csignal, std::string> dico; std::map<math::csignal, std::string> dico;
double d; double d;
int avance = 0; int avance = 0;
@ -26,39 +39,48 @@ int main(math::csignal new_vect, map< math::csignal, std::string > dico, int k){
int droite = 0; int droite = 0;
int gauche = 0; int gauche = 0;
int rejet = 0; int rejet = 0;
vector<int> choix; vector<int> vchoix;
for(auto& ref_vect : dico){ for(auto& ref_vect : dico){
d = distance(new_vect, ref_vect.first ); d = distance(new_vect, ref_vect.first );
if (k_min.size() < k ){ if (k_min.size() < k ){
k_min.push_back({d, ref_vect.first}); k_min.push_back({d, ref_vect.first});
sort(k_min.begin(), k_min.end());
} else if (d < k_min[k-1].first){ } else if (d < k_min[k-1].first){
k_min.push_back({d, ref_vect.first}); k_min.push_back({d, ref_vect.first});
sort(k_min.begin(), k_min.end()); sort(k_min.begin(), k_min.end());
k_min.pop_back(); k_min.pop_back();
}; }
} ; }
for(auto i = k_min.begin(); i != k_min.end(); i++) { for(auto i = k_min.begin(); i != k_min.end(); i++) {
if (dico[k_min[i].second].second == "avance"){ if (dico[k_min[i].second].second == "avance"){
avance = avance + 1 avance = avance + 1
} else if (dico[k_min[i].second] == "arret"){ } else if (dico[k_min[i].second].second == "arret"){
arret = arret + 1 arret = arret + 1
} else if (dico[k_min[i].second] == "droite"){ } else if (dico[k_min[i].second].second == "droite"){
arret = droite + 1 arret = droite + 1
} else if (dico[k_min[i].second] == "gauche"){ } else if (dico[k_min[i].second].second == "gauche"){
arret = gauche + 1 arret = gauche + 1
} else if (dico[k_min[i].second] == "rejet"){ } else if (dico[k_min[i].second].second == "rejet"){
arret = rejet + 1 arret = rejet + 1
} ; }
}
vchoix.push_back(avance);
vchoix.push_back(arret);
vchoix.push_back(droite);
vchoix.push_back(gauche);
vchoix.push_back(rejet);
choix.push_back(avance); int nchoix = argmax(vchoix);
choix.push_back(arret); string choix ;
choix.push_back(droite); if (nchoix == 0){
choix.push_back(gauche); choix = "avance"
choix.push_back(rejet); } else if (nchoix == 1){
choix = "arret"
} else if (nchoix == 2){
choix = "droite"
}; } else if (nchoix == 3){
choix = "gauche"
} else if (nchoix == 4){
choix = "rejet"
}
}; };