summaryrefslogtreecommitdiff
path: root/src/Witness_complex/include/gudhi/Landmark_choice_by_furthest_point.h
diff options
context:
space:
mode:
authorskachano <skachano@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2016-01-13 19:08:03 +0000
committerskachano <skachano@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2016-01-13 19:08:03 +0000
commit7e40efa04f1cc528f49da82df1502af85feb78d1 (patch)
treec5b8a69ead54f94e89b94695aa29c88c6de38eb8 /src/Witness_complex/include/gudhi/Landmark_choice_by_furthest_point.h
parent6775c601c9c9f7a1f0679dbb1fecb3bd5181eb6a (diff)
Added a test, moved the old test from example
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/witness@964 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 5744fdd3d30735cebdbd7442f023585a70bf0fca
Diffstat (limited to 'src/Witness_complex/include/gudhi/Landmark_choice_by_furthest_point.h')
-rw-r--r--src/Witness_complex/include/gudhi/Landmark_choice_by_furthest_point.h71
1 files changed, 36 insertions, 35 deletions
diff --git a/src/Witness_complex/include/gudhi/Landmark_choice_by_furthest_point.h b/src/Witness_complex/include/gudhi/Landmark_choice_by_furthest_point.h
index 0b196f18..ebee96ad 100644
--- a/src/Witness_complex/include/gudhi/Landmark_choice_by_furthest_point.h
+++ b/src/Witness_complex/include/gudhi/Landmark_choice_by_furthest_point.h
@@ -33,6 +33,9 @@
class Landmark_choice_by_furthest_point {
+private:
+ typedef std::vector<int> typeVectorVertex;
+
public:
/**
@@ -57,45 +60,43 @@ public:
double curr_max_dist = 0; // used for defining the furhest point from L
const double infty = std::numeric_limits<double>::infinity(); // infinity (see next entry)
std::vector< double > dist_to_L(nb_points,infty); // vector of current distances to L from points
+ int dim = points.begin()->size();
- //CHOICE OF THE FIRST LANDMARK
- int rand_int = rand() % nb_points;
- int curr_max_w = rand_int; //For testing purposes a pseudo-random number is used here
-
- for (current_number_of_landmarks = 0; current_number_of_landmarks != nbL; current_number_of_landmarks++)
- {
- //curr_max_w at this point is the next landmark
- chosen_landmarks.push_back(curr_max_w);
- for (auto v: knn)
- v.push_back(current_number_of_landmarks);
- int i = 0;
- for (const auto& p: points)
- {
- // used to stock the distance from the current point to L
- double curr_dist = euclidean_distance(p, points.begin() + chosen_landmarks[current_number_of_landmarks]);
- wit_land_dist[i].push_back(curr_dist);
- knn[i].push_back(current_number_of_landmarks);
- if (curr_dist < dist_to_L[i])
- dist_to_L[i] = curr_dist;
- int j = current_number_of_landmarks;
- while (j > 0 && wit_land_dist[i][j-1] > wit_land_dist[i][j])
- {
- std::swap(knn[i][j], knn[i][j-1]);
- std::swap(wit_land_dist[i][j-1], wit_land_dist[i][j-1]);
- --j;
- }
- ++i;
- }
- curr_max_dist = 0;
- for (auto dist: dist_to_L) {
- if (dist > curr_max_dist)
+ int rand_int = rand() % nb_points;
+ int curr_max_w = rand_int; //For testing purposes a pseudo-random number is used here
+
+ for (current_number_of_landmarks = 0; current_number_of_landmarks != nbL; current_number_of_landmarks++)
+ {
+ //curr_max_w at this point is the next landmark
+ chosen_landmarks.push_back(curr_max_w);
+ for (auto& v: knn)
+ v.push_back(current_number_of_landmarks);
+ unsigned i = 0;
+ for (auto& p: points)
{
- curr_max_dist = dist;
- curr_max_w = i;
+ double curr_dist = euclidean_distance(p, *(points.begin() + chosen_landmarks[current_number_of_landmarks]));
+ wit_land_dist[i].push_back(curr_dist);
+ knn[i].push_back(current_number_of_landmarks);
+ if (curr_dist < dist_to_L[i])
+ dist_to_L[i] = curr_dist;
+ int j = current_number_of_landmarks;
+ while (j > 0 && wit_land_dist[i][j-1] > wit_land_dist[i][j])
+ {
+ std::swap(knn[i][j], knn[i][j-1]);
+ std::swap(wit_land_dist[i][j-1], wit_land_dist[i][j-1]);
+ --j;
+ }
+ ++i;
}
+ curr_max_dist = 0;
+ for (i = 0; i < dist_to_L.size(); i++)
+ if (dist_to_L[i] > curr_max_dist)
+ {
+ curr_max_dist = dist_to_L[i];
+ curr_max_w = i;
+ }
}
- }
- }
+ }
};