赞
踩
Trie树(前缀树)是一个可以快速插入与查询字符串前缀的字典树。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
如图在Trie树插入"apple","appal","app","banana"
4个字符串,红色节点表示结尾。
Go语言版本的Trie树我们需要关注结点的定义:
// Trie数(结点) type Trie struct { Next [26]*Trie isEnd bool } // 构造函数 func Constructor() Trie { return Trie{} } // 插入 func (this *Trie) Insert(word string) { node := this for _,c := range word { c -= 'a' if node.Next[c] == nil { node.Next[c] = &Trie{} } node = node.Next[c] } node.isEnd = true } // 获取结点 func (this *Trie) SearchNode(str string) *Trie { node := this for _,c := range str { c -= 'a' if node.Next[c] == nil { return nil } node = node.Next[c] } return node } // 查询 func (this *Trie) Search(word string) bool { node := this.SearchNode(word) return node != nil && node.isEnd } // 前缀查询 func (this *Trie) StartsWith(prefix string) bool { return this.SearchNode(prefix) != nil }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。