zoukankan      html  css  js  c++  java
  • 【暑假】[实用数据结构]前缀树 Trie

    前缀树Trie

    Trie可理解为一个能够快速插入与查询的集合,无论是插入还是查询所需时间都为O(m)

    模板如下:

     1 const int maxnode = 1000+10;
     2 const int sigma_size = 26; 
     3 
     4 struct Trie{
     5 int ch[maxnode][sigma_size];
     6 int val[maxnode];
     7 int sz;
     8 
     9   void clear(){ sz=1; memset(ch[0],0,sizeof(ch[0])); }
    10   int ID(char c){ return c='a'; };
    11   
    12   void insert(char* s,int v){ //向Trie中插入 
    13       int u=0 , n=strlen(s);
    14       for(int i=0;i<n;i++) { 
    15           int c=ID(s[i]);
    16           if(!ch[u][c]){
    17               memset(ch[sz],0,sizeof(ch[sz])); //初始化子结点组 
    18               val[sz]=0;        //中间结点val=0 
    19               ch[u][c]= sz++;  //建立子结点 
    20         }
    21         u=ch[u][c];          //往下走 
    22       }
    23       val[u]=v;
    24   }
    25   
    26   int find(char *s){     //查找s是否存在 
    27       int n=strlen(s);
    28       int u=0;
    29       for(int i=0;i<n;i++){
    30           int c=ID(s[i]);
    31           if(!ch[u][c]) return false;
    32           u=ch[u][c];
    33       }
    34       return val[u];  //是否为尾 
    35   }
    36 };
  • 相关阅读:
    自我介绍
    秋季学期总结
    第七周编程总结
    第六周作业
    第五周编程总结
    第四周编程总结
    第三周作业
    第二周作业
    抓老鼠啊~亏了还是赚了
    币值转换
  • 原文地址:https://www.cnblogs.com/lidaxin/p/4719042.html
Copyright © 2011-2022 走看看