trie树
struct Node
{
int id;
bool end;
Node *ptr[MAXN];
// Node():id(-1),end(0){for(int i=0;i<MAXN;i++)ptr[i]=NULL;}
}*root;
Node MEM[N];
int getvalue(char *s)
{
int i,j;
Node *r;
r=root;
for(i=0;i<strlen(s);i++)
{
if(r->ptr[s[i]-'a']==NULL)
{
Node *temp=&MEM[index++];
temp->end=0;
temp->id=-1;
for(j=0;j<MAXN;j++)temp->ptr[j]=NULL;
r->ptr[s[i]-'a']=temp;
}
r=r->ptr[s[i]-'a'];
}
if(r->end)return r->id;
r->id=cnt++;
r->end=1;
return r->id;
}
初始化:
index=0;
root=&MEM[index++];
root->end=0;
root->id=-1;
for(i=0;i<MAXN;i++)root->ptr[i]=NULL;
KMP算法
P[1]:=0;j:=0;for i:=2 to m dobegin while (j>0) and (B[j+1]<>B[i]) do j:=P[j]; if B[j+1]=B[i] then j:=j+1; P[i]:=j;end;如果从0开始:
len=strlen(s);
p[0]=-1;
j=-1;
for(i=1;i<len;i++)
{
while(j>-1&&s[j+1]!=s[i])
j=p[j];
if(s[j+1]==s[i])
j++;
p[i]=j;
}
重复次数为:
len%(len-p[len-1]-1)==0?len/(len-p[len-1]-1):1
本文详细介绍了Trie树的数据结构实现方法,并提供了一个具体的插入字符串示例。此外,还介绍了KMP算法的原理及其核心部分——部分匹配表的构造过程。这些内容对于理解模式匹配算法和字符串搜索具有重要意义。
1971

被折叠的 条评论
为什么被折叠?



