Trie树

作者: helloGlobal | 来源:发表于2019-05-22 13:12 被阅读0次

Trie树,又称字典树,前缀树,是一种很常用的树结构,它被广泛用于各个方面,比如字符串检索、中文分词、求字符串最长公共前缀和字典排序等等。

字典树设计的核心思想是空间换时间,所以数据结构本身比较消耗空间。但它利用了字符串的共同前缀(Common Prefix)作为存储依据,以此来节省存储空间,并加速搜索时间。Trie 的字符串搜索时间复杂度为 O(m),m 为最长的字符串的长度,其查询性能与集合中的字符串的数量无关。其在搜索字符串时表现出的高效,使得特别适用于构建文本搜索和词频统计等应用

字典树的性质

根节点(Root)不包含字符,除根节点外的每一个节点都仅包含一个字符;

从根节点到某一节点路径上所经过的字符连接起来,即为该节点对应的字符串;

任意节点的所有子节点所包含的字符都不相同;

下图就是一个字典树的构造


image.png

使用golang 定义trie 树节点,定义一个支持汉字的Trie树

type runeTireNode struct {
    child map[rune]*runeTireNode
    Vaule interface{}
}
type RuneTire struct {
    root *runeTireNode
}

func NewRuneTire() *RuneTire  {
    return &RuneTire{root:&runeTireNode{child:make(map[rune]*runeTireNode)}}
}
func (r *RuneTire) Insert(key string,value interface{})  {
    node := r.root
    for _,c := range key{
        if n,ok :=node.child[c];!ok{
            newNode := &runeTireNode{child:make(map[rune]*runeTireNode)}
            node.child[c] = newNode
            node = newNode
        }else{
            node = n
        }
    }
    node.Vaule = value
}

func (r *RuneTire) Get(key string) interface{}  {
    node := r.root
    for _,c := range key{
        if n,ok := node.child[c];!ok{
            return nil
        }else{
            node = n
        }
    }
    return node.Vaule
}
func main() {
    r := NewRuneTire()
    r.Insert("河北","河北")
    r.Insert("湖南","湖南")
    r.Insert("湖北","湖北省")
    fmt.Println(r.Get("湖北"))
}

相关文章

  • trie树

    文章内容来自 Trie树:应用于统计和排序Trie树 trie树又称:字典树、单词查找树、前缀树等,总之是一种树状...

  • 树结构之Trie

    1. 什么是trie树 1.Trie树 (特例结构树)Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈...

  • 实现 Trie

    数据结构之Trie树Trie树:应用于统计和排序

  • Trie树

    一、定义 Trie树,又称为单词查找树,是一种树形结构(Trie一词源于单词Retrieval-取出)。Trie树...

  • leetcode——字典树(Trie树)的实现

    leetcode——实现Trie(前缀树) 题目 实现一个 Trie (前缀树),包含 insert, searc...

  • 算法笔记 - Trie 树

    Trie树是一种非常常见的算法 Trie树的主要用途是快速地匹配字符串 Tire树可以记录数值 Trie树的实现成...

  • 以太坊详解 之 Merkle Patricia Tree

    基础知识 Trie树 Trie是一种搜索树,又称字典树(digital tree)和前缀树(prefix tree...

  • 数据结构与算法笔记day21:Trie树|AC自动机

    1Trie树 这节课学习了一种特殊的树,Trie树。Trie树是一种解决字符串快速匹配问题的数据结构。如果用来...

  • Leetcode 208 实现 Trie (前缀树)

    实现 Trie (前缀树) 题目 实现一个 Trie (前缀树),包含 insert, search, 和 sta...

  • 208-实现Trie(前缀树)

    实现Trie(前缀树) 题目 实现一个 Trie (前缀树),包含 insert, search, 和 start...

网友评论

      本文标题:Trie树

      本文链接:https://www.haomeiwen.com/subject/aywyzqtx.html