WeightedRandom.Backend offers a contract to all who implement it:
- The main WeightedRandom package presents a novel interface for generating a list of probabilities (floats that can be summed to equal exactly 1.0).
- The custom Backend module decides what to do with those probabilities once they are generated.
Summary
Callbacks
Optionally provide the opts kwli
weights is a list of floats which, if summed, would equal exactly 1.0. Each float represents the probability of being selected in the random sample.
Given the struct returned by preprocess/2, return a list of random indices equal to count.
Types
@type backend_opts() :: [{:probability_type, probability_type()}]
@type index() :: integer()
@type indices() :: [index()]
@type opts() :: keyword()
@type percentage() :: float()
@type probability_type() :: :weights | :probabilities
@type table() :: struct()
@type weight() :: WeightedRandom.Input.Weight.t()
@type weights() :: [weight()]
Callbacks
@callback options() :: keyword()
Optionally provide the opts kwli
weights is a list of floats which, if summed, would equal exactly 1.0. Each float represents the probability of being selected in the random sample.
So if given [0.25, 0.25, 0.5], then index 2 is twice as likely to be sampled as index 1.
This function must return some kind of struct that will later be passed into take/2.
Given the struct returned by preprocess/2, return a list of random indices equal to count.