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

What is the correct way to designate the last character of a word in a DLB trie?

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

一方面说要用单词中没有的ASCII字符来表示单词的完整,比如'^'。我认为这将是单词最后一个字符的另一个节点。例如,"STACK" 将是一个类似于(请原谅这个描述)的链表:

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

但是,我的助教说我们应该使用标志(布尔值或整数)来表示单词的结尾。该整数还可以用于表示找到或使用该词的频率。这是带有 int 标志的显示方式:

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

每找到一个单词,最后节点的整数就会递增。

我想听听哪个是最正确、普遍接受的方法,或者两者的结合。

两种方式都行,没有特别的偏好。如果包含标志,则 trie 中的每个节点都必须包含额外的 space 作为标志。这可能是内存问题。但是如果你使用终端节点,每个单词都有一个额外的节点,并且在定位单词时会有一个额外的转换。

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

换句话说,你喜欢哪个就用哪个。