diff --git a/tests/src/k_proches_voisins.cpp b/tests/src/k_proches_voisins.cpp index 155cb2d..17d64e5 100644 --- a/tests/src/k_proches_voisins.cpp +++ b/tests/src/k_proches_voisins.cpp @@ -3,62 +3,84 @@ #include double distance(math::csignal v1, math::csignal v2, int n){ - if (v1.size() != v2.size()) { - throw std::runtime_error("les deux vecteurs doivent être de même longueur"); - } - int m = v1.size(); - double d; - double di; - for (int i=0; i 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){ - std::vector< std::pair > k_min; + std::vector> k_min; std::map dico; - double d; - int avance = 0; - int arret = 0; - int droite = 0; - int gauche = 0; - int rejet = 0; - vector choix; - for(auto& ref_vect : dico){ - d = distance(new_vect, ref_vect.first ); - if (k_min.size() < k ){ - k_min.push_back({d, ref_vect.first}); - sort(k_min.begin(), k_min.end()); - } else if (d < k_min[k-1].first){ - k_min.push_back({d, ref_vect.first}); - sort(k_min.begin(), k_min.end()); - k_min.pop_back(); - }; - - } ; - for(auto i = k_min.begin(); i != k_min.end(); i++) { - if (dico[k_min[i].second].second == "avance"){ - avance = avance + 1 - } else if (dico[k_min[i].second] == "arret"){ - arret = arret + 1 - } else if (dico[k_min[i].second] == "droite"){ - arret = droite + 1 - } else if (dico[k_min[i].second] == "gauche"){ - arret = gauche + 1 - } else if (dico[k_min[i].second] == "rejet"){ - arret = rejet + 1 - } ; - - choix.push_back(avance); - choix.push_back(arret); - choix.push_back(droite); - choix.push_back(gauche); - choix.push_back(rejet); - + double d; + int avance = 0; + int arret = 0; + int droite = 0; + int gauche = 0; + int rejet = 0; + vector vchoix; + for(auto& ref_vect : dico){ + d = distance(new_vect, ref_vect.first ); + if (k_min.size() < k ){ + k_min.push_back({d, ref_vect.first}); + } else if (d < k_min[k-1].first){ + k_min.push_back({d, ref_vect.first}); + sort(k_min.begin(), k_min.end()); + k_min.pop_back(); + } - - }; + } + for(auto i = k_min.begin(); i != k_min.end(); i++) { + if (dico[k_min[i].second].second == "avance"){ + avance = avance + 1 + } else if (dico[k_min[i].second].second == "arret"){ + arret = arret + 1 + } else if (dico[k_min[i].second].second == "droite"){ + arret = droite + 1 + } else if (dico[k_min[i].second].second == "gauche"){ + arret = gauche + 1 + } else if (dico[k_min[i].second].second == "rejet"){ + arret = rejet + 1 + } + } + vchoix.push_back(avance); + vchoix.push_back(arret); + vchoix.push_back(droite); + vchoix.push_back(gauche); + vchoix.push_back(rejet); + + int nchoix = argmax(vchoix); + string choix ; + if (nchoix == 0){ + choix = "avance" + } else if (nchoix == 1){ + choix = "arret" + } else if (nchoix == 2){ + choix = "droite" + } else if (nchoix == 3){ + choix = "gauche" + } else if (nchoix == 4){ + choix = "rejet" + } };