大连网站关键字优化/微信营销神器

大连网站关键字优化,微信营销神器,网站一定要备案,广州越秀区疫情风险等级目录 前言 一 并查集的思路 二 并查集的代码分析 三 实操我们的代码 四 并查集的代码优化 总结 前言 并查集主要是用来求解集合问题的,用来查找集合还有就是合并集合,可以把这个运用到最小生成树里面 一 并查集的思路 1 并查集的相关的操作…

目录

前言

一  并查集的思路

二  并查集的代码分析 

三  实操我们的代码

四  并查集的代码优化

总结


前言

并查集主要是用来求解集合问题的,用来查找集合还有就是合并集合,可以把这个运用到最小生成树里面


一  并查集的思路

1  并查集的相关的操作
     👉1  查找
函数:find ( a )是用来查你需要查找的元素是在哪一个集合里面的
     👉2  判断是否为同一个集合
函数:issamset( a, b )是用来判断你输入的数字是否在同一个集合里面
     👉3  合并两个集合
函数:Iunion( a, b )是用来合并两个集合

2  并查集是怎么操作的
首先我们有很多个元素

首先可能不是很理解,我来解释一下
就是我们要找这个元素在哪一个集合,我没是不是很不好找,因为名字啥的啥也没有
所以我没就要对这个集合进行命名,才可以找到这个元素在哪里,才可以进行下面的操作
所以最重要的就是给这个集合进行命名

✅👉但是我们要怎么命名呢?
我们只需要找到这个集合里面的代表元素就好了,比如第一个集合的代表元素就是a

✅👉那么这个自环又是用来干什么的呢?
这个自环就是为了方便我没找到那个代表的元素的,你看我们找代表元素的时候,是要利用遍历的,所以当我们只有一个元素的时候,我们就可以进行遍历,遍历到自己了不就是自己就是代表元素么

✅👉如何进行合并操作呢?

首先我没看这个图,就是我没在进行合并的时候,我们先看这个元素个数的大小,我没不难发现,其实a和b都是一样的,所以就是随便a在b的下面或者b在a的下面都可以,最后b进行自环

 ✅👉如果两个进行合并呢?

首先我们可以看每个集合的元素的个数,然后我们看都是2,那么代价都是一样的,所以我们可以b在d下面或者d在b下面,注意是头部和头部进行连接,别底部连接了,那就是错的

✅👉小挂大优化

小挂大的优化其实是用到这种一个比一个多的,那么就是小的挂在大的下面
好了我们介绍完了理论部分,接下来就是怎么用代码进行表示了

✅👉过程的分析
那么我们先画一下图来理解一下

首先我们用一个头部数组father来表示,他这个时候对应的头部是多少
用一个大小数组来表示这个时候这个集合有多大,上面是初始化

0 1合并

首先0的头部变成1了,但是1的头还是1,但是这个0的大小没有改变是因为这个已经没用了,用叉叉表示了,因为此时0不是头了,不再是代表数组


2 3合并

我们不难看到这个就是改变了头,这个3的头变成3了

4 5合并

跟上述一样的 

2 4合并

我们不难看出这个就是把这个对应不是代表值的,直接标记为垃圾值
改变对应的头和大小就好了

1 5合并

最后我们就可以得出这个了
这个就是整个过程的分析 

✅扁平优化
然后其实这里面也有一个扁平优化,就是在执行find的函数的时候,经过的节点直接放到头部

类似于这个图就是我们经过的路的节点不再指向上一个节点直接指向头,但是分支不是,就是例如a的分支不会指向头,除非经过它
扁平优化是一定要有的,小挂大可以没有

二  并查集的代码分析 

