*匹配问题

Non_Recursive 2011-11-27 10:16:57
有大量的已知的串, 有些串是带通配符的, 如 affc* 或 abc*.txt 或 *.txt
假设有类似这样的串几千条, 有什么快速的算法知道某一个字符串是否匹配已知串, 如 abccccccc.txt 可以匹配到
abc*.txt, 匹配到即返回了。
...全文
246 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
oo 2011-11-29
  • 打赏
  • 举报
回复
如果模式串里只有一个‘*’,转DFA还是不算太难
如果‘*’很多的话就比较麻烦
白米若雪 2011-11-29
  • 打赏
  • 举报
回复
如果只有几千条可以把这几千条做成一个大的状态机,比如"abc*.txt" | "def*.txt" | "ghi*.txt" ... ,要注意的是状态机的'*'号和通配符'*'是有不同意义的。但是采用这么大的状态机,效率不会好到哪去,但是如果有一些已知条件,可以大大简化状态机。

如果已知字符串有共同同缀什么的,可以采用TST。如果有共同后缀,可以采用后缀树什么的,都是一种状态机的化简。建立状态机时,把'*'号去掉,并在前一个字串对应的节点把loop标志位设为true。搜索时可以按图的算法搜索,搜索的复杂度与状态机的大小成正比。
codesnail 2011-11-28
  • 打赏
  • 举报
回复
用脚本用正则库。

状态机太底层了,而且不容易理解,c/C++也有正则库的。
wangqs1988 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hnlgdxyjs 的回复:]

DFS 是深度优先搜索
DFA 是有限状态确定自动机, 你写错了。

如果用 DFA, 能不能把DFA生成过程及匹配过程大概描述下?
[/Quote]
可以用二维数组,第1维是状态的标号,第2维是一个表,表示字符及对应的去向
turing-complete 2011-11-28
  • 打赏
  • 举报
回复
几千条?

必须顺序查找!
lmc158 2011-11-28
  • 打赏
  • 举报
回复
把abc*.txt做成DFS(有限状态确定自动机),看abccccc.txt是否在DFS中能到达终点
HNLGDXYJS 2011-11-28
  • 打赏
  • 举报
回复
DFS 是深度优先搜索
DFA 是有限状态确定自动机, 你写错了。

如果用 DFA, 能不能把DFA生成过程及匹配过程大概描述下?
wangqs1988 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 non_recursive 的回复:]

有没有认真一点的回复?
4 楼为什么确定要顺序遍历, 这应该是最差的做法。
5 楼的也看不明白。
6 楼的用脚本明显不行, 性能太差。

DFA 应该能搞定这个问题的, 请问有没有熟悉DFA的, 大概讲下流程就行, 我只需要支持 *, 不用?之类的。
谢谢。
[/Quote]

就是这样对待回复的吗,5楼已经说得很清楚了,还不明白请百科DFA
turing-complete 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 non_recursive 的回复:]

有没有认真一点的回复?
4 楼为什么确定要顺序遍历, 这应该是最差的做法。
5 楼的也看不明白。
6 楼的用脚本明显不行, 性能太差。

DFA 应该能搞定这个问题的, 请问有没有熟悉DFA的, 大概讲下流程就行, 我只需要支持 *, 不用?之类的。
谢谢。
[/Quote]

一千个无序字符串,除了顺序查找,你能告诉我还有什么方法更快吗?
再快也要把所有字符串遍历一下,看看能不能找到,如果是有序的那就不一样了,可以用折半查找。

如果你的情况是,要在这些字符串上进行频繁查找,那么排序一下或者重新组织一下数据结构是值得的。
Non_Recursive 2011-11-28
  • 打赏
  • 举报
回复
有没有认真一点的回复?
4 楼为什么确定要顺序遍历, 这应该是最差的做法。
5 楼的也看不明白。
6 楼的用脚本明显不行, 性能太差。

DFA 应该能搞定这个问题的, 请问有没有熟悉DFA的, 大概讲下流程就行, 我只需要支持 *, 不用?之类的。
谢谢。
wangqs1988 2011-11-28
  • 打赏
  • 举报
回复
把abc*.txt做成DFS(有限状态确定自动机),看abccccc.txt是否在DFS中能到达终点

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