1 个不稳定版本

0.1.0 2021年2月3日

#1545数据结构

MIT/Apache

33KB
471

perm-vec

Crates.io docs.rs Build Status

提供了一种Perm类型,用于排列数据向量。

[dependencies]
perm-vec = "0.1"

在编程中,处理包含某些东西重新排序索引的数组是一个非常常见的做法。(例如,按某个字段排序数组的索引,或将其更改为匹配某些不同的排序约定)。虽然这通常是以完全随意的的方式进行,但这些索引实际上满足了许多经常被忽视的数学属性,这使得对它们进行推理变得容易得多。

Perm是一个实现了许多这些属性的类型。

use perm_vec::{Perm, Permute};

fn main() {
    // The vec that permutes "abcd" into "bcda".
    let perm_shl = Perm::from_vec(vec![1, 2, 3, 0]).unwrap();
    assert_eq!(vec![0, 10, 20, 30].permuted_by(&perm_shl), vec![10, 20, 30, 0]);
    
    // The permutation that reverses a vector
    let perm_rev = Perm::from_vec((0..4).rev().collect()).unwrap();
    assert_eq!(vec![0, 10, 20, 30].permuted_by(&perm_rev), vec![30, 20, 10, 0]);
    
    // Let's compose them!
    let perm_comp_1 = perm_shl.then(&perm_rev);  // this one shifts, then reverses
    let perm_comp_2 = perm_rev.then(&perm_shl);  // this one reverses, then shifts
    assert_eq!(vec![0, 10, 20, 30].permuted_by(&perm_comp_1), vec![0, 30, 20, 10]);
    assert_eq!(vec![0, 10, 20, 30].permuted_by(&perm_comp_2), vec![20, 10, 0, 30]);
}

提供了一些计算方法,例如

  • 排列的逆元素。
  • 排列的整数幂。
  • 直接和。
  • 直接积。

许可协议

在Apache License,版本2.0 http://www.apache.org/licenses/LICENSE-2.0 或MIT许可 http://opensource.org/licenses/MIT 下授权,任选其一。此文件不得根据这些条款复制、修改或分发。

更新日志

依赖项

~315–540KB