2 个不稳定版本
0.2.0 | 2021年2月3日 |
---|---|
0.1.0 | 2021年2月2日 |
#1419 在 算法
62KB
1.5K SLoC
rusty-perm
支持 无 std
和编译时检查大小的 Rust 排列
Cargo 功能
要将此包导入到您的项目中,
[dependencies]
rusty-perm = "0.2"
它有以下 cargo 功能。
- std(默认):启用标准库。
- rand(默认):启用排列的随机采样。
要限制包为 无 std
,您可以禁用默认功能。
[dependencies]
rusty-perm = { version = "0.2", default-features = false }
用法
导入此包
要导入此包的成员,
use rusty_perm::{prelude::*, PermD, PermS};
PermD
和 PermS
都表示排列,除了 PermS
在类型签名中具有嵌入式编译时大小。静态大小防止在编译时对错误大小的数组应用排列,并节省一些运行时开销。
恒等排列
可以使用静态或动态大小构造恒等排列。
use rusty_perm::{PermD, PermS};
let perm1 = PermS::<10>::identity();
let perm2 = PermD::identity(10);
通过排序切片和数组构建
可以通过对数组进行排序来提取排列。
use rusty_perm::{prelude::*, PermS};
// `perm` is an operator that maps [9, 6, -1, 4] to [-1, 4, 6, 9].
let perm = PermS::from_sort(&[9, 6, -1, 4]);
// Apply same permutation on another array
let mut array = [1, 2, 3, 4];
perm.apply(&mut array);
assert_eq!(array, [3, 4, 2, 1]);
您可以通过 from_sort_by
、from_sort_by_key
和 from_sort_by_cached_key
使用自定义比较或键函数进行排序。
use rusty_perm::{prelude::*, PermS};
// `perm` is an operator that maps [9, 6, -1, 4] to [9, 6, 4, -1].
let perm = PermS::from_sort_by_key(&[9, 6, -1, 4], |val| -val);
// Apply same permutation on another array
let mut array = [1, 2, 3, 4];
perm.apply(&mut array);
assert_eq!(array, [1, 2, 4, 3]);
通过索引构建
可以通过展示排序索引来构建排列。
use rusty_perm::{prelude::*, PermD};
let perm = PermD::from_indices([2, 0, 1]).unwrap();
let mut array = [-9, -5, 3];
perm.apply(&mut array);
assert_eq!(array, [3, -9, -5]);
逆排列和组合
示例演示了排列的逆排列和组合。
use rusty_perm::{prelude::*, PermD, PermS};
// Construct the permutation, its inverse and compose them
let perm = PermS::from_indices([2, 0, 1]).unwrap();
let inverse = perm.inverse();
let composition = &inverse * &perm;
// Check that composition with its inverse is identity
assert_eq!(PermD::identity(3), composition);
许可证
Apache 2.0 和 MIT 双许可。
依赖项
~305KB