- 主题:求问一个实际工作中遇到的算法问题【multiple set match】
众所周知,多模式串的匹配,用AC自动机即可。遇到一个多集合匹配的问题,例子:
pattern1:{1,2,3}
pattern2:{4,5,7}
pattern3:{3,6,9}
text:{1,2,3,4,6,9},能够匹配pattern1、pattern3
patterns是静态的;一个简单的在线算法是:对于每个text输入,遍历patterns逐个匹配,但这样随着patterns的增多,匹配越来越慢。已知text的长度远小于pattern的个数,有没有一种比遍历patterns更优的算法?
--
修改:shortytall FROM 111.207.198.*
FROM 111.207.198.*
如果pattern和text都足够简单,可以先求“逻辑与”,然后统计1的数量。
--
FROM 114.254.10.*
这是一个典型的可以用多线程来提速的场景,你用16核,就能提速近16倍
BLOOM FILTER 或者一些算法也许可以帮忙,先把肯定不匹配的去掉,余下的再比
--
FROM 52.9.227.*
把patterns按树排序。把每个输入元素从根开始查找树,如果有匹配的叶子,则进入叶子,如果叶子为终端则匹配。
【 在 shortytall 的大作中提到: 】
:
: 众所周知,多模式串的匹配,用AC自动机即可。遇到一个多集合匹配的问题,例子:
:
: pattern1:{1,2,3}
: pattern2:{4,5,7}
#发自zSMTH@如有雷同 纯属巧合
--
FROM 223.72.82.*
如果pattern仅仅是数字,可以转换为逻辑与表达式运算。
如果pattern是字符串的子串匹配,可以转为正则表达式,试试hyper scan,比自己写的ac自动机快。
【 在 shortytall (shortytall) 的大作中提到: 】
: 众所周知,多模式串的匹配,用AC自动机即可。遇到一个多集合匹配的问题,例子:
:
: pattern1:{1,2,3}
: pattern2:{4,5,7}
--
FROM 111.197.233.*
Trie?
你这不就跟典型的敏感词检测一样么
【 在 shortytall 的大作中提到: 】
: 众所周知,多模式串的匹配,用AC自动机即可。遇到一个多集合匹配的问题,例子:
: pattern1:{1,2,3}
: pattern2:{4,5,7}
: ...................
--
FROM 220.181.41.*
多级匹配。
先对每个pattern 进行hash ,映射到一个整数。
然后对目标字符串也进行hash ,得到结果。
先 hash 值匹配再字符串匹配。
【 在 shortytall 的大作中提到: 】
: 众所周知,多模式串的匹配,用AC自动机即可。遇到一个多集合匹配的问题,例子:
: pattern1:{1,2,3}
: pattern2:{4,5,7}
: ...................
--
FROM 36.113.194.*
水木的水平。。。。。。
倒排列表
【 在 shortytall 的大作中提到: 】
: 众所周知,多模式串的匹配,用AC自动机即可。遇到一个多集合匹配的问题,例子:
: pattern1:{1,2,3}
: pattern2:{4,5,7}
: ...................
--
FROM 108.35.10.*
bitmap可以么
【 在 shortytall 的大作中提到: 】
: 众所周知,多模式串的匹配,用AC自动机即可。遇到一个多集合匹配的问题,例子:
:
: pattern1:{1,2,3}
: pattern2:{4,5,7}
: pattern3:{3,6,9}
:
: text:{1,2,3,4,6,9},能够匹配pattern1、patt
: ..................
发自「今日水木 on 22041216C」
--
FROM 101.82.79.*