# Module Random_selection

    module Random_selection: sig .. end

reservoir sampling

    type 'a t

a random sample of `'a` values

    val create : ?random_state:Core.Std.Random.State.t -> int -> 'a t

`create ~random_state desired_sample_size` creates an empty sample of `'a` values. The sample will grow no larger than `desired_sample_size` when presented with more values by calling `add`.

    val desired_sample_size : 'a t -> int

the desired sample size

    val maybe_add : 'a t -> 'a -> unit

`maybe_add t x` will randomly either add `x` to `t` or ignore it. If adding `x` would grow the sample larger than `desired_sample_size t`, some previously selected value will be discarded.

    val to_list : 'a t -> 'a list

the current selection from values previously seen by `t`. Of all previously seen values, each subset of size `desired_sample_size t` is equally likely to have been selected.

    val select : ?random_state:Core.Std.Random.State.t ->
           next:(unit -> 'a option) -> int -> 'a list

randomly select a subset of size `sample_size` from a stream of unknown length. Each possible subset is chosen with equal probability.