Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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 3.x Aho输出函数或输出/字典链接_Python 3.x_Algorithm_Data Structures_Substring_Aho Corasick - Fatal编程技术网

Python 3.x Aho输出函数或输出/字典链接

Python 3.x Aho输出函数或输出/字典链接,python-3.x,algorithm,data-structures,substring,aho-corasick,Python 3.x,Algorithm,Data Structures,Substring,Aho Corasick,我试图理解aho输出函数或字典链接,它是如何工作的。根据我的理解,甚至是写在: 案文形式如下: “从字典中的每个节点到下一个节点都有一个绿色的“字典后缀”弧,可以通过跟随蓝色弧来达到。例如,从(bca)到(a)有一个绿色弧,因为(a)是字典中的第一个节点(即蓝色节点),当跟随蓝色弧到(ca),然后再到(a)时到达该节点。”。通过重复遍历蓝色圆弧,直到找到蓝色节点,并记录此信息,可以在线性时间内计算绿色圆弧。” 因此,根据我对该模式的理解:{'yabc','abc','bc','c}带有故障链接的

我试图理解aho输出函数或字典链接,它是如何工作的。根据我的理解,甚至是写在:

案文形式如下:

“从字典中的每个节点到下一个节点都有一个绿色的“字典后缀”弧,可以通过跟随蓝色弧来达到。例如,从(bca)到(a)有一个绿色弧,因为(a)是字典中的第一个节点(即蓝色节点),当跟随蓝色弧到(ca),然后再到(a)时到达该节点。”。通过重复遍历蓝色圆弧,直到找到蓝色节点,并记录此信息,可以在线性时间内计算绿色圆弧。”

因此,根据我对该模式的理解:{'yabc','abc','bc','c}带有故障链接的自动化将如下所示:

我正在使用此代码构造失败链接:

def built_failover(self):

        q = deque()
        current = self.root
        for ch in self.root.children:
            self.root.children[ch].fail = self.root
            q.append(self.root.children[ch])
        while q:
            node = q.popleft()
            for ch in node.children:
                q.append(node.children[ch])
                failover = node.fail
                while True:
                    if failover is None:
                        node.children[ch].fail = self.root
                        break
                    if ch in failover.children:
                        node.children[ch].fail = failover.children[ch]
                        break
                    else:
                        failover = failover.fail
当我在文本中搜索模式时,我查看节点是否包含字符,若不包含字符,则检查失败注释,若包含字符,则移动

因此,在我的文本zabc中,当我到达yabc-trie结构时,我可以打印abc和bc,因为abc是当前节点输出,bc是yabc失败链接输出,但是如何打印C作为输出

我必须检查所有的失败链接,直到它不是根吗?或者在我的搜索/构建自动机时是否有任何错误