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
Callbacks
@callback options() :: keyword()
Optionally provide the opts kwli
@callback preprocess(probabilities :: [{probability(), index()}], opts()) :: table()
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.