Trie 树
Trie 树又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串
是一种多叉树的结构,特性:
根节点不包含字符
除根节点之外的每个节点保存一个字符
一条路径上的所有节点保存一个字符串
优点:
对于字符串的搜索有比较高的效率,时间复杂度为O(m) ,m为string中字符个数
可以生成以字母顺序排序的键值对集合
缺点:
空间消耗比较大
搜索效率上可能会比Hash慢
python实现Trie 树
class TrieTree(object): def __init__(self): self.root = {} # 字典中添加word def insert(self, word): tree = self.root for char in word: if char in tree: tree = tree[char] else: tree[char] = {} tree = tree[char] tree['exist'] = True # 字典中删除word def delete(self, word): tree = self.root for c in word: if c not in tree: print('字典中没有不用删') return False tree = tree[c] # 如果找到了就把'/'删了 del tree["exist"] while tree == {}: if word == '': return tmp = word[-1] word = word[:-1] tree = self.root for c in word: tree = tree[c] del tree[tmp] # 查找一个单词是否完整的在字典树里 def search(self, word): tree = self.root for char in word: if char in tree: tree = tree[char] else: return False if "exist" in tree and tree["exist"] == True: return True else: return False # 查找是否有一个单词是这个前缀开始的 def startsWith(self, prefix: str): node = self.root for char in prefix: if char not in node: return False node = node[char] return True tree = TrieTree() tree.insert("hello") tree.insert("world") print(tree.root) print(tree.search("he")) print(tree.search("hello")) print(tree.startsWith("he")) tree.delete("hello") print(tree.root) print(tree.search("hello"))
应用:
trie树常用于搜索提示,词频统计
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2015-12-29 解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题