1 #ifndef UTILS_FAST_SAMPLER_H 2 #define UTILS_FAST_SAMPLER_H 10 FastSampler(
const std::vector<double>& probabilities) {
11 sump.resize(probabilities.size());
13 for(
size_t i=0;i<probabilities.size();i++) {
14 sum += probabilities[i];
20 int Sample(RNG& rng)
const {
21 double val = rng.randDouble(sump.back());
25 inline int Pick(
double val)
const {
26 std::vector<double>::const_iterator i=std::upper_bound(sump.begin(),sump.end(),val);
27 return (i-sump.begin())-1;
31 std::vector<double> sump;
Samples from a weighted discrete set in O(log(n)) time after an O(n) initialization.
Definition: FastSampler.h:8