Crates.io | sliding_extrema |
lib.rs | sliding_extrema |
version | 0.2.0 |
source | src |
created_at | 2018-04-06 21:37:52.941258 |
updated_at | 2023-11-19 12:15:53.731214 |
description | Queue data structure with support for an O(1) extrema function over contents (for example, to obtain min and max over a sliding window of samples) |
homepage | |
repository | |
max_upload_size | |
id | 59337 |
size | 12,862 |
This is a simple implementation of the algorithm described by 'adamax' at:
It implements a Queue with push and pop, with FIFO semantics, and a get_extrema() method, all with amortized O(1) time complexity.
The get_extrema method returns the extrema of all items in the queue, using a user-supplied metric. Examples of extrema-functions are max, min, but not 'average' or 'mean'.
This structure can be used to implement a super-efficient max/min function for a sliding window of many samples.
Simple example:
extern crate sliding_extrema;
let mut queue = sliding_extrema::sliding_max();
queue.push(42);
queue.push(15);
queue.push(8);
assert_eq!(queue.get_extrema().unwrap(),42);
queue.pop();
assert_eq!(queue.get_extrema().unwrap(),15);
See docs and test for more advanced examples.
The structure is covered by an automatic fuzz-test, that should provide 100% test coverage.