#order-statistics #median-of-medians #partial-sort

order-stat

通过 Floyd-Rivest 算法高效计算顺序统计量,并通过中位数中值算法估计中位数

3 个版本

使用旧 Rust 2015

0.1.3 2016年4月23日
0.1.2 2015年4月26日
0.1.1 2015年4月25日
0.1.0 2015年4月24日

算法 中排名 #788

Download history 19896/week @ 2024-02-26 11265/week @ 2024-03-04 10920/week @ 2024-03-11 8538/week @ 2024-03-18 11646/week @ 2024-03-25 8665/week @ 2024-04-01 13303/week @ 2024-04-08 19949/week @ 2024-04-15 22491/week @ 2024-04-22 23483/week @ 2024-04-29 18412/week @ 2024-05-06 24871/week @ 2024-05-13 14657/week @ 2024-05-20 18699/week @ 2024-05-27 25564/week @ 2024-06-03 26642/week @ 2024-06-10

每月下载量 86,306
用于 39 个 crate (10 个直接使用)

MIT/Apache

20KB
345

order-stat

Build Status

计算顺序统计量和中位数中值。

文档crates.io


lib.rs:

计算顺序统计量。

这个 crate 允许在 (期望) 线性时间内计算第 k 小的元素,并通过中位数中值算法估计中位数元素。

来源

安装

确保你的 Cargo.toml 包含

[dependencies]
order-stat = "0.1"

示例

kth 函数允许计算 Ord 类型切片的顺序统计量。

let mut v = [4, 1, 3, 2, 0];

println!("the 2nd smallest element is {}", // 1
         order_stat::kth(&mut v, 1));

kth_by 函数接受一个任意闭包,用于浮点数和更一般比较的切片的顺序统计量。

let mut v = [4.0, 1.0, 3.0, 2.0, 0.0];

println!("the 3rd smallest element is {}", // 2
         order_stat::kth_by(&mut v, 2, |x, y| x.partial_cmp(y).unwrap()));
#[derive(Debug)]
struct Foo(i32);

let mut v = [Foo(4), Foo(1), Foo(3), Foo(2), Foo(0)];

println!("the element with the 4th smallest field is {:?}", // Foo(3)
         order_stat::kth_by(&mut v, 3, |x, y| x.0.cmp(&y.0)));

median_of_medians 函数给出了 Ord 类型切片的中位数的近似值。

let mut v = [4, 1, 3, 2, 0];

println!("{} is close to the median",
         order_stat::median_of_medians(&mut v).1);

它还有一个 median_of_medians_by 变体,用于处理非 Ord 类型以及更一般的比较。

let mut v = [4.0, 1.0, 3.0, 2.0, 0.0];

println!("{} is close to the median",
        order_stat::median_of_medians_by(&mut v, |x, y| x.partial_cmp(y).unwrap()).1);
#[derive(Debug)]
struct Foo(i32);

let mut v = [Foo(4), Foo(1), Foo(3), Foo(2), Foo(0)];

println!("{:?}'s field is close to the median of the fields",
        order_stat::median_of_medians_by(&mut v, |x, y| x.0.cmp(&y.0)).1);

无运行时依赖