已解决
【左程云算法全讲4】前缀树、非比较排序
来自网友在路上 197897提问 提问时间:2023-11-09 16:43:30阅读次数: 97
最佳答案 问答题库978位专家为你答疑解惑
系列综述:
💞目的:本系列是个人整理为了秋招面试
的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。
🤭结语:如果有帮到你的地方,就点个赞和关注一下呗,谢谢🎈🎄🌷!!!
🌈【C++】秋招&实习面经汇总篇
文章目录
- 前缀树
- 前缀树
- 参考博客
😊点此到文末惊喜↩︎
前缀树
- 每个结点
- int pass:表示当前结点通过的次数
- int end:表示该节点作为字符串结尾次数
- 作用
- 空间换时间,通过字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。
- 高效地存储和检索字符串数据集中的键
- 可用于自动补完和拼写检查。
- 效率上
- 哈希表时间效率高,但是前缀树可以进行动态查询,即查询一个单词可以只查询一部分即可返回结果
- 支持查询以
x
字符作为前缀的数量
- 前缀树的基本结构
struct Node{int pass; // 该结点的通过数int end; // 以该结点为结尾的结尾数vector<int> *nexts; // 如果字符过多可使用unordered_map<char, Node> nexts Node(){pass = 0;end = 0;next = new vector<Node>(26);}
};class Trie{
public:Trie(){root = new Node();}void insert(string str) {// 健壮性检查if (str.empty()) return ;// 初始化Node *node = root; // 获得根节点的引用node->pass++; // 根节点被经过了,pass++int path = 0; // 表示要走的路径// 算法部分for (int i = 0; i < str.size(); ++i) { // 遍历字符串path = str[i] - 'a'; // 求出nexts中的下一个路径// 无结点建立,有结点复用if (node->nexts[path] == nullptr) {node->nexts[path] = new Node();}node = node->nexts[path]; // 访问下一个node->pass++; // 访问数+1}node->end++; // 结尾结点结尾数end++}int Search(string str) {if (str.size() == 0) return 0;Node *node = root;int path = 0;for (int i = 0; i < str.size(); ++i) {// doingpath = str[i] - 'a';if (node->nexts[path] == nullptr) return 0;// 迭代node = node->next[path];}return node->end;}int TrieNumber(string prev) {if (prev.empty()) return 0;Node *node = root;int path = 0; for (int i = 0; i < prev.size(); ++i) {path = prev[i] - 'a';if (node->nexts[path] == nullptr) return 0;node = node->nexts[path];}return node->pass;}// java会自动释放,但是cpp有内存泄漏问题,需要使用shared_ptr进行处理void DeleteTrie(string str) {if (search(word) != 0) { // 有该字符串才能删除Node *node = root;int path = 0;for (int i = 0; i < str.size(); ++i) {if (--node->nexts[path].pass == 0) {node.nexts[path] = nullptr;// releasereturn ;}node = node->nexts[path];}node->end--;}}private:Node root;};
前缀树
- 【排序相关】
🚩点此跳转到首行↩︎
参考博客
- 对数器
- 单调队列
- 快速链表quicklist
- 《深入理解计算机系统》
- 侯捷C++全系列视频
- 待定引用
- 待定引用
- 待定引用
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"【左程云算法全讲4】前缀树、非比较排序":http://eshow365.cn/6-36368-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 字符加密A--E,B-F,W--A
- 下一篇: SUSE 12双网卡绑定