Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
Dictionary 指定DLB trie中单词的最后一个字符的正确方法是什么?_Dictionary_Data Structures_Trie - Fatal编程技术网

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

Dictionary 指定DLB trie中单词的最后一个字符的正确方法是什么?,dictionary,data-structures,trie,Dictionary,Data Structures,Trie,在我的课堂上,我们复习了一个项目,该项目利用De La Briandais Trie数据结构来实现一个字典。我了解数据结构以及实现它需要做什么。然而,我收到了一些相互冲突的方法来表示DLB中有效单词的结尾 一方面,有人指出,我们应该使用单词中未使用的ASCII字符来表示单词是完整的,例如“^”。我认为这将是单词最后一个字符的另一个节点。例如,“堆栈”是一个类似于(请原谅此描述)的链表: 然而,我的助教说我们应该使用一个标志(布尔或整数)来表示单词的结尾。整数也可以用来表示找到或使用单词的频率。这

在我的课堂上,我们复习了一个项目,该项目利用De La Briandais Trie数据结构来实现一个字典。我了解数据结构以及实现它需要做什么。然而,我收到了一些相互冲突的方法来表示DLB中有效单词的结尾

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

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

[ROOT] -- [S 0] -- [T 0] -- [A 0] -- [C 0] -- [K 1]
每次找到单词时,最后一个节点的整数都会递增


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

任何一种方法都有效,并且没有特别的偏好。如果包含该标志,则trie中的每个节点都必须为该标志包含额外的空间。这可能是内存问题。但如果使用终端节点,则每个单词都有一个额外的节点,并且在定位单词时有一个额外的转换

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


换句话说,用你喜欢的任何一个。

很好的解释。很高兴知道两者都是可行的选择。我们也很高兴知道,在教学过程中,我们没有遇到相互冲突的方法。
[ROOT] -- [S 0] -- [T 0] -- [A 0] -- [C 0] -- [K 1]