您现在的位置是:亿华云 > 人工智能
一篇学好如何实现 Trie
亿华云2025-10-09 15:26:42【人工智能】9人已围观
简介本文转载自微信公众号「我好困啊」,作者mengxin。转载本文请联系我好困啊公众号。Trie又称为字典树,主要用于单词的查找得名。如将一个单词 Hello存放在字典树中的数据结构为:当再次加入help
本文转载自微信公众号「我好困啊」,篇学作者mengxin。好何转载本文请联系我好困啊公众号。实现
Trie又称为字典树,篇学主要用于单词的好何查找得名。如将一个单词 Hello存放在字典树中的实现数据结构为:
当再次加入help时,此时的篇学字典树为:
当添加hero时,此时的好何字典树为:
可以看到树以每个单词的字符为一个节点,网站模板直到字符添加完毕后设置上flag,实现标记当前节点结束为一个单词(即从根节点到当前节点为一个单词)。篇学
当有新的好何单词进来时,只需要添加到树中即可,实现查找时,篇学从根节点出发,好何遍历整棵树(其实总是实现遍历树的某个分支)。如果其中一个字符不在树中,则说明查找失败,高防服务器否则所有的word按每个字符的顺序都能查找到,最后判断结束节点是否为一个单词,是,则查找成功。
代码实现
//叶子节点 type Node struct { isWord bool //是否为一个单词 next map[uint8]*Node //叶子节点对应的单个字符及其next指针 } type Trie struct { root *Node size int64 } func Constructor() Trie { return Trie{ &Node{ isWord: false, next: make(map[uint8]*Node), },0} } /** 添加单词到字典中 */ func (this *Trie) Insert(word string) { if word ==""{ return } cur := this.root for i:= 0;i< len(word);i++ { r := word[i] if cur.next[r]== nil{ cur.next[r] = &Node{ false, make(map[uint8]*Node)} } cur = cur.next[r] } if !cur.isWord { cur.isWord = true } } /** 查找单词 */ func (this *Trie) Search(word string) bool { if word ==""{ return false } cur := this.root for i:= 0;i< len(word);i++ { r := word[i] if cur.next[r]== nil{ return false } cur = cur.next[r] } return cur.isWord } /**查找对应前缀 */ func (this *Trie) StartsWith(prefix string) bool { if prefix ==""{ return false } cur := this.root for i:= 0;i< len(prefix);i++ { r := prefix[i] if cur.next[r]== nil{ return false } cur = cur.next[r] } return true }很赞哦!(44)
上一篇: 2. 不要花大价钱买域名,新手鉴别能力不足,容易投资失误。
下一篇: 4、参加域名拍卖会
相关文章
- 只要我们做的是从目前的市场情况选择域名,从简单易记,从个性特征上,我们就可以找到一个好域名进行注册。域名注册进行域名记录和解析以及绑定网站后,客户可以通过URL登录您的网站。
- 我常用的免费MySQL图形化管理工具
- EUROCAT-X系统的STCA
- 微服务模式:Sidecar
- 2、根据用户基础选择访问提供程序。由于互联问题的存在,接入商的选择也非常重要,如果用户群主要在联通,尽量选择联通接入较好的接入商,如果用户群主要在电信,那么选择电信接入较好的接入商。如果用户组位于国家/地区,则选择更好的访问提供程序进行交互。
- 一篇了解 K8s 日志采集与服务质量 QoS
- 自定义SQL实现PostgreSQL安全审计
- 如何应对团队协作的五大障碍
- cm域名有什么独特之处?新人要了解cm域名哪些?
- 架构师进阶,微服务设计与治理的16条常用原则