我一直在研究基数树的实现(对于字符串/字符数组),但我有点困难,想办法如何存储哪些树节点是特定树节点的子节点。
我见过在Trie中使用的链表实现(有点类似于基数树),可能还有一些基数树(自从我上次研究这个主题以来已经有一段时间了),但这似乎表现得非常糟糕特别是如果你有一组包含许多共同前缀的数据。
现在我想知道使用其他数据结构(例如二进制搜索树)是否是更好的设计选择?我认为,当存在具有大量公共前缀的数据时,我可以看到相对于简单链接列表(O(log(n))
与O(n)
)的速度提升非常显着,但是可能会对性能产生一些实质性的妥协别处?
特别是我担心没有大量公共前缀的情况,或任何其他可能导致人们在二叉搜索树上选择链表的障碍。
或者,是否有更好的(即更快/使用更少的内存)方法来存储子节点?
答案 0 :(得分:2)
你想找一个卡丁车。 kart-trie使用类似BST的数据结构和简单的哈希。您可以在此处找到说明:http://code.dogmap.org/kart。
答案 1 :(得分:1)
您可以使用trie代替BST或列表。对于BST,你必须计算一个哈希值,这个哈希值可能和遍历trie一样昂贵(我想的是一个带有指向子节点的数组的trie,你可以使用一个字符作为索引)。你最终会尝试一下。一个更好的解决方案可能是构建一个trie,然后压缩不分支的链接。