summaryrefslogtreecommitdiff
path: root/src/Subsampling/include/gudhi/choose_n_farthest_points.h
diff options
context:
space:
mode:
authorROUVREAU Vincent <vincent.rouvreau@inria.fr>2020-11-18 08:03:56 +0100
committerROUVREAU Vincent <vincent.rouvreau@inria.fr>2020-11-18 08:03:56 +0100
commit8b7a25482dfd9c38825e022d5f95135f0aade738 (patch)
treee986157f9921aa261a58c8d812f2802cab248310 /src/Subsampling/include/gudhi/choose_n_farthest_points.h
parentd33eaa80b7c337fde11bb5db60df79fbc81fb483 (diff)
parentad5d38986542715e0a0518537afaadcda71d9c49 (diff)
merge master and resolve conflicts
Diffstat (limited to 'src/Subsampling/include/gudhi/choose_n_farthest_points.h')
-rw-r--r--src/Subsampling/include/gudhi/choose_n_farthest_points.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/Subsampling/include/gudhi/choose_n_farthest_points.h b/src/Subsampling/include/gudhi/choose_n_farthest_points.h
index 66421a69..b70af8a0 100644
--- a/src/Subsampling/include/gudhi/choose_n_farthest_points.h
+++ b/src/Subsampling/include/gudhi/choose_n_farthest_points.h
@@ -48,7 +48,8 @@ enum : std::size_t {
* \tparam PointOutputIterator Output iterator whose value type is Kernel::Point_d.
* \tparam DistanceOutputIterator Output iterator for distances.
* \details It chooses `final_size` points from a random access range
- * `input_pts` and outputs them in the output iterator `output_it`. It also
+ * `input_pts` (or the number of distinct points if `final_size` is larger)
+ * and outputs them in the output iterator `output_it`. It also
* outputs the distance from each of those points to the set of previous
* points in `dist_it`.
* @param[in] k A kernel object.
@@ -99,7 +100,7 @@ void choose_n_farthest_points(Kernel const &k,
*dist_it++ = dist_to_L[curr_max_w];
std::size_t i = 0;
for (auto&& p : input_pts) {
- double curr_dist = sqdist(p, *(std::begin(input_pts) + curr_max_w));
+ double curr_dist = sqdist(p, input_pts[curr_max_w]);
if (curr_dist < dist_to_L[i])
dist_to_L[i] = curr_dist;
++i;
@@ -111,6 +112,8 @@ void choose_n_farthest_points(Kernel const &k,
curr_max_dist = dist_to_L[i];
curr_max_w = i;
}
+ // If all that remains are duplicates of points already taken, stop.
+ if (curr_max_dist == 0) break;
}
}