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