自创算法——暴力自动机

暴力时利用自动机的最小性,可以在暴力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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值