我有一个30MB的.txt文件,其中包含以下随机字符串:
416
abcd23
cd542
banana
bambam
每行有1个单词,单词之间用换行隔开
我需要在文件中搜索我选择的子字符串,并返回文件中每个匹配的字符串。为了更清楚:
Input: cd
Output: abcd23, cd542
通用后缀树,后缀树或后缀数组是否适合此类问题,还是有更快的方法? (时间复杂度很重要)
p.s。我的编程技巧有点粗略,因此请赞赏任何示例
答案 0 :(得分:3)
假定您在文件中找到包含一个字符串的字符串,那么最快的方法就是简单地遍历文件并按如下所示在每一行中检查字符串函数“ in”或“ find”。
def find_matches(filename, txt):
with open(filename, 'r') as f:
return [line for line in f if txt in line] # using 'in'
示例用法:
matches = find_matches('myfile.txt', 'cd')
只需读取文件,就避免了构造其他方法(如Pandas -读取文件的Pandas one of the slower methods)的字段的开销。另外:What is the fastest way to search a CSV file。
使用in或find的字符串方法基本上依赖于在C中实现的优化fastsearch,其每次字符串搜索的效率为:
该实现似乎在最坏的情况下为O(N * M)(与 天真的方法),但在某些情况下(其中N和M是 分别是字符串和子字符串的长度),以及O(N)在 常见病例