zoukankan      html  css  js  c++  java
  • 字典树

    字典树

    字典树又叫tire树,是个简单但是非常实用的数据结构,通常用于字符串的处理或者字典查询。本质上,Trie是一颗存储多个字符串的树。相邻节点间的边代表一个字符,这样树的每条分支代表一则子串,而树的叶节点则代表完整的字符串。和普通树不同的地方是,相同的字符串前缀共享同一条分支。还是例子最清楚。给出一组单词,inn, int, at, age, adv, ant, 我们可以得到下面的Trie:

    从图中可以看出:

    • 每条边代表一个字符
    • 每个节点对应一项前缀。叶节点前缀最长,即一个单词本身。
    • 单词inn和int共享单词前缀in,因此他们共享左边的一条分支为root->i->in。'a'系列的分支同理。
    •  查询也非常简单。比如要查找int顺着从根节点root找下来就好了,root->i->in->int。
    • 搭建Trie的基本算法也很简单,无非是逐一把每则单词的每个字母插入Trie。插入前先看前缀是否存在。如果存在,就共享,否则创建对应的节点和边。比如要插入单词add,就有下面几步:
      1. 先从根节点出发,然后是字符'a',发现字符'a'已经存在,那么共享。
      2. 再到'd',又发现'd'也已经存在,共享。
      3. 再从'ad'向后再找一个'd',发现不再存在,这时建一条边,从'ad'连向'd'构成'add'。(建议用指针写,省点空间)
  • 相关阅读:
    深拷贝(deep clone)与浅拷贝(shallow clone)
    wait和notify
    Java实现简单RPC框架(转)
    Eclipse 搭建Struts2
    手写HashMap实践
    JVM 类加载器ClassLoader源码学习笔记
    Java 内存模型学习笔记
    Struts2 入门笔记
    struts2 拦截器
    Btrace 拦截时机
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6290816.html
Copyright © 2011-2022 走看看