当前位置: 首页 > news >正文

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

系列综述:
💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。
🤭结语:如果有帮到你的地方,就点个赞关注一下呗,谢谢🎈🎄🌷!!!
🌈【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. 待定引用
http://www.lryc.cn/news/224722.html

相关文章:

  • 微头条项目实战:新增RequestHeader注解
  • E云管家个微协议框架--新版本的利器
  • 百度上线“文心一言”付费版本,AI聊天机器人市场竞争加剧
  • 代码随想录算法训练营第四十七天丨 动态规划part10
  • 微前端:quankun
  • CSDN每日一题学习训练——Java版(克隆图、最接近的三数之和、求公式的值)
  • XOR Construction
  • K8S容器持续Terminating无法正常关闭(sider-car容器异常,微服务容器正常)
  • Spring 循环依赖
  • MySQL 8.0.13升级到8.0.35记录 .NET
  • flink udtaf 常年不能用
  • 路由汇总的四要点
  • HashMap存值、取值及哈希碰撞原理分析
  • 【SVN】
  • 编程语言,脚本语言
  • 探索双十一:从技术角度剖析电商狂欢节
  • Ubuntu LTS 坚持 10 年更新不动摇
  • Python将多个相同格式的变量存储到列表中
  • 前端字符串转数组对象实现方式-开发bug总结6
  • 99 颜色分类
  • 计算机视觉与深度学习 | 基于GPS/BDS多星座加权图因子优化的行人智能手机导航
  • 低代码平台,业务开发的“银弹”
  • 补偿 FIR 滤波器引入的延迟
  • 图数据库Neo4j详解
  • 系列一、Shiro概述
  • SpringCloudAlibaba——Sentinel
  • Java编写简易rabbitmq生产者与消费者
  • 3.0.3版vsftpd所支持的FTP命令
  • OTA包添加自定义内容
  • Luatos Air700 改变BL0942串口波特率