42 : num_samples_(num_samples),
43 total_num_samples_(0),
50 CHECK_LE(num_samples_, total_num_samples);
51 total_num_samples_ = total_num_samples;
58 const size_t kNumProgressiveIterations = 200000;
61 T_n_ = kNumProgressiveIterations;
63 for (
size_t i = 0; i < num_samples_; ++i) {
64 T_n_ *=
static_cast<double>(num_samples_ - i) / (total_num_samples_ - i);
69 return std::numeric_limits<size_t>::max();
76 if (t_ == T_n_p_ && n_ < total_num_samples_) {
77 const double T_n_plus_1 = T_n_ * (n_ + 1.0) / (n_ + 1.0 - num_samples_);
85 size_t num_random_samples = num_samples_;
86 size_t max_random_sample_idx = n_ - 1;
88 num_random_samples -= 1;
89 max_random_sample_idx -= 1;
93 std::vector<size_t> sampled_idxs;
94 sampled_idxs.reserve(num_samples_);
95 for (
size_t i = 0; i < num_random_samples; ++i) {
97 const size_t random_idx =
98 RandomInteger<uint32_t>(0, max_random_sample_idx);
100 sampled_idxs.push_back(random_idx);
108 sampled_idxs.push_back(n_);
void Initialize(const size_t total_num_samples) override
std::vector< size_t > Sample() override
size_t MaxNumSamples() override
ProgressiveSampler(const size_t num_samples)
MiniVec< float, N > ceil(const MiniVec< float, N > &a)
bool VectorContainsValue(const std::vector< T > &vector, const T value)