Trie逻辑结构
Trie是一种常见的数据结够,可以实现前缀匹配(hash是不行的),而且对于词典搜索来说也是O(1)的时间复杂度,虽然比不上Hash,但是空间会省不少。
比如下图表示了包含“pool, prize, preview, prepare, product, progress"的一个Trie
Trie的逻辑结构:每个圆圈都表示一个状态,比如状态1,状态之间的边表示状态1遇到字符p就变成状态2。用两个圈画的状态表示终止状态,也就是表示匹配了一个单词。
这是DFA的表示方法,当然按照正规的定义,还得有个“吸收”所以非法字符的状态,比如状态1碰到p之外的任何字符都会匹配失败,也就是会进入这个“吸收”状态,这个状态就像
黑洞,进去之后就永远没有出头之日了------永远在那个状态跳转。
Trie的实现
从上面可以知道,要表示一个Trie,关键就是一个跳转矩阵(DFA里的正式名字是状态转移表),比如上图可以这样表示
1 | 2 | 3 | 4 | .. | |
---|---|---|---|---|---|
p | 2 | X | X | X | |
r | X |