1.聊聊前缀树
说到前缀树,可能很多人都比较陌生,笔者也是因为一次偶然的就会和朋友聊到字符串处理,谈到了前缀树.
前缀树又称为Trie树或者字典树,在字符串的处理过程中起到了重要的作用。
它的key都为字符串,能做到高效查询和插入,时间复杂度为O(k),k为字符串长度,缺点是如果大量字符串没有共同前缀时很耗内存。
Trie树最大的特点是最大限度的减少字符串的比较,并且通过共同前缀来提高查询的效率。
举个简单的例子,比如说有一组前缀类似的字符串
Animal
Answer
Boss
Baby
Boy
当需要查找Boy是否在这一组字符串中,正常情况下是需要遍历数组,挨个匹配,当匹配到数组中的Boy时,返回查找的结果。这样的匹配过程效率低下.
而前缀树的作用就是简化查找的过程,当我们知道Boy的首字母是B后,就可以直接查找B开头的字符串.直接排除了A开头的字符串。剩下的目标集中在Boss、Baby、Boy三个字符串中。
再往后第二个字母是o,则相应的排除了Baby,最终找到对应的Boy.只做了三次查找。<