#permutation #permutations #permute

but-what-about

为 Rust 设计的排列组合计算库

1 个不稳定版本

0.1.0 2021年6月27日

#2112算法

MIT 许可证

14KB
258

but-what-about

该库是一个排列工具,仅支持 Heap 的算法。目前它可以排列字符串(通过图形和代码点——尽管,基于代码点的排列目前非常有疑问)和原始数值类型通过它们的位。将来我计划添加对其他排列算法的支持,并实现一些组合算法。目前我不能推荐使用此库进行任何事情,除了娱乐。所以,去享受乐趣吧。

use heap_permute::PermuteIter;
// Print all of the permutations of a string of three characters
fn main() {
    const STRING: &'static str = "ABC";
    for p in PermuteIter::from(STRING) {
        print!("{}, ", p);
    }
}
// Prints: 
// ABC, BAC, CAB, ACB, BCA, CBA,

lib.rs:

该库基本上只是一个排列工具。目标是速度和尽可能小的运行时内存影响。因此,该库的目标是尽快计算出并获取一个值的排列。

示例

获取三个字符字符串的所有排列

use heap_permute::PermuteIter;

// Print all of the permutations of a string of three characters
fn main() {
    const STRING: &'static str = "ABC";

    for p in PermuteIter::from(STRING) {
        println!("{}", p);
    }
}
// Prints: 
// ABC
// BAC
// CAB
// ACB
// BCA
// CBA

现在来做点更有趣的事情,让我们排列 u8 中的位

use heap_permute::PermuteIter;

fn main() {
    for p in PermuteIter::from(0b1010_1001 as u8) {
        println!("0b{:08b} ({})", p, p);
    }
}
// Prints:
// 0b10101001 (169)
// 0b10101010 (170)
// 0b10101010 (170)
// 0b10101001 (169)
// 0b10101100 (172)
// 0b10101100 (172)
// 0b10100101 (165)
// 0b10100110 (166)
// 0b10100011 (163)
// 0b10100011 (163)
// ...

事实上,该库支持所有原始数值 Rust 类型的排列。

依赖项

~140KB