在DLB trie中指定单词的最后一个字符的正确方法是什么?

时间:2018-02-15 13:52:58

标签: dictionary data-structures trie

在我的课堂上,我们已经审查并正在开发一个利用De La Briandais Trie数据结构来实现字典的项目。我理解数据结构以及实现它需要做些什么。但是,我收到了相互矛盾的方法来表示我的DLB中有效单词的结尾。

一方面,有人说我们应该使用未在单词中使用的ASCII字符来表示单词是完整的,例如'^'。我认为这将是该词的最后一个字符的另一个节点。例如,“STACK”将是一个类似于(原谅此描述)的链接列表:

[ROOT] -- [S] -- [T] -- [A] -- [C] -- [K] -- [^]

然而,我的TA表示我们应该使用一个标志(布尔或整数)来表示单词的结尾。整数也可用于表示找到或使用该词的频率。这就是int标志的显示方式:

[ROOT] -- [S 0] -- [T 0] -- [A 0] -- [C 0] -- [K 1]

每次找到单词时,最终节点的整数都会递增。

我想知道哪种是最正确的,普遍接受的方法,或两者​​的结合。

1 个答案:

答案 0 :(得分:1)

无论哪种方式都有效,并且没有特别的偏好。如果包含该标志,那么该trie中的每个节点都必须包含该标志的额外空间。这可能是一个记忆问题。但是如果你使用一个终端节点,每个单词都有一个额外的节点,在找到一个单词时有一个额外的过渡。

在实践中,记忆差异可以忽略不计。使用终端节点时,每个单词的额外转换最多在性能分析中几乎检测不到,并且可以通过优化完全删除。

换句话说,请根据自己的喜好使用。