#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;
const int N = 1000010;
//long
int n;//deputy array
int father[N];
//children size array
int Isize[N];
//stack
int stack[N];//lnitialize
void bulid() {for (int i = 1; i <= n;i++) {father[i] = i;Isize[i] = 1;}
}//find father way
//里面有扁平化
int find(int x) {//沿途收集的点int Ssize = 0;while (x != father[x]) {//收集节点stack[Ssize++] = x;//继续往上走x = father[x];}//扁平化//沿途已经收集好了,x已经跳到对应节点了while (Ssize > 0) {father[stack[--Ssize]] = x;}return x;
}//sameset way 
bool samset(int x, int y) {return find(x) == find(y);
}//union way
void Iunion(int x,int y) {int fx = find(x);int fy = find(y);//小挂大的优化if (fx != fy) {if (Isize[fx] >= Isize[fy]) {//fx 代表大小  //fy也是大小//在father数组里面改一下就是改了顶点Isize[fx] += Isize[fy];  //modifty sizefather[fy] = fx;         //modifty father}else {Isize[fy] += Isize[fx];father[fx] = fy;}}
}int main() {}

代码对应的旁边是有解析的,读者可以看
我们来总结一下这个代码

首先我们有三个数组
👉1  father数组     2  size数组     3  stack数组
这三个数组分别用来存放头节点,集合大小,给find扁平化暂时放置元素

find函数在这里是尤为重要,因为它涉及了扁平化和每个函数都需要用到它

👉1   bulid数组就是初始化size数组和father数组,size用1初始化,father就是数字了,跟我上述说的思路是一样的

👉2   samset函数就是返回是否是一个集合只要看他们的头是不是一样的就好了,直接return 他们头部是否相等就好了,这个直接调用find函数

👉3   Iunion函数就是把这个数组取出来,我们除了大小要改变还要改变头部,我们可以用if语句来判断他们的头部是否相等,这个需要用到find函数,然后再进行大小化优化,大的放到小的小面就好了,这个也是用if语句进行判断

👉4   find数组就是查找了,注意要用到扁平操作,代码的操作的话就是,我们需要用到一个栈来进行存储我们路上所经过的数字,这个时候是不需要进行修改头部和大小的,因为不是合并,然后再进行扁平化操作,把路径的元素都放出来,连接到对应的头部

三  实操我们的代码

我们用一下我们上述的代码
这个是我们用上述代码进行实操的
代码的分析是跟上面一样的

#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;
const int N = 100001000;
//long
int n;//deputy array
int father[N];
//children size array
int Isize[N];
//stack
int stack[N];//lnitialize
void bulid() {for (int i = 1; i <= n; i++) {father[i] = i;Isize[i] = 1;}
}//find father way
//里面有扁平化
int find(int x) {//沿途收集的点int Ssize = 0;while (x != father[x]) {//收集节点stack[Ssize++] = x;//继续往上走x = father[x];}//扁平化//沿途已经收集好了,x已经跳到对应节点了while (Ssize > 0) {father[stack[--Ssize]] = x;}return x;
}//sameset way 
bool samset(int x, int y) {return find(x) == find(y);
}//union way
void Iunion(int x, int y) {int fx = find(x);int fy = find(y);//小挂大的优化if (fx != fy) {if (Isize[fx] >= Isize[fy]) {//fx 代表大小  //fy也是大小//在father数组里面改一下就是改了顶点Isize[fx] += Isize[fy];  //modifty sizefather[fy] = fx;         //modifty father}else {Isize[fy] += Isize[fx];father[fx] = fy;}}
}int main() {int m;cin >> n >> m;bulid();while (m--) {int z, x, y;cin >> z >> x >> y;if (z == 1) {Iunion(x, y);}else if (z == 2) {if (samset(x, y)) {cout << "Y" << endl;}else {cout << "N" << endl;}}}return 0;
}


四  并查集的代码优化

