【左程云算法全讲5】前缀树、非比较排序

编程入门 行业动态 更新时间:2024-10-28 01:21:16

【左程云算法全讲5】<a href=https://www.elefans.com/category/jswz/34/1768815.html style=前缀树、非比较排序"/>

【左程云算法全讲5】前缀树、非比较排序

系列综述:
💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。
🤭结语:如果有帮到你的地方,就点个赞关注一下呗,谢谢🎈🎄🌷!!!
🌈【C++】秋招&实习面经汇总篇


文章目录

      • 前缀树
      • 前缀树
    • 参考博客


😊点此到文末惊喜↩︎

前缀树

  1. 每个结点
    • int pass:表示当前结点通过的次数
    • int end:表示该节点作为字符串结尾次数
  2. 作用
    • 空间换时间,通过字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。
    • 高效地存储和检索字符串数据集中的键
    • 可用于自动补完和拼写检查。
  3. 效率上
    • 哈希表时间效率高,但是前缀树可以进行动态查询,即查询一个单词可以只查询一部分即可返回结果
    • 支持查询以x字符作为前缀的数量
  4. 前缀树的基本结构
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;};

前缀树

  1. 【排序相关】


少年,我观你骨骼清奇,颖悟绝伦,必成人中龙凤。
不如点赞·收藏·关注一波

🚩点此跳转到首行↩︎

参考博客

  1. 对数器
  2. 单调队列
  3. 快速链表quicklist
  4. 《深入理解计算机系统》
  5. 侯捷C++全系列视频
  6. 待定引用
  7. 待定引用
  8. 待定引用

更多推荐

【左程云算法全讲5】前缀树、非比较排序

本文发布于:2023-11-15 05:53:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1594800.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:前缀   算法   程云

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!