社区
数据结构与算法
帖子详情
*匹配问题
Non_Recursive
2011-11-27 10:16:57
有大量的已知的串, 有些串是带通配符的, 如 affc* 或 abc*.txt 或 *.txt
假设有类似这样的串几千条, 有什么快速的算法知道某一个字符串是否匹配已知串, 如 abccccccc.txt 可以匹配到
abc*.txt, 匹配到即返回了。
...全文
248
11
打赏
收藏
*匹配问题
有大量的已知的串, 有些串是带通配符的, 如 affc* 或 abc*.txt 或 *.txt 假设有类似这样的串几千条, 有什么快速的算法知道某一个字符串是否匹配已知串, 如 abccccccc.txt 可以匹配到 abc*.txt, 匹配到即返回了。
复制链接
扫一扫
分享
转发到动态
举报
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中能到达终点
PDF电子书《柔性字符串
匹配
》
字符串
匹配
是计算机科学中的一个核心
问题
,在文本处理、搜索引擎、生物信息学等多个领域都有着广泛的应用。下面将从不同的角度来深入解读这一主题,并尽可能地扩展相关知识点。 ### 一、字符串
匹配
简介 #### 1.1 ...
匹配
滤波器原理及matlab实现
匹配
滤波器是一种在通信系统和信号处理领域中广泛应用的理论与技术,它主要用于最佳接收机设计,尤其是在噪声环境下的信号检测。...通过学习和掌握
匹配
滤波器,可以为在实际工程
问题
中提高信号检测性能提供有力支持。
正则表达式 30分钟入门
总的来说,正则表达式是一个强大的工具,虽然初学者可能会觉得它复杂,但只要花费时间学习和实践,就能够掌握并利用它来解决实际
问题
。30分钟的入门教程只是一个起点,后续需要通过不断的练习和实际应用来逐渐精通。
自动填充功能实现-- 实例源码
标题中的“自动填充功能实现”通常指的是在软件...对于初学者,这是一个很好的实践机会,可以锻炼他们的编程和
问题
解决能力;对于有经验的开发者,这则是一个查阅和借鉴的好资源,有助于他们在短时间内实现类似功能。
Android 智能问答机器人的实现
4. **
匹配
与查询**:根据
问题
的语义,从知识库或搜索引擎中查找相关信息。 5. **答案生成**:选择最合适的答案,并进行适当的格式化。 6. **反馈呈现**:将答案以易于理解的方式展示给用户。 在Android环境中,我们...
数据结构与算法
33,028
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章