#median #accumulator #generic #space-efficient #algorithm #computing #samples

no-std median-accumulator

简单、快速、空间高效的泛型累积器,用于计算中位数

3个版本 (破坏性)

0.4.0 2024年3月15日
0.2.0 2023年4月14日
0.1.0 2022年9月20日

#384 in 算法

AGPL-3.0-only

17KB
217

中位数累积器

简单、空间高效的计算元素累积中位数的算法。

  • 单推模式(没有运行窗口)
  • 中位数在每次推送时更新(获取中位数始终是 O(1)
  • 空间高效O(D) 空间,D为不同样本的数量,而不是样本的 总数
  • 时间高效:推送是 O(log(N))
  • 泛型T: Clone + Ord
  • 无安全风险
  • no_std(可选):支持泛型集合

如果有很多样本值相同,则比其他实现更快。如果不是这种情况,您应该使用其他实现。

使用

use median_accumulator::*;

let mut acc = vec::MedianAcc::new();

assert_eq!(acc.get_median(), None);
acc.push(7);
assert_eq!(acc.get_median(), Some(MedianResult::One(7)));
acc.push(5);
assert_eq!(acc.get_median(), Some(MedianResult::Two(5, 7)));
acc.push(7);
assert_eq!(acc.get_median(), Some(MedianResult::One(7)));

如果您遇到 unreachable panic,请提交问题或发送电子邮件给我。

no_std

示例(需要 smallvec 功能)

use median_accumulator::*;

let mut acc = MedianAcc::<i32, smallvec::SmallVec<[(i32, u32); 64]>>::new();

对于 VecSmallVec 之外的其他集合,您必须实现 cc-traitsInsertIndex

许可证

版权所有 2022-2024 Pascal Engélibert (为什么是版权所有?)

本程序是自由软件:您可以按照自由软件基金会发布的GNU Affero通用公共许可证的条款重新分发和/或修改它,许可证版本为3。

本程序以希望对您有用的方式分发,但没有任何保证;甚至没有关于适销性或适用于特定目的的隐含保证。有关详细信息,请参阅GNU Affero通用公共许可证。

您应该已收到GNU Affero通用公共许可证的副本。如果没有,请参阅 https://www.gnu.org/licenses/

依赖项

~79KB