自创算法——暴力自动机

来源:互联网 发布:国外羽绒服品牌 知乎 编辑:程序博客网 时间:2024/06/05 20:15

暴力时利用自动机的最小性,可以在暴力dfs时和匹配答案时使用自动机优化,可以使纯暴力更快。

struct baoli

{
    baoli *xia[51];
    baoli()
    {
    memset(xia,NULL,sizeof(xia));  
}

}root;

trie树的结构体,xia【51】代表有51个可能的分支


bool insert(char *str)
{
int shu,i=0;
baoli *now=root;
bool you=0;
while(i<n)
{
shu=str[i];
if(now->xia[shu]==NULL)
 you=1,now->xia[shu]=new baoli();

now=now->xia[shu];
i++;
}
if(you)return 1;
else  return 0;

}

类似trie树的加入,不同的是返回,加入和匹配一体化,用bool判重。

bool pipei(char str*)
{
int shu,i=0;
baoli *now=root;
while(i<n)
{
shu=str[i];

if(now->xia[shu]==NULL)return 0;

now=now->xia[shu];
i++;
}
return 1;

}


< =o(n)的询问(谁还能更快?)

所以程序主要复杂度在dfs,再配合优良的剪枝效率会很高。



0 3
原创粉丝点击