博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板 可持久化字典树
阅读量:5809 次
发布时间:2019-06-18

本文共 1625 字,大约阅读时间需要 5 分钟。

// Made by xiper// updata time : 2015 / 12 / 8// test status: √// 使用前调用初始化函数 init() 同时 root[0] = 0;struct Trie_Persistent{    const static int LetterSize = 5; // 字符集大小    const static int TrieSize = 20 * ( 1e5 + 50); // 可能的所有节点总数量    int tot; // 节点总数        //节点类型    struct node    {        int ptr[LetterSize]; // trie_node_ptr[]        int cnt[LetterSize]; // 维护字符集数目    }tree[TrieSize];    // 获取字符集哈希编号 , 必须在 [0 , LetterSize) 之内    inline int GetLetterIdx(int c){
return c - 'a';} // 插入字符串 str , 上一个副本是 f int insert(const char * str ,int f){ int len = strlen( str ); int res = tot++; // 建立虚拟根结点 tree[res] = tree[f]; // 初始化 int cur = res; // 当前指针 for(int i = 0 ; i < len ; ++ i){ int idx = GetLetterIdx( str[i] ); // 获取字符编号 int p = tot ++ ; // 创建下一个虚拟节点 tree[cur].cnt[idx] ++ ; tree[cur].ptr[idx] = p; f = tree[f].ptr[idx]; // 上一个副本的指针更新 tree[p] = tree[f]; // updata information; cur = tree[cur].ptr[idx]; // updata ptr } return res; } // 在 [l ,r] 副本中查找字符串str // 参数带入( str , root[l-1] , root[r]) int find(const char * str , int l ,int r){ int len = strlen(str); for(int i = 0 ; i < len ; ++ i){ int idx = GetLetterIdx ( str[i] ); // 获取字符Hash int cnt = tree[r].cnt[idx] - tree[l].cnt[idx]; if(!cnt) return 0; l = tree[l].ptr[idx]; r = tree[r].ptr[idx]; } return 1; } void init(){tot = 1;for(int i = 0 ; i < LetterSize ; ++ i) tree[0].ptr[i] = 0 , tree[0].cnt[i] = 0; } // 虚拟节点}trie;

 

转载地址:http://qmcbx.baihongyu.com/

你可能感兴趣的文章
无法启动MYSQL服务”1067 进程意外终止”解决的方法
查看>>
tomcat 连接池拦截器
查看>>
bzoj1650[Usaco2006 Dec]River Hopscotch 跳石子*
查看>>
基于matlab信噪比程序
查看>>
Visual Studio进行负载测试,RIG和负载测试术语- Part II
查看>>
尝试用Gearman实现分布式处理(PHP)
查看>>
Error: "源代码不可用于此位置"
查看>>
Python知识点-字符串格式化几种方式
查看>>
市场营销魔力:欲望的安慰剂效应 - Levels of marketing magic, the placebo effects of desire...
查看>>
编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。...
查看>>
jdk设置
查看>>
Android之Gson解析JSON数据
查看>>
对Sqlserver的高级操作
查看>>
VS2003.NET在文件中查找卡死
查看>>
王世杰
查看>>
XCode4.2iOS各模板简述
查看>>
链路层
查看>>
unity UGUI动态字体显示模糊
查看>>
由火车进站引出的问题
查看>>
poj3169 最短路(差分约束)
查看>>