An open API service indexing awesome lists of open source software.

https://github.com/eugeny/infinity-sampler

Deterministic reservoir sampling for Rust
https://github.com/eugeny/infinity-sampler

Last synced: about 1 month ago
JSON representation

Deterministic reservoir sampling for Rust

Awesome Lists containing this project

README

        

# Infinity Sampler

✨ Allocation free ✨ Minimal dependencies ✨ `no_std` compatible ✨

The Infinity Sampler lets you automatically sample an infinite stream of values into a fixed size buffer, while keeping an even spread of samples.

It's a deterministic variation of the [Reservoir Sampling](https://en.wikipedia.org/wiki/Reservoir_sampling) algorithm. Writes are *O(1)*, iteration is *O(N)*. See [math] for an illustrated explainer.

Your primary interface is the [SamplingReservoir] struct:

```
use infinity_sampler::SamplingReservoir;

let mut reservoir = SamplingReservoir::::new();
for i in 0..256 {
reservoir.sample(i);
}
let samples: Vec<_> = reservoir.into_ordered_iter().collect();

assert_eq!(samples, vec![0, 32, 64, 96, 128, 160, 192, 224]);
```