有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是Trie的固有特性,还是由实现来提供?

关于维基百科的Trie

[Compared to HashTable] Tries support ordered iteration

首先,我不知道这里是什么意思。它与排序迭代相同吗
此外,这是该数据结构的固有特征吗
我的意思是,如果使用a HashSet作为a Trie中每个节点的子节点,我们可以获得O(1)访问权限,尝试查找要分支的子节点,或者使用LinkedList来节省节点上的空间
也许我错了,但从我的观点来看,支持ordered迭代的唯一方法是保持每个节点的所有键的数组甚至不用
这不是很糟糕吗
最后一点:
如果这里的ordered与插入顺序(而不是排序)相关,我们如何得到它,因为我们将每个单词(使用字符作为键)插入到相应的节点,但我看不出这如何为我们提供有关插入顺序的信息
有人能帮我把脑子里的这些事情弄清楚吗
多谢各位


共 (2) 个答案

  1. # 1 楼答案

    这意味着分类。你不可能不费吹灰之力就得到插入顺序。不太清楚你所说的内在特征是什么意思。实现需要提供它(或提供对内部的访问),但这样做很简单

  2. # 2 楼答案

    他们的意思是,对trie进行深度优先搜索将产生trie中字符串的按字典顺序的输出

    但是,是的,你是对的,这假设给定级别上的所有同级节点都是按字典顺序访问的,这远远没有给出,尤其是对于大字母表,通过哈希表实现子节点表是有意义的

    总之,我认为你的怀疑是合理的,维基百科的文章是错误的

    但值得注意的是,在trie上按字典顺序进行迭代是可以负担的,即使子节点没有排序,由于在迭代时对它们进行排序的成本相对较低——每个trie节点中的子节点很少,因此迭代trie的总体性能仍将在O(n)预期时间内——与哈希表相比,在哈希表中,有序迭代有效地意味着对所有元素进行排序,O(nlogn)操作