*匹配有关问题
*匹配问题有大量的已知的串, 有些串是带通配符的, 如affc*或abc*.txt 或 *.txt假设有类似这样的串几千条,
*匹配问题
有大量的已知的串, 有些串是带通配符的, 如 affc* 或 abc*.txt 或 *.txt
假设有类似这样的串几千条, 有什么快速的算法知道某一个字符串是否匹配已知串, 如 abccccccc.txt 可以匹配到
abc*.txt, 匹配到即返回了。
[解决办法]
把abc*.txt做成DFS(有限状态确定自动机),看abccccc.txt是否在DFS中能到达终点
[解决办法]
DFS 是深度优先搜索
DFA 是有限状态确定自动机, 你写错了。
如果用 DFA, 能不能把DFA生成过程及匹配过程大概描述下?
[解决办法]
[解决办法]用脚本用正则库。
状态机太底层了,而且不容易理解,c/C++也有正则库的。
[解决办法][解决办法]如果模式串里只有一个‘*’,转DFA还是不算太难
如果‘*’很多的话就比较麻烦
[解决办法]如果只有几千条可以把这几千条做成一个大的状态机,比如"abc*.txt" | "def*.txt" | "ghi*.txt" ... ,要注意的是状态机的'*'号和通配符'*'是有不同意义的。但是采用这么大的状态机,效率不会好到哪去,但是如果有一些已知条件,可以大大简化状态机。
如果已知字符串有共同同缀什么的,可以采用TST。如果有共同后缀,可以采用后缀树什么的,都是一种状态机的化简。建立状态机时,把'*'号去掉,并在前一个字串对应的节点把loop标志位设为true。搜索时可以按图的算法搜索,搜索的复杂度与状态机的大小成正比。