#queue #min-max #sliding-window #structure #samples #extrema

sliding_extrema

支持 O(1) 极值函数的队列数据结构(例如,获取样本滑动窗口的最小值和最大值)

6 个版本

使用旧的 Rust 2015

0.2.0 2023年11月19日
0.1.4 2019年8月20日
0.1.2 2018年4月9日

#924数据结构

每月48次 下载

MIT/Apache

13KB
222

这是 'adamax' 在以下网址描述的算法的简单实现:

https://stackoverflow.com/questions/4802038/implement-a-queue-in-which-push-rear-pop-front-and-get-min-are-all-consta

它实现了一个具有推送、弹出和 FIFO 语义的队列,以及一个 get_extrema() 方法,所有这些都具有摊销 O(1) 的时间复杂度。

get_extrema 方法使用用户提供的度量返回队列中所有项的极值。极值函数的示例包括 max、min,但不包括 'average' 或 'mean'。

此结构可以用来实现一个用于许多样本滑动窗口的超高效的最大/最小函数。

简单示例

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);

请参阅文档和测试以获取更多高级示例。

此结构由自动模糊测试覆盖,应提供 100% 的测试覆盖率。

无运行时依赖项