我到处找,但没有找到关于Kangaroo方法的好的、清晰的解释。只是我发现了一些PPT,但对我来说毫无用处,因为我以前没有读过袋鼠法。这些PPT是为了修改袋鼠法。
如果有人能给我提供袋鼠法的阅读材料或视频教程链接,那将是一个很大的帮助。
乙醇提前
设T=t1t2…tn,p=p1p2…pm
k=#允许的错误
预处理T$1P$2的后缀树[时间:O(nlog|Sigma|通过Weiner算法构造后缀树)Sigma是一种语言。
在我们刚刚创建的树上预处理LCA。[时间:O(n)]
在所有节点上运行,并在每个节点上写入距根的高度。[时间:我们有O(n)个节点]
遍历所有后缀(=leaves),对于每个后缀Si初始化一个错误计数器并查询h1=height(LCA(Si,p)),如果h>=m,我们将i添加到解决方案中,否则:err++,如果err<k继续检查h2=高度(LCA(Si[h1+1,n],P[h1+1,m]))。
[时间:在所有后缀上运行=>O(n),每个后缀最多运行k+1次=>O(kn)]
希望这能有所帮助。。。
布什