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

本文共 1677 字,大约阅读时间需要 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;

 

转载于:https://www.cnblogs.com/qscqesze/p/5032334.html

你可能感兴趣的文章
手机自带功能调用
查看>>
百度搜索引擎取真实地址-python代码
查看>>
java 多线程 Future callable
查看>>
字符串操作练习:星座、凯撒密码、99乘法表
查看>>
Java实现字符串转换十六进制MD5值
查看>>
MySQL数据库8(十七)数据库的备份还原
查看>>
tensorflow 梯度下降以及summary
查看>>
9、接口和抽象类
查看>>
timeStamp和GMT时间的转换
查看>>
探索J2ME应用:如何用GCF通信
查看>>
jquery ajaxform上传文件返回不提示信息的问题
查看>>
实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC)的形式,共享在另外一个2008服务器上...
查看>>
适配器
查看>>
c#截取字符串
查看>>
VS2005中配置 ScriptManager,UpdatePanel,UpdateProgress 等AJAX控件 .
查看>>
使用logback实现http请求日志导入mongodb
查看>>
【 2017 Multi-University Training Contest - Team 9 && hdu 6162】Ch’s gift
查看>>
redis在php中的应用(Hash篇)
查看>>
Docker系列之Docker镜像(读书笔记)
查看>>
Scrapy 多url爬取、爬取post请求、更换代理ip、指定日志等级
查看>>