多语言展示
当前在线:1934今日阅读:155今日分享:35

Tries树的简单介绍

Tries树有很多名称,比如字典树、前缀树等,可以存储一些有序的数据,比如单词。一个节点的所有子节点具有相同的前缀又称前缀树。可以用于单词搜索,拼写校准,下面进行简单的介绍。
工具/原料

c++

方法/步骤
1

用字符集{bear,bid , sun,sunday }构建的Tries树如图所示。特点:1、根节点不存储字符,除根节点外每个字符包含字符。2、从根节点到某一节点,路径上经过的字符连接起来,就是该节点对应的字符串3、每个单词的公共前缀作为一个字符节点保存。

2

Tries实现方式。Tries 可以通过二维数组,链表,二叉树等结构实现。

3

Tries节点的结构。JAVA 实现方式class TrieNode {    // R links to node children    private TrieNode[] links;    private final int R = 26;    private boolean isEnd;    public TrieNode() {        links = new TrieNode[R];    }    public boolean containsKey(char ch) {        return links[ch -'a'] != null;    }    public TrieNode get(char ch) {        return links[ch -'a'];    }    public void put(char ch, TrieNode node) {        links[ch -'a'] = node;    }    public void setEnd() {        isEnd = true;    }    public boolean isEnd() {        return isEnd;    }}

4

插入操作Java实现:class Trie {    private TrieNode root;    public Trie() {        root = new TrieNode();    }    // Inserts a word into the trie.    public void insert(String word) {        TrieNode node = root;        for (int i = 0; i < word.length(); i++) {            char currentChar = word.charAt(i);            if (!node.containsKey(currentChar)) {                node.put(currentChar, new TrieNode());            }            node = node.get(currentChar);        }        node.setEnd();    }}

5

时间复杂度最坏情况O(N);N为节点的个数。搜索与插入操作的时间复杂度:O(p)。p为单词的长度。

6

应用:Trie树的应用有很多,比如说拼写矫正,单词自动补充完整,IP路由的最长前缀匹配等。

推荐信息