9#ifndef __SAMPLING_POLICY_H_INCLUDED__
10#define __SAMPLING_POLICY_H_INCLUDED__
12#include "editor_policy.hpp"
13#include "filter_policy.hpp"
24namespace occupancy_spectrum
26namespace sampling_policy
34template <
class FilterPolicy = filter_policy::return_always_true,
class EditorPolicy = editor_policy::
identity>
46 template <
typename Generator>
static auto const &
sample(
int k,
int N, Generator &g)
50 return memoize::memoize<FilterPolicy, EditorPolicy>(k, N)(g);
67 template <
typename Generator>
static auto sample(
int k,
int N, Generator &g)
71 std::vector<int> M_j(k + 1);
72 std::vector<int> parents(N);
74 std::uniform_int_distribution<int> distribution(0, N - 1);
75 for (
int i = 1; i <= k; ++i)
77 parents[distribution(g)] += 1;
80 for (
int it : parents)
84 assert(M_j.size() == k + 1);
An occupancy spectrum as defined in Becheler & Knowles, 2020.
Definition OccupancySpectrum.hpp:42
Simulation of coalescence-based models of molecular evolution.
Definition coalescence.hpp:21
Sample occupancy spectrums from a pre-computed ProbabilityDistribution object.
Definition sampling_policy.hpp:36
static auto const & sample(int k, int N, Generator &g)
Sample an occupancy spectrum.
Definition sampling_policy.hpp:46
Sample occupancy spectrums by simulating a ball to urn assignment random experiment.
Definition sampling_policy.hpp:57
static auto sample(int k, int N, Generator &g)
Sample an occupancy spectrum.
Definition sampling_policy.hpp:67