Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 实现后缀树_Python_C++_Suffix Tree_Sorteddictionary - Fatal编程技术网

Python 实现后缀树

Python 实现后缀树,python,c++,suffix-tree,sorteddictionary,Python,C++,Suffix Tree,Sorteddictionary,下午好。我正试图将代码从C++重写为python,但我得到一个关键错误:最后一行中的0: 对于范围(256)内的c: 链接[0][c]=1 我已经查看了一个为SortedDict:sd['c']=3添加值的示例,但是我不知道我做错了什么 需要修复什么 #包括 #包括 常量int MAXLEN=600000; std::字符串s; int pos[MAXLEN],len[MAXLEN],par[MAXLEN]; std::映射到[MAXLEN],链接[MAXLEN]; int sz=2; int路

下午好。我正试图将代码从C++重写为python,但我得到一个关键错误:最后一行中的0: 对于范围(256)内的c: 链接[0][c]=1

我已经查看了一个为SortedDict:sd['c']=3添加值的示例,但是我不知道我做错了什么

需要修复什么

#包括
#包括
常量int MAXLEN=600000;
std::字符串s;
int pos[MAXLEN],len[MAXLEN],par[MAXLEN];
std::映射到[MAXLEN],链接[MAXLEN];
int sz=2;
int路径[MAXLEN];
无效附加(整数子级、整数父级、字符c、整数子级)
{
致[父母][c]=子女;
len[child]=child_len;
par[子女]=父母;
}
无效扩展(int i)
{
intv,vlen=s.size()-i,old=sz-1,pstk=0;
对于(v=old;!link[v]。计数(s[i]);v=par[v]){
vlen-=len[v];
路径[pstk++]=v;
}
int w=链接[v][s[i];
如果(到[w]。计数(s[i+vlen])){
int u=至[w][s[i+vlen];
对于(pos[sz]=pos[u]-len[u];s[pos[sz]]==s[i+vlen];pos[sz]+=len[v]){
v=路径[--pstk];
vlen+=len[v];
}
附加(sz,w,s[pos[u]-len[u]],len[u]-(pos[u]-pos[sz]);
附上(u,sz,s[pos[sz]],pos[u]-pos[sz]);
w=链接[v][s[i]]=sz++;
}
link[old][s[i]]=sz;
附加(sz,w,s[i+vlen],s.尺寸()-(i+vlen));
pos[sz++]=s.size();
}
int main()
{
len[1]=1;pos[1]=0;par[1]=0;
用于(int c=0;c<256;c++)
链接[0][c]=1;
s=“abababasdsdfasdf”;
对于(int i=s.size()-1;i>=0;i--)
延长(i);
}
和python:

#pip安装分拣容器
从分拣集装箱导入分拣货物
MAXLEN=600000
s=“”
#pos=[]
#冷=[]
#par=[]
pos=[None]*MAXLEN
leng=[None]*MAXLEN
PAL= [无] *Max
to=SortedDict()
link=SortedDict()
sz=2
路径=[]
def附加(子级、父级、c级、子级):
致[父][c]=子
冷[儿童]=儿童
par[子]=父
定义扩展(i):
vlen=len(s)-i
old=sz-1
pstk=0;
v=旧
而1:
如果链接[v]。计数(s[i]):
打破
vlen-=leng[v]
路径[pstk+1]=v
v=标准杆[v]
w=链接[v][s[i]]
如果到[w]。计数(s[i+vlen]):
u=至[w][s[i+vlen]]
pos[sz]=pos[u]-leng[u]
而1:
如果s[pos[sz]!=s[i+vlen]:
打破
v=路径[pstk-1]
vlen+=leng[v]
pos[sz]+=leng[v]
连接(sz,w,s[pos[u]-leng[u]],leng[u]-(pos[u]-pos[sz]))
附(u,sz,s[pos[sz]],pos[u]-pos[sz])
w=链接[v][s[i]]=sz+1
link[old][s[i]]=sz
附(sz,w,s[i+vlen],len(s)-(i+vlen))
位置[sz+1]=长度(s)
leng[1]=1;
pos[1]=0;
par[1]=0;
对于范围(256)内的c:
链接[0][c]=1;
s=“abababasdsdfasdf”;
i=len(s)-1;
而1:

如果我看起来像应该被初始化:link[0]=[None]*256类似的书籍应该被初始化:link[0]=[None]*256