2 个不稳定版本

0.2.0 2021年2月3日
0.1.0 2021年2月2日

#1419算法

Apache-2.0/MIT

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

PermDPermS 都表示排列,除了 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_byfrom_sort_by_keyfrom_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