#string-search #string #search-pattern #search #pattern #substring #linear-time

不使用std galil-seiferas

在非可排序字母表中,常数空间、线性时间的一般字符串搜索,也称为精确字符串匹配。

6个版本

使用旧Rust 2015

0.1.5 2017年11月25日
0.1.4 2017年11月21日

#12 in #linear-time

Download history 547/week @ 2024-04-08 1997/week @ 2024-04-15 2208/week @ 2024-04-22 1326/week @ 2024-04-29 1154/week @ 2024-05-06 1592/week @ 2024-05-13 1187/week @ 2024-05-20 1524/week @ 2024-05-27 1568/week @ 2024-06-03 1420/week @ 2024-06-10 1016/week @ 2024-06-17 1765/week @ 2024-06-24 2075/week @ 2024-07-01 1405/week @ 2024-07-08 1292/week @ 2024-07-15 1769/week @ 2024-07-22

6,800 每月下载量
3 crates 中使用

MIT/Apache

38KB
714

在非可排序字母表中,常数空间、线性时间的一般字符串搜索。也称为精确字符串匹配。

在Rust术语中,这意味着我们可以定义以下函数

fn gs_find<T: Eq>(text: &[T], pattern: &[T]) -> Option<usize> {
    // ...
}

该函数以 O(n) 的时间和 O(1) 的空间进行计算。在最坏的情况下,此算法需要进行 4n 次字符比较。

请注意,如果字母表有线性顺序,Crochemore-Perrin(“双向”算法)要优越得多。

本作品的版权所有者是Ulrik Sverdrup "bluss",请参阅包中的许可条款。

参考文献

这两篇论文都值得阅读。此crate实现中的注释也旨在解释和指出重要细节,因此也推荐阅读。

  • [GS] Z. Galil和J. Seiferas,《时间-空间最优字符串匹配》,计算机与系统科学杂志(1983年)
  • [CR] M. Crochemore和W. Rytter,《平方、立方和时间-空间高效的字符串搜索》,算法(1995年)

依赖关系

~23KB