#classification #dissimilarity-space #mmodule #seriation #divide-and-conquer

robinson_mmodules

这个crate是MIKHAEL CARMONA、VICTOR CHEPOI、GUYSLAIN NAVES和PASCAL PREA在《ROBINSON SPACES中的MODULES》中提出的算法的直接实现。它可以确定一个给定的方阵是否在O(n²)内具有兼容的顺序。如果至少有一个,这个crate将提供与一个兼容顺序相对应的排列。

1个不稳定版本

0.1.3 2023年7月7日
0.1.2 2023年7月6日
0.1.1 2023年7月6日
0.1.0 2023年7月6日

算法中排名#1134

每月下载量26

MIT协议

22KB
422行代码(不包括注释)

Robinson

这个Rust crate是MIKHAEL CARMONA、VICTOR CHEPOI、GUYSLAIN NAVES和PASCAL PREA在《ROBINSON SPACES中的MODULES》中提出的算法的直接实现。

给定一个差异空间(~我称之为距离矩阵),此算法可以识别此差异空间是否为Robinson。

作者

安装/依赖

您可以使用以下方式将robinson_mmodules添加到您的依赖中:

cargo add robinson_mmodules

在您的项目目录中。

或者在您的cargo.toml文件中直接将Robinson添加到依赖中

[dependencies]
robinson_mmodules = "0.X.0"

使用/示例

extern crate robinson_mmodules;
use robinson_mmodules::Robin;

fn main() {
    let my_matrice = vec![
        vec![0, 1, 2, 4, 3],
        vec![0, 0, 1, 3, 1],
        vec![0, 0, 0, 2, 1],
        vec![0, 0, 0, 0, 2],
        vec![0, 0, 0, 0, 0],
    ];
    let mut robin = Robin::new(my_matrice);

    println!("{}", robin.resolve_robin()); //true if your matrice admit a compatible order (equivalent to if your dissimilarity space is Robinson), false otherwise. In this case, it's true.
    println!("{:?}", robin.solved_permut.clone().unwrap()); //[1, 2, 3, 5, 4] which is a valid permutation
    //That means that if we apply this permutation we will get a matrice that respect the Robinson property
    let robinson_distance_matrice = robin.dist.permut_matrice(&robin.solved_permut.unwrap());
    println!("{}", robinson_distance_matrice.is_robinson()); //True since this DistanceMatrice respect the Robinson property here
    robinson_distance_matrice.display_mat(); //As you can visualize here
}

您还可以在GitHub仓库的main.rs和test.rs文件中找到更深入的示例。如果您想亲自尝试,您需要将rand crate添加到您的依赖中 rand = "0.8.5"

文档

文档

许可证

MIT

依赖

~120KB