Trie 树详解编程语言
编程语言 详解 Trie
2023-06-13 09:11:53 时间
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树常用于搜索提示,词频统计
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20450.html
cjavapython相关文章
- 用PyQt实现透明桌面时钟小部件详解编程语言
- Java文件夹排序(先文件夹排序,后文件排序)详解编程语言
- Java保留小数位的4种方法详解编程语言
- Java虚拟机定义详解编程语言
- JS 每次进入自动加载JS详解编程语言
- 判断终端类型、微信的文章防盗链、h5页面跳转打开新的app、跳转到app市场详解编程语言
- 移动端flex布局详解编程语言
- JQuery 限制金额输入详解编程语言
- Hibernate主键生成策略详解编程语言
- Java程序运行时其中的数据是怎么存储的详解编程语言
- jquery如何动态添加、删除class样式方法详解编程语言
- jQuery的animate动画方法详解编程语言
- Drools6.5部署Drools Workbench详解编程语言
- java:POI导出excel详解编程语言
- Python3.x的BeautifulSoup解析html常用函数详解编程语言
- js jquery 获取元素(父节点,子节点,兄弟节点),元素筛选详解编程语言
- 有关HikariPool-1 – Failed to validate connection com.mysql.cj.jdbc.ConnectionImp 错误的产生原因与解决方法详解编程语言
- java文件处理详解编程语言
- JavaScript是什么详解编程语言
- DRF (Django REST framework) 中的路由Routers详解编程语言
- ME51N-采购申请评估价格字段设置为不必输详解编程语言
- 标准成本和移动平均价的误区详解编程语言
- jsoup 超时(timeout) 不起作用、timeout not worked as expected详解编程语言
- Java hashCode() 和 equals()的若干问题解答详解编程语言