From f0e2fa071c665273485ef81556682f1123e2cbdc Mon Sep 17 00:00:00 2001 From: Felix Maurin Date: Mon, 9 Dec 2019 17:05:36 +0100 Subject: [PATCH] algo k_proches_voisins termine --- tests/examples/k_proches_voisins.cpp | 70 +++++++++++++++++----------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/tests/examples/k_proches_voisins.cpp b/tests/examples/k_proches_voisins.cpp index 37c1ebf..c29d98e 100644 --- a/tests/examples/k_proches_voisins.cpp +++ b/tests/examples/k_proches_voisins.cpp @@ -2,22 +2,16 @@ #include #include - -int img_dict() { - map< math::csignal, std::string > dico; - return 0 -}; - 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){ double d; @@ -36,39 +41,50 @@ int main(math::csignal new_vect, map< math::csignal, std::string > dico, int k){ int droite = 0; int gauche = 0; int rejet = 0; - vector choix; + 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}); - 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"){ + } else if (dico[k_min[i].second].second == "arret"){ arret = arret + 1 - } else if (dico[k_min[i].second] == "droite"){ + } else if (dico[k_min[i].second].second == "droite"){ arret = droite + 1 - } else if (dico[k_min[i].second] == "gauche"){ + } else if (dico[k_min[i].second].second == "gauche"){ arret = gauche + 1 - } else if (dico[k_min[i].second] == "rejet"){ + } else if (dico[k_min[i].second].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); - + } + }; + 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" + } + - - }; };