📅  最后修改于: 2023-12-03 14:48:09.471000             🧑  作者: Mango
在进行Ukkonen的后缀树构造时,我们已经介绍了如何构建Active Point和Edge Label,接下来我们需要考虑如何操作位置Pos。Pos指的是后缀树上的当前位置,在每次向后添加字符时,Pos都会更新。
在添加字符时,更新Pos需要考虑以下几种情况:
def update_pos():
global pos, active_edge, active_len, active_node
if active_len == 0:
active_edge = pos
next_char = get_active_edge_char()
if text[pos] == next_char:
active_len += 1
pos += 1
return
if active_len > 0:
# split edge
split_node = create_node(active_node, active_edge, active_edge + active_len)
add_edge(active_node, split_node, active_edge, active_edge + active_len)
# create new leaf node
leaf_node = create_node(split_node, pos, len(text))
add_edge(split_node, leaf_node, pos, len(text))
# update active point
if active_node == root:
active_edge += 1
active_len -= 1
else:
active_node = get_suffix_link(active_node)
update_pos()
else:
# create new leaf node
leaf_node = create_node(active_node, pos, len(text))
add_edge(active_node, leaf_node, pos, len(text))
# update active point
active_node = get_suffix_link(active_node)
update_pos()
在本篇文章中,我们介绍了如何更新位置Pos,并给出了代码实现。在下一篇文章中,我们将讨论如何添加新的后缀到后缀树中。