【发布时间】:2010-11-17 14:17:18
【问题描述】:
在文本文件中查找字符串的最快方法是什么?案例场景:在列出大约 50000 个文件路径的文本文件中查找特定路径(每个路径都有自己的行)。
【问题讨论】:
标签: c++ algorithm text find path
在文本文件中查找字符串的最快方法是什么?案例场景:在列出大约 50000 个文件路径的文本文件中查找特定路径(每个路径都有自己的行)。
【问题讨论】:
标签: c++ algorithm text find path
该大小的文件应该很容易放入内存中,您可以将其放入 std::set(或者更好的 hashset,如果您手头有一个库),并将路径作为其项目。检查是否有确切的路径将会非常快。
如果您还需要查找子路径,排序的 std::vector (如果您只查找前缀)可能是唯一有用的方法 - 或者如果您正在寻找完全通用的子字符串路径,那么您无论如何都需要扫描所有向量,但除非您必须这样做无数次,否则即使这样也不会太糟糕。
【讨论】:
std: 前缀。一口气读取几个 100 KB 在经验上比您建议的混合 I/O 和 CPU 工作更快(至少在具有良好 FS、磁盘缓存、预读等的多任务系统上)——今天磁盘 I/O 的成本查找比线性读取(100KB
你必须在文件中找到一个字符串,在多个文件中重复查找相同的字符串,在同一个文件中查找多个字符串吗?
根据场景,您有几个可能的答案。
如果您必须在同一个文件中查找多个字符串,则构建数据结构(如 Alex 提出的集合)非常有用
如果您必须搜索一个字符串,使用像 Boyer-Moore 这样的算法是有效的
如果您必须搜索多个字符串,使用正则表达式引擎可能会更好。
【讨论】:
这是正则表达式的领域;你应该看看 grep 和 awk。
【讨论】:
我不确定您希望在多大程度上使用搜索,但 FSM 是不错的选择。
这里是讨论:Short example of regular expression converted to a state machine?
【讨论】: