【发布时间】:2012-05-31 05:13:48
【问题描述】:
关于来自维基百科的Trie:
[对比HashTable]尝试支持有序迭代
首先我不确定这里是什么意思。和排序迭代一样吗?
此外,这是否应该是此数据结构的固有特征?
我的意思是如果一个人使用例如HashSet 用于Trie 中每个节点的子节点,我们可以获得O(1) 访问权限,试图找到要分支的子节点,或者使用LinkedList 可以节省节点上的空间。
也许我错了,但从我的角度来看,支持ordered 迭代的唯一方法是保持每个节点的所有键数组甚至未使用。
这种方法不好吗?
最后一点:
如果这里的ordered 与插入顺序(而不是排序)有关,我们将如何得到它,因为我们将每个单词(使用字符作为键)插入到相应的节点,但我看不出这如何为我们提供有关广告订单?
有人能帮我把这些事情弄清楚吗?
谢谢。
【问题讨论】:
-
只是猜测。但是 trie 中字符串的有序迭代意味着根据字母顺序对 trie 中的每个字符串进行迭代。如果 trie 包含 bat sat cat 和 hat,您可以轻松地遍历 trie 并按字母顺序获取这些字符串。例如。蝙蝠,猫,帽子坐。
-
是的,我明白这一点。但如果这必须作为 Trie 的一个特性提供,那么实现不应该对空间(使用
LinkedList)或时间(使用HashSet)进行优化存放孩子? -
只要这些结构是有序的,那么他就可以在持有该不变量的同时用来存储孩子。我认为一个字符到节点的映射对于子数据结构或排序链表就足够了。
-
我不清楚你的方法“字符到节点映射”。是否可以给出一个小的示例代码来说明你的意思?
-
我认为是Java数据结构中的HashMap,其中键是字符,值是节点,值是字符。
标签: java algorithm data-structures trie prefix-tree