【问题标题】:Implementing a More Efficient Python Algorithm for Substrings in Lists of Strings为字符串列表中的子字符串实现更高效的 Python 算法
【发布时间】:2015-02-13 09:23:20
【问题描述】:

我正在 Python 中执行以下操作

我遇到一个问题,需要检查输入字符串的大列表(大小为 n),以查看子字符串是否包含大字典(大小为 m)中的任何单词。

我四处寻找有效的算法来解决这个问题,发现了这些: https://github.com/laurentluce/python-algorithms/blob/master/algorithms/string_matching.py

Rabin-Karp 和 KMP 匹配算法。(请注意,为了提高效率,我已将 Rabin-Karp 的 ord() 函数替换为字典)

但是,这些实际上比在 Python 中使用 Boyer-Moore-Horspool 算法的“in”操作要慢。我想这是因为 'in' 调用的 contains() 方法是用 C 实现的。

如何用 Rabin-Karp 为 C 中 Python 中的字符串类覆盖此方法?

【问题讨论】:

    标签: python string algorithm data-structures


    【解决方案1】:

    你可以看看 cython:

    http://docs.cython.org/src/quickstart/cythonize.html

    我发现为特定操作编写一些自定义代码比重写核心 python 结构更容易。

    【讨论】:

    • 当然值得一试 PyPy,它比标准 CPython 提供了显着的加速
    • 感谢更新,我很长时间没有使用 CPython,但快速谷歌搜索显示事情发生了很大变化。 PyPy 似乎是要走的路!
    【解决方案2】:

    你不能,我很抱歉。

    在编译解释器时构建的内置类型无法在运行时修补。如果速度真的如此重要,那么您可能想要编写一个 C 扩展类型,它继承了内置字符串类型,但使用不同的 contains 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2011-10-21
      相关资源
      最近更新 更多