通配符匹配
来源:互联网 发布:打谱软件索尼 编辑:程序博客网 时间:2024/05/05 20:37
问题描述:对于一个给定的词典S和一个包含通配符的查询传a*b, 在词典中找出匹配a*b的所有串
1. 词典的结构: 对于匹配类,通常来说树结构是适用的
2. 假设词典是树结构,切通配符在串的最后,即类似ab*这样,我们可以从树的根节点开始,沿着ab向下,找到所有的匹配串
3. 那么对于a*b呢? 我们先考虑*ab的情况,如果我们的词典对每个串按反序也建立一颗树,即串abcd,我们有一颗树是d->c->b->a, 我们可以从这颗树去搜索ba,找到所有匹配的串
4. 因此对a*b这样的匹配, 我们首先对词典进行处理,从正反两个方向建立一颗B树,然后进行查询
时间复杂度仅为o(n)
但是,如果是a*b*c, 这样的查询应该怎样做呢?
首先是查询a*c,然后对查询结果去掉首尾的a,c,检查剩下的中间部分是否包含b
对于匹配还有另外两种做法:
1. 对所有词的排列进行索引,并用$表明词的结尾,例如hello$可以变为llo$he,等等,然后对于查询串h*llo, 我们同样地进行移位,变为llo$h*, 然后进行查找,如果是h*l*lo,同样地,我们先查询lo$h,然后在查询串中去寻找l
2. 对词进行另外的变化,划分为等长的一些段,并用$表示词的开头和结尾,例如hello, 如果词的长度指定为3,则词被分为$he,hel,ell,llo,lo$, 如果查询h*llo, 则我们时间查询$h,llo,lo$,并把查询所得到的词进行合并
第二种方法比第一种方法具有更高的空间效率
- 通配符匹配
- 通配符匹配
- 通配符匹配
- 通配符匹配
- 文件名通配符匹配算法
- 通配符匹配问题
- 通配符匹配---ArjianKenter
- servlet的通配符匹配
- Wildcard Matching 通配符匹配
- AC自动机通配符匹配
- 通配符匹配字符串
- 字符串通配符匹配问题
- bzoj3507 [Cqoi2014]通配符匹配
- Wildcard Matching 通配符匹配
- 字符串通配符匹配*,?算法
- LintCode-通配符匹配
- AC自动机通配符匹配
- bzoj3507【CQOI2014】通配符匹配
- 项目经理12项黄金守则
- VisualSVN Server 1.7.1与Trac的集成
- JDBC连接数据库大全
- SRM 440 DIVII 250中文翻译及源码(C#)
- 用Ajax请求网页的核心方法
- 通配符匹配
- SRM 440 DIVII 500中文翻译及思路(C#)
- 牛人写的日期选择器
- 关于asp.net中dropdownlist控件选中后在次回传页面后还原到默认
- 把自增字段变成普通字段的SQL语句
- 各协议端口号
- C语言学习笔记系列(4)I/O函数
- 编排试场的算法,如何保证前后座考生不是来自同一个学校?
- 禁用所有功能键,鼠标右键等