我不知道这是否是询问算法的地方,但让我们看看是否能得到任何答案...:)
如果有任何不清楚的地方,我非常乐意澄清。
我刚刚在Python中实现了一个 Trie 。 然而,有一点似乎比它应该更加复杂(作为一个热爱简单的人)。 也许有人遇到了类似的问题?
我的目标是通过在其根节点中存储子Trie的最大公共前缀来最小化节点数量。例如,如果我们有单词stackoverflow,stackbase和stackbased,那么树的外观将类似于此:
[s]tack
[o]verflow ______/ \_______ [b]ase
\___ [d]
请注意,仍然可以将边缘视为一个字符(子节点的第一个字符)。
“查找”查询很容易实现。插入不难,但比我想象的要复杂一些.. :(
我的想法是一个接一个地插入键(从空字典开始),首先搜索要插入的键k(Find(k)),然后在查找过程停止的位置本地重新排列/拆分节点。结果有4种情况: (设k是我们要插入的键,k'是搜索结束的节点的键)
1. k与k'相同 2. k是k'的“适当”前缀 3. k'是k的“适当”前缀 4. k和k'共享一些公共前缀,但没有出现(1),(2)或(3)中的任何一种情况。
似乎每种情况都是独特的,因此意味着对Trie的不同修改。但是:真的那么复杂吗?我错过了什么吗?有更好的方法吗?
谢谢 :)