#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;const int N = 1000000;
int father[N];
int n;void build() {for (int i = 0;i <= n;i++) {father[i] = i;}
}int find(int x) {if (x != father[x]) {//递归的操作,学习过dfs都知道father[x] = find(father[x]);}return father[x];
}bool semset(int x,int y) {return find(x) == find(y);
}void Iunion(int x, int y) {//不管大小集优化了father[find(x)] = find(y);
}int main() {}

这个代码的优化是用到了递归来解决的,注意不需要size数组是因为大挂小是一个不必须的操作,所以就不需要记录大小

👉判断是否在统一集合

跟之前讲述的一样还是用return进行返回

👉查找
这个就是要进行扁平化。就是我们在搜索的过程中直接进行操作,而不是用一个stack进行存储,这个操作是需要进行递归的,就是在挖掘深度之后,进行回溯的时候把上一个深度的值进行赋值,然后最后在返回对应得头节点就好了

👉合并操作

这个也很简单,就是把这个头给进行修改就好了,但是你需要判断是谁合并谁先


总结

我们主要讲述了并查集
并查集为什么叫并查集呢?
其实就是合并和查找在集合里面进行操作
然后我们涉及了几个功能就是查找,合并,判断是否在同一集合
这集合代码的实现和讲解在上面有

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulnhub靶场之【digitalworld.local系列】的development靶机

前言 靶机&#xff1a;digitalworld.local-devt-improved&#xff0c;IP地址为192.168.10.10 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 kali采用VMware虚拟机&#xff0c;靶机选择使用VMware打开文件&#xff0c;都选择桥接网络 这里官方给的有两种方式&…

Stiring-PDF:开源免费的PDF文件处理软件

Stiring-PDF是一款开源免费且比较好用的PDF文件处理工具。 Stiring-PDF官网网址为&#xff1a;https://www.stiringpdf.com/。Stiring-PDF是一款专业的PDF文件处理工具&#xff0c;支持Windows和macOS操作系统&#xff1b;提供丰富的PDF编辑和转换功能&#xff0c;适用于日常工…

SpringCloud系列教程(十二):网关配置动态路由

除了token以外&#xff0c;还有一个很实用的功能就是把网关的路由配置放到nacos上&#xff0c;并且修改路由配置的时候&#xff0c;网关服务可以动态的更新&#xff0c;这样我们在调整网络配置的时候&#xff0c;就不用重启服务了。所以我们需要用到两个重要的类&#xff1a;Na…

ES6 特性全面解析与应用实践

1、let let 关键字用来声明变量&#xff0c;使用let 声明的变量有几个特点&#xff1a; 1) 不允许重复声明 2) 块儿级作用域 3) 不存在变量提升 4) 不影响作用域链 5) 暂时性死区 6&#xff09;不与顶级对象挂钩 在代码块内&#xff0c;使用let命令声明变量之前&#x…

如何使用 Ollama 的 API 来生成聊天

如何使用 Ollama 的 API 来生成聊天 简介 生成聊天 生成聊天的示例 加载模型 卸载模型 简介 Ollama 提供了一个 RESTful API&#xff0c;允许开发者通过 HTTP 请求与 Ollama 服务进行交互。这个 API 覆盖了所有 Ollama 的核心功能&#xff0c;包括模型管理、运行和监控。本…

学到什么记什么(25.3.3)

Upload-labs 今日重新做了一下文件上传漏洞&#xff0c;这里第一题之前采用直接抓包改后缀名.jpg为.php&#xff0c;再写入一句话<?php phpinfo();?>然后放行&#xff0c;得到图片地址&#xff08;可复制&#xff09;&#xff0c;本来直接访问图片地址即可得到敏感信息…

【三维生成】StarGen:基于视频扩散模型的可扩展的时空自回归场景生成

标题&#xff1a;《StarGen: A Spatiotemporal Autoregression Framework with Video Diffusion Model for Scalable and Controllable Scene Generation》 项目&#xff1a;https://zju3dv.github.io/StarGen 来源&#xff1a;商汤科技、浙大CAD、Tetras.AI 文章目录 摘要一、…

【一个月备战蓝桥算法】递归与递推

字典序 在刷题和计算机科学领域&#xff0c;字典序&#xff08;Lexicographical order&#xff09;也称为词典序、字典顺序、字母序&#xff0c;是一种对序列元素进行排序的方式&#xff0c;它模仿了字典中单词的排序规则。下面从不同的数据类型来详细解释字典序&#xff1a; …

【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(成功版)

【Linux】【网络】UDP打洞–&#xff1e;不同子网下的客户端和服务器通信&#xff08;成功版&#xff09; 根据上个文章的分析 问题可能出现在代码逻辑上面 我这里重新查找资料怀疑&#xff1a; 1 NAT映射可能需要多次数据包的发送才能建立。 2 NAT映射保存时间太短&#xff…

C++ Primer 动态数组

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

【Qt】ffmpeg照片提取、视频播放▲

目录 一、图像的成像原理&#xff1a; RGB成像原理&#xff1a; YUV成像原理&#xff1a; 二、多线程 三、ffmpeg解码&#xff08;照片提取&#xff09; 1.准备工作 &#xff08;1&#xff09;在工程文件夹里面新建三个文件夹 &#xff08;2&#xff09;在main函数中加…

【QGIS二次开发】地图显示与交互-01

1. 系统界面设计 设计的系统界面如下&#xff0c;很好还原了QGIS、ArcGIS等软件的系统界面&#xff0c;充分利用了QT中顶部工具栏、菜单栏、底部状态栏&#xff0c;实现了图层管理器、鹰眼图、工具箱三个工具面板。 菜单栏、工具栏、工具箱集成了系统中实现的全部功能&#x…

Skynet入门(一)

概念 skynet 是一个为网络游戏服务器设计的轻量框架。但它本身并没有任何为网络游戏业务而特别设计的部分&#xff0c;所以尽可以把它用于其它领域。 设计初衷 如何充分利用它们并行运作数千个相互独立的业务。 模块设计建议 在 skynet 中&#xff0c;用服务 (service) 这…

threejs:用着色器给模型添加光带扫描效果

第一步&#xff1a;给模型添加光带 首先创建一个立方体&#xff0c;不进行任何缩放平移操作&#xff0c;也不要set position。 基础代码如下&#xff1a; 在顶点着色器代码里varying vec3 vPosition;vPosition position;获得threejs自动计算的顶点坐标插值&#xff08;也就…

Spring Boot如何利用Twilio Verify 发送验证码短信?

Twilio提供了一个名为 Twilio Verify 的服务&#xff0c;专门用于处理验证码的发送和验证。这是一个更为简化和安全的解决方案&#xff0c;适合需要用户身份验证的应用。 使用Twilio Verify服务的步骤 以下是如何在Spring Boot中集成Twilio Verify服务的步骤&#xff1a; 1.…

【Linux操作系统】VM17虚拟机安装Ubuntu22.04,图文详细记录

1.双击桌面的 VMware Workstation17 Player&#xff0c;点击“创建新虚拟机”&#xff0c;如下图所示。 2.选择“稍后安装操作系统”&#xff0c;点击“下一步”。如下图所示。 3.客户机操作系统选择“Linux”&#xff0c;版本选择“ Ubuntu 64位”&#xff0c;然后点击“下一…

Linux--基础命令3

大家好&#xff0c;今天我们继续学习Linux的基础命令 mv命令 mv命令是move的缩写&#xff0c;可以用来移动文件或者将文件改名 move(rename) files&#xff0c;经常⽤来备份⽂件或者目录 语法: mv [ 选项 ] 源⽂件或目录 目标⽂件或目录 mv src[文件、目录] dst[路径、文…

【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.2.3案例:电商订单日志每秒10万条写入优化

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 Elasticsearch批量写入性能调优实战&#xff1a;2.2.3 案例&#xff1a;电商订单日志每秒10万条写入优化1. 原始架构与瓶颈分析1.1 初始集群配置1.2 性能瓶颈定位 2. 全链路…

统计Excel列中某值出现的次数

统计Excel列中某值出现的次数&#xff1a; 1、COUNTIF 函数用于计算满足特定条件的单元格数量。假设要统计 A 列中值为 “苹果” 出现的次数&#xff0c;在其他单元格中输入公式&#xff1a;COUNTIF(A:A,“苹果”)。其中&#xff0c;A:A表示要统计的范围是 A 列&#xff0c;&q…

Compose Multiplatform+Kotlin Multiplatfrom 第四弹跨平台

文章目录 引言功能效果开发准备依赖使用gradle依赖库MVIFlow设计富文本显示 总结 引言 Compose Multiplatformkotlin Multiplatfrom 今天已经到compose v1.7.3&#xff0c;从界面UI框架上实战开发看&#xff0c;很多api都去掉实验性注解&#xff0c;表示稳定使用了&#xff01;…