📜  尝试类型

📅  最后修改于: 2021-04-17 10:14:32             🧑  作者: Mango

特里树是树状信息检索数据结构,其节点存储字母。它也被称为数字树或基数树或前缀树。尝试分为三类:

  1. 标准特里
  2. 压缩特里
  3. 后缀特里

标准Trie标准Trie具有以下属性:

  1. 标准Trie具有以下结构:
    class Node {
       
        // Array to store the nodes of a tree
        Node[] children = new Node[26];
    
        // To check for end of string
        boolean isWordEnd;
    }
    
  2. 它是像数据结构一样的有序树。
  3. 在一个标准的字典树中的每个节点(除了根节点)标记有字符。
  4. 节点的子级按字母顺序排列。
  5. 每个节点或分支代表键或单词的可能字符。
  6. 每个节点或分支可以具有多个分支。
  7. 每个关键字或单词的最后一个节点用于标记单词或节点的结尾。

下面是标准Trie的图示:

压缩的特里树压缩的特里树具有以下属性:

  1. 压缩的Trie具有以下结构:
    class Node {
    
        // Array to store the nodes of tree
        Node[] children = new Node[26];
    
        // To store the edgeLabel
        StringBuilder[] edgeLabel = new StringBuilder[26];
    
        // To check for end of string
        boolean isEnd;
    }
    
  2. 压缩的Trie是标准Trie的高级版本。
  3. 每个节点(节点除外)至少有2个子节点。
  4. 它用于实现空间优化。
  5. 为了从标准Trie导出压缩Trie,执行冗余节点链的压缩。
  6. 它由字符键的分组,重新分组和取消分组组成。
  7. 在执行插入操作时,可能需要取消对已分组字符的分组。
  8. 在执行删除操作时,可能需要重新分组已分组的字符。
  9. 存储s个字符串()的压缩特里T具有s个外部节点,并且节点总数为O(s)。

下面是压缩的Trie的图示:

后缀Trie后缀Trie具有以下属性:

  1. 压缩的Trie具有以下结构:
    struct SuffixTreeNode { 
    
        // Array to store the nodes
        struct SuffixTreeNode *children[256]; 
       
        //pointer to other node via suffix link 
        struct SuffixTreeNode *suffixLink; 
       
        // (start, end) interval specifies the edge,
        // by which the node is connected to its 
        // parent node
        int start; 
        int *end; 
       
        // For leaf nodes, it stores the index of 
        // Suffix for the path  from root to leaf
        int suffixIndex; 
    }
    
  2. 后缀Trie是压缩Trie的高级版本。
  3. 后缀特里最常见的应用是模式匹配。
  4. 在执行插入操作时,单词及其后缀都被存储。
  5. 后缀特里也用于单词匹配和前缀匹配。
  6. 为了生成后缀特里,给定字符串的所有后缀都被视为单个单词。
  7. 使用后缀构建压缩的特里。

下面是后缀Trie的图示: