You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
#ifndef LIGHTNING_COMMON_RANDOM_SELECT_H
|
|
|
|
#define LIGHTNING_COMMON_RANDOM_SELECT_H
|
|
|
|
#include "config.h"
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
|
|
|
/* Use weighted reservoir sampling, see:
|
|
|
|
* https://en.wikipedia.org/wiki/Reservoir_sampling#Algorithm_A-Chao
|
|
|
|
* But (currently) the result will consist of only one sample (k=1)
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* random_select: return true if we should select this one.
|
|
|
|
* @weight: weight for this option (use 1.0 if all the same)
|
|
|
|
* @tot_weight: returns with sum of weights (must be initialized to zero)
|
|
|
|
*
|
|
|
|
* This always returns true on the first non-zero weight, and weighted
|
|
|
|
* randomly from then on.
|
|
|
|
*/
|
|
|
|
bool random_select(double weight, double *tot_weight);
|
|
|
|
#endif /* LIGHTNING_COMMON_RANDOM_SELECT_H */
|