字典树、并查集

字典树

  • 字典树( T r i e Trie Trie 树)是一种由 “节点” 和 “带有字符的边” 构成的树形结构。
  • 典型应用是用于统计和排序大量的字符串(但不仅限于字符串),经常被搜索引擎系统用于文本词频统计。
  • 优点:最大限度地减少无谓的字符串比较,查询效率比哈希表高。
  • 基本性质
    • 节点本身不保存完整单词。
    • 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的单词。
    • 每个节点出发的所有边代表的字符都不相同。
    • 节点用于存储单词的额外信息(例如频次)。
      在这里插入图片描述
  • 内部实现
    在这里插入图片描述
    • 字符集数组法
      • 每个节点保存一个长度固定为字符集大小(例如 26 26 26)的数组,以字符为下标,保存指向的节点。
      • 空间复杂度: O ( 节点数 ∗ 字符集大小 ) O(节点数 * 字符集大小) O(节点数字符集大小)
      • 查询的时间复杂度: O ( 单词长度 ) O(单词长度) O(单词长度)
      • 适用于较小字符集,或者单词短、分布稠密的字典。
    • 字符集映射法
      • 把每个节点上的字符集数组改为一个映射(词频统计: h a s h   m a p hash\ map hash map,排序: o r d e r e d   m a p ordered\ map ordered map)。
      • 空间复杂度: O ( 文本字符总数 ) O(文本字符总数) O(文本字符总数)
      • 查询的时间复杂度: O ( 单词长度 ) O(单词长度) O(单词长度)
      • 适用性更广。
  • 核心思想
    • 空间换时间,无论是保存树的结构、字符集数组还是字符集映射,都需要额外的空间。
    • 利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。
    • 分组思想:前缀相同的字符串在同一子树中。

LeetCode 练习题

  • 208. 实现 Trie (前缀树)
  • 212. 单词搜索 II

并查集

  • 基本用途:处理不相交集合的合并和查询问题 → 处理分组问题 → 维护无序二元关系。
  • 基本操作:
    • M a k e S e t ( s ) MakeSet(s) MakeSet(s):建立一个新的并查集,其中包含 s s s 个集合,每个集合里只有一个元素。
    • U n i o n S e t ( x ,   y ) UnionSet(x, \ y) UnionSet(x, y):把元素 x x x 和元素 y y y 所在集合合并。要求 x x x y y y 所在的集合不相交,如果相交则无需合并。
    • F i n d ( x ) Find(x) Find(x):找到元素 x x x 所在的集合的代表,该操作也可以用于判断两个元素是否位于同一个集合,只要将它们各自的代表比较一下就可以了。
  • 内部实现
    • 每个集合是一个树形结构。

    • 每个节点只需要保存一个值:它的父节点。

    • 最简单的实现是只用一个 i n t int int 数组 f a fa fa f a [ x ] fa[x] fa[x] 表示编号为 x x x 的节点的父节点,根节点的 f a fa fa 等于它自己。

    • 初始化 M a k e S e t MakeSet MakeSet
      在这里插入图片描述

    • 合并 U n i o n S e t UnionSet UnionSet
      在这里插入图片描述

    • 查询 F i n d Find Find + 路径压缩

      • F i n d ( x ) Find(x) Find(x) 的同时把 x x x x x x 的所有祖先直接连到根节点上,下一次就可以一步走到根了。
        在这里插入图片描述
      class DisjointSet {
      public:
      	DisjoinSet(int n) {
      		fa = vector<int>(n, 0);
      		for (int i = 0;i < n;i++) fa[i] = i;
      	}
      	int find(int x) {
      		if (x == fa[x]) return x;
      		return fa[x] = find(fa[x]); // 压缩路径
      	}
      	void unionSet(int x, int y) {
      		x = find(x), y = find(y);
      		if (x != y) fa[x] = y;
      	}
      private:
      	vector<int> fa;
      }
      

LeetCode 练习题

  • 547. 省份数量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/446294.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【三两波折】指向函数的指针

函数占用内存&#xff0c;在虚拟内存中属于txt段&#xff08;只读&#xff09;&#xff0c;函数也是有地址的。 函数指针的定义&#xff1a; (返回值类型)(*函数指针名)(参数列表) 当我们调用Proc函数时&#xff0c;一般写作&#xff1a; double ans Proc(6, 7.8f); 实际上是C…

Intel® Extension for PyTorch*详细安装教程

最近在研究Intel的pytorch的加速拓展Intel Extension for PyTorch*,但是发现官网的文档全是英文的&#xff0c;不太好找安装教程。所以特此分享Intel Extension for PyTorch*的详细安装教程。 文章目录 一、安装所需系统要求1.1 硬件需求1.2 软件需求 二、准备2.1 安装驱动程序…

搭建nacos集群,并通过nginx实现负载均衡

nacos、eureka、consul、zookeeper等都是常用的微服务注册中心&#xff0c;这篇文章详细介绍一下在Ubuntu操作系统上搭建一个nacos的集群&#xff0c;以及通过nginx的反向代理功能实现nacos的负载均衡。 目录 一、安装nacos 1、安装nacos 2、修改nacos配置文件 3、创建naco…

【Hadoop大数据技术】——HDFS分布式文件系统(学习笔记)

&#x1f4d6; 前言&#xff1a;Hadoop的核心是HDFS&#xff08;Hadoop Distributed File System&#xff0c;Hadoop分布式文件系统&#xff09;和MapReduce。其中&#xff0c;HDFS是解决海量大数据文件存储的问题&#xff0c;是目前应用最广泛的分布式文件系统。 目录 &#x…

