11 releases (4 breaking)

0.5.0 Aug 24, 2023
0.4.0 Aug 21, 2023
0.3.2 Mar 6, 2023
0.3.1 Feb 16, 2023
0.1.0 Feb 2, 2023

#1287 in Algorithms

Download history 146/week @ 2024-09-14 316/week @ 2024-09-21 110/week @ 2024-09-28 275/week @ 2024-10-05 177/week @ 2024-10-12 162/week @ 2024-10-19 145/week @ 2024-10-26 165/week @ 2024-11-02 183/week @ 2024-11-09 223/week @ 2024-11-16 496/week @ 2024-11-23 334/week @ 2024-11-30 252/week @ 2024-12-07 274/week @ 2024-12-14 312/week @ 2024-12-21 323/week @ 2024-12-28

1,180 downloads per month

MIT license

16KB
282 lines

TopK

TopK algorithm implementation in Rust.

This crate currently provides the Filtered Space-Saving algorithm.

Version numbers follow the semver convention.

Example

let mut topk = FilteredSpaceSaving::new(3);
topk.insert("1", 10);
topk.insert("2", 20);
topk.insert("3", 1);
topk.insert("4", 2);
let topk_result = topk.into_sorted_vec();
assert_eq!(topk_result.len(), 3);
assert_eq!(topk_result[0].0, "2");

merging space-saving results is supported:

let mut fss1 = FilteredSpaceSaving::new(3);
fss1.insert("1", 10);
fss1.insert("2", 20);
fss1.insert("3", 2);
fss1.insert("4", 1);
fss1.insert("4", 3);
fss1.insert("5", 3);
let mut fss2 = FilteredSpaceSaving::new(3);
fss2.insert("1", 10);
fss2.insert("2", 20);
fss2.insert("3", 20);
fss2.insert("4", 10);
fss1.merge(&fss2).unwrap();
let result = fss1.into_sorted_vec();
assert_eq!(result[0].0, "2");

lib.rs:

TopK algorithm implementation in Rust.

This crate currently provides the Filtered Space-Saving algorithm.

Version numbers follow the semver convention.

Example

let mut topk = FilteredSpaceSaving::new(3);
topk.insert("1", 10);
topk.insert("2", 20);
topk.insert("3", 1);
topk.insert("4", 2);
let topk_result = topk.into_sorted_vec();
assert_eq!(topk_result.len(), 3);
assert_eq!(topk_result[0].0, "2");

merging space-saving results is supported:

let mut fss1 = FilteredSpaceSaving::new(3);
fss1.insert("1", 10);
fss1.insert("2", 20);
fss1.insert("3", 2);
fss1.insert("4", 1);
fss1.insert("4", 3);
fss1.insert("5", 3);
let mut fss2 = FilteredSpaceSaving::new(3);
fss2.insert("1", 10);
fss2.insert("2", 20);
fss2.insert("3", 20);
fss2.insert("4", 10);
fss1.merge(&fss2).unwrap();
let result = fss1.into_sorted_vec();
assert_eq!(result[0].0, "2");

Dependencies

~2MB
~32K SLoC