#后缀数组 #并行 #saca

bin+lib psacak

用于多核机器上内存大数据的 pSACAK 后缀排序算法

1 个不稳定版本

0.1.0 2020年4月22日

#12 in #后缀数组

每月 24 次下载

MIT 许可证

110KB
3K SLoC

pSACAK

crates docs

在多核机器上对内存大数据实现 pSACAK 后缀排序算法,如本论文所述。


lib.rs:

多核机器上内存大数据的 pSACAK 后缀排序算法。

该算法在本论文中进行了描述。

示例

创建新的后缀数组。

use psacak::psacak;

let text = b"mississippi";
let suf = psacak(text);

assert_eq!(suf, vec![10, 7, 4, 1, 0, 9, 8, 6, 3, 5, 2]);

在切片中计算后缀数组。

use psacak::psacak_inplace;

let text = b"mississippi";
let mut suf = vec![0; text.len()];
psacak_inplace(text, &mut suf[..]);

assert_eq!(suf, vec![10, 7, 4, 1, 0, 9, 8, 6, 3, 5, 2]);

请注意,pSACAK 计算的后缀数组中未显示哨兵的位置。

要获取包含哨兵位置的后缀数组,您可以尝试这样做

use psacak::psacak_inplace;

let text = b"mississippi";
let mut suf = vec![0; text.len() + 1];
suf[0] = text.len() as u32;
psacak_inplace(text, &mut suf[1..]);

assert_eq!(suf, vec![11, 10, 7, 4, 1, 0, 9, 8, 6, 3, 5, 2]);

依赖项

~1.5MB
~28K SLoC