智慧公厕_智慧化公厕_智慧的公厕_公厕智慧化_智能智慧公厕_智慧化的公厕

在当代城市发展中&#xff0c;智慧公厕作为公共厕所信息化的主要表现形式&#xff0c;正在以惊人的速度推动着城市公共环境卫生的智慧化进程。作为智慧城市体系的重要组成部分&#xff0c;智慧公厕不仅提供方便、卫生的公共厕所服务&#xff0c;还提升了城市整体形象&#xff0…

H5带建站时长可自定义背景官网/引导页源码

源码名称&#xff1a;带建站时长可自定义背景官网/引导页源码 源码介绍&#xff1a;一款带动态时间显示建站时长的引导页源码&#xff0c;可用于引导页、工作室官网、个人主页等。源码为H5自适应手机端、电脑端。 需求环境&#xff1a;H5 下载地址&#xff1a; https://www.…

java学习(集合)

一.集合(主要是单列集合和双列集合) 1.集合的框架体系&#xff08;两大类&#xff09; 2.collection接口是实现类的特点&#xff1a; 1)collection实现子类可以存放多个元素&#xff0c;每个元素可以是Object 2)有效Collection的实现类&#xff0c;可以存放重复的元素&#…

Vue.js+SpringBoot开发海南旅游景点推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

MVCC------Mysql并发事务控制的工具

这里写目录标题 一.MVCC是什么二.原理1.隐藏的默认字段2.Undo log3.Undo log版本链4. ReadView 三.回答 一.MVCC是什么 MVCC 是 Multi-Version Concurrency Control&#xff08;多版本并发控制&#xff09;的缩写&#xff0c;是数据库系统中常用的一种并发控制方法。在MVCC 中…

高效管理百万级数据:MySQL备份与恢复实战指南

简介 在当今数字化时代&#xff0c;数据是企业不可或缺的核心资产之一&#xff0c;而MySQL作为一种流行的关系型数据库管理系统&#xff0c;其百万级数据的高效管理显得尤为重要。本实战指南将深入探讨MySQL备份与恢复的关键策略&#xff0c;为您提供全面而实用的解决方案。通…

SpringBoot中RestTemplate 发送http请求

SpringBoot中RestTemplate 发送http请求 引入fastjson <!--fastjson--> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.47</version> </dependency>创建配置文件 新建c…

链表中的经典问题——反转链表

经典问题 对于链表的结构还不太清晰的同学&#xff0c;可以看我的另一篇文章&#xff0c;实践总结&#xff1a;一篇搞懂链表——单链表和双指针技巧 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 方法一&#xff0c;迭代法…

牛客周赛 Round 36

赛况 C题可惜&#xff0c;比赛时模拟没有想明白&#xff0c;只对了一半&#xff0c;赛后看了大佬们的题解后恍然大悟&#xff0c;而F题是压根没思路&#xff0c;况且F题部分分也比较难拿。 题目列表 A-小红的数位删除 思路 将读入的数字整除10做三次后输出即可 参考代码 #inc…

【数据结构】详解时间复杂度和空间复杂度的计算

一、时间复杂度&#xff08;执行的次数&#xff09; 1.1时间复杂度的概念 1.2时间复杂度的表示方法 1.3算法复杂度的几种情况 1.4简单时间复杂度的计算 例一 例二 例三 1.5复杂时间复杂度的计算 例一&#xff1a;未优化冒泡排序时间复杂度 例二&#xff1a;经过优化…

蓝桥杯备战刷题-滑动窗口

今天给大家带来的是滑动窗口的类型题&#xff0c;都是十分经典的。 1&#xff0c;无重复字符的最长子串 看例三&#xff0c;我们顺便来说一下子串和子序列的含义 子串是从字符串里面抽出来的一部分&#xff0c;不可以有间隔&#xff0c;顺序也不能打乱。 子序列也是从字符串里…

5分钟教你使用pyarmnn推理引擎识别一只可爱猫咪~

视频 5分钟教你使用pyarmnn推理引擎识别一只可爱猫咪&#xff5e; 添加仓库 sudo apt install software-properties-common sudo add-apt-repository ppa:armnn/ppa sudo apt update 安装pyarmnn sudo apt-get install -y python3-pyarmnn armnn-latest-all python3-pip安装…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Checkbox)

提供多选框组件&#xff0c;通常用于某选项的打开或关闭。 说明&#xff1a; API version 11开始&#xff0c;Checkbox默认样式由圆角方形变为圆形。 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口…

Python(38):Request的data需入参是json,用转换json.dumps(data)

Python接口自动化测试遇到问题:误传str类型给request 一&#xff1a;request接口请求数据用str传参报错&#xff0c;请求响应报错 排查原因&#xff1a;查看服务器报错是Json解析报错。 1.1、如果直接入参&#xff0c;进行request请求的数据&#xff1a; data请求值为&…

C语言---单身狗问题

1.单身狗初阶 这个题目就是数组里面有一串数字&#xff0c;都是成对存在的&#xff0c;只有一个数字只出现了一次&#xff0c;请你找出来 &#xff08;1&#xff09;异或是满足交换律的&#xff0c;两个相同的数字异或之后是0&#xff1b; &#xff08;2&#xff09;让0和每个…

【LeetCode每日一题】299. 猜数字游戏

文章目录 [299. 猜数字游戏](https://leetcode.cn/problems/bulls-and-cows/)思路&#xff1a;代码&#xff1a; 299. 猜数字游戏 思路&#xff1a; 遍历两个字符串 secret 和 guess&#xff0c;若字符既在相同位置上又相等&#xff0c;则位置和数字都正确&#xff0c;对应的 …