Algorithm 并查集的粗劣想法(易懂)

贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal's algorithm) 克鲁斯卡尔算法(Kruskals algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程可以用一个图来表示。这里的图的选择借用了Wikipedia上的那个。非常清晰且直观。 首先第一步,我们有一张图,有若干点和边如下图所示:第一步我们要做的事情就是将所有的边的长度排序,用排序的结果作为我们选择边的依据。这里再次体现了贪心 阅读详情

这里我自己说一下我自己学的感受吧 。

  1. int findset(int a)  //不带路劲压缩    
  2. {    
  3.     while(pa[a] != a)    
  4.     {    
  5.         a = pa[a];    
  6.     }    
  7.     return a;    
  8. }    
  9.   
  10. void union_nodes(int a, int b)      //集合合并    
  11. {    
  12.     int a1 = findset(a);    
  13.     int b1 = findset(b);  
  14.     if(a1 != b1)        //这个判定条件可选,主要是为了防止findset路径压缩的时候出现死循环  
  15.     {  
  16.         pa[a1] = b1;        //如果存的是有向图,并且做题时集合中元素的顺序很重要,不能忽略,那么这里应该用"pa[a] = b;"   
  17.     }  
  18. }   
  19. 当时我刚刚接触的时候,也是看不太懂,然后自己去模拟一下过程,我粗劣的看成以下的结论

假设这里 有 甲乙丙丁茂, 这5个人,现在 你我要输入几组关系 ,然后询问某两个人是否有关系在

甲->茂 ,   丙->茂 ,  乙->丁

建一个数值 来表示 这五个人 【甲】【乙】【丙】【丁】【茂】

                                  下标是  1        2        3        4       5  

甲->茂 你可以看成是茂是甲的儿子或者是父亲(这里虽然是findfather但是我觉得 findson也是蛮好理解的)

            这样 你就将  1 对应的【甲】改成茂 

                                             【茂】【乙】【丙】【丁】【茂】

                                   下标是  1        2        3        4       5  

同样的  丙->茂 改成             【茂】【乙】【茂】【丁】【茂】

                                    下标是  1        2        3        4       5  

           乙->丁 改成              【茂】【丁】【茂】【丁】【茂】

                                    下标是  1        2        3        4       5  

改完之后 比如你要查询  甲丙有没有这样关系在 当你输入原本 在 1  ,3 两个值时你发现 甲不在了 你可以理解成 甲不知道你去问一下和他有关系的茂看看 丙也一样 说我也不知道 你去问一下茂吧 就这样他们同时到了5 茂 发现5的值就是茂 你就可以理解成茂并没有儿子 他是单独一人  而甲 , 丙都找到了茂,这样就说明他们有同样的 一个后代 “茂”所以他们是有关系的


当询问 甲 乙 有没有关系 同样的过程 。 看到原本在1的甲 变成了茂 那我们就去 5 看看茂 发现茂没有变化过

询问乙的时候 ,发现乙变成了丁 这样询问4 丁,发现丁就丁。那么丁和茂后面也没有后代去询问了,明显丁茂不存在关系,所以他们没有关系。

算法课6-并查集Union Find 为了提高查找速度,三种方法: Link by size Link by rank(height) Path Compression 并查集的典型应用: Percolation 总时间限制: 1000ms 内存限制: 32768kB 描述 定义一个N行N列的矩阵,矩阵中的每个元素是个方格,每个方格有两种可能的状态:开通的或关闭的。初始时,所有方格都是关闭的。输入数据的每一步会指... 阅读详情

相关推荐

LLC谐振电路增益公式推导

LLC谐振电路增益公式理解

金凯*博客 1万+

algorithm——并查集

目录一:并查集解释二:例题 一:并查集解释 转的一个超级有意思,好懂的并查集解释。 原链接在此 点此处 故事读完,并查集就会了~~~~~ 江湖上散落着各式各样的大侠,有上千个之多。他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架。但大侠们有一个优点就是讲义气,绝对不打自己的朋友。而且他们信奉“朋友的朋友就是我的朋友”,只要是能通过朋友关系串联起来的,不管拐了多少个弯,都认为是自己人。这样一来,江湖上就形成了一个一个的帮派,通过两两之间的朋友关系串联起来。

qq_45697900的博客 277

解决vLLM安装卡在vllm-nccl-cu12依赖项的实战指南

本文提供了解决vLLM安装过程中卡在vllm-nccl-cu12依赖项的详细指南。通过分析CUDA版本兼容性问题,介绍了三种实用解决方案:安装指定版本vLLM、手动安装nccl-cu12依赖以及升级CUDA到12.x版本,并特别针对离线环境提供了安装建议,帮助开发者顺利完成vLLM的安装部署。

weixin_29098367的博客 514

并查集(Union-Find Algorithm),看这一篇就够了

动态连接(Dynamic connectivity)的问题 所谓的动态连接问题是指在一组可能相互连接也可能相互没有连接的对象中,判断给定的两个对象是否联通的一类问题。这类问题可以有如下抽象: 有一组构成不相交集合的对象 union: 联通两个对象 find: 返回两个对象之间是否存在一条联通的通路 ˇ 在使用union-find处理动态连接的问题时,我们一般将这一组对象抽象...

正西风落叶下长安 3万+

一个测试工程师走进一家酒吧……

一个测试工程师走进一家酒吧,要了一杯啤酒;一个测试工程师走进一家酒吧,要了一杯咖啡;一个测试工程师走进一家酒吧,要了 0.7 杯啤酒;一个测试工程师走进一家酒吧,要了-1 杯啤酒;一个测试...

字节跳动技术团队官方博客 4886

SEED-VII 实战指南:如何利用多模态脑电图数据提升情感识别精度

本文提供了SEED-VII多模态脑电图数据集的实战指南,详细介绍了如何利用该数据集提升情感识别精度。内容涵盖数据获取、预处理、特征提取,以及构建多模态融合神经网络模型的关键步骤,并强调了被试者独立评估的重要性,为情感计算研究者提供了从数据到模型的全流程解决方案。

weixin_29196891的博客 318

【Algorithm】并查集

朴素并查集 维护size的并查集 维护到祖宗节点距离的并查集 食物链

CodeEcho 170

Conformal LEC逻辑等价性检查介绍和参考脚本

分为三个产品:Conformal L、Conformal XL、Conformal GXL。L是功能性检查,XL支持复杂数据通路的综合和APR优化,GXL支持定制的stdcell和定制memory的检查。Cadence Conformal Equivalence Checker,就是常说的LEC,可以用来验证RTL、门级网表、甚至spice网表的逻辑等价性。do文件是conformal的脚本文件,可以由综合工具(RTL Compiler/Genus)自己产生(write_do_lec),也可以手写。

NanDigits的博客 7250

【Algorithm】并查集的实现与优化

1 前言 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来 表示。 常见一些问题:求连通分支数,最小生成树 Kruskal 算法等,基本上都要使用到并查集 2 并查集的简单实现 并查集采用森林的结构,而表示一个森林,维护一个父节点序列即可,我们可以用一个 key-value 的数据结构来表示每一个节点以及父节点,下面给出一种无任...

zzy0006的博客 333

国科大学习资料--高级软件工程-复习题概念解释答案

国科大学习资料–高级软件工程(罗铁坚 魏峻 刘丹)-复习题概念解释答案 1. 敏捷开发方法与Scrum方法 a.敏捷是一种强调轻量的过程方法论,它强调拥抱变化而不是与之对抗,通过有效的沟通发挥群体的智慧。敏捷方法采用迭代/增量开发的过程模型。敏捷宣言是:个体和交互高于流程和工具;工作的软件高于详尽的文档;客户合作高于合同谈判;响应变化高于遵循计划。 虽然右边的也有价值,但是认为左边的更有价值。 b.Scrum(Schwaber和Beedle)是管理两个披萨规模(4-9人)的软件开发团队的方法,它高频率的短会

无名何许人的博客 1444

基于大语言模型的学术论文阅读辅助分析系统的研究与应用

本文提出了一种基于大语言模型的学术论文阅读辅助分析系统PaperMind,旨在解决传统学术阅读方式面临的三大困境:信息定位困难、跨学科知识断层和手动整理耗时。系统采用检索增强生成(RAG)架构,通过PDF文档解析、语义分割、向量嵌入与FAISS向量检索相结合的技术路线,构建了完整的文档处理流水线。实验结果表明,系统在文档加载分割、向量检索与问答生成环节均达到预期性能指标,检索命中率最高达98%。该系统为学术文献智能化处理提供了可复用的技术方案,有效解决了通用大语言模型在学术场景中的幻觉引用、归因能力不足等问

huanghm88的专栏 93

【algorithm】算法学习--并查集

树根的编号就是整个集合的编号。每个节点存储它的父节点,p[x]表示x的父节点。对于三种动物互相捕猎的关系,可以将当前节点与根节点的距离进行模3处理;操作2是判断a吃b的,依托与我们起初建立的模3模型,这里的a吃b其实就是d[a]-d[b]=1。只需要判断d[a]与d[b]都模3后的值是否一样;合并X和Y的集合,就是相当于让其中一个树插到另一个数根节点下面。如何合并两个集合:p[x]是x的集合编号,p[y]是y的集合编号。完成这道题目的我用了很长的时间,看y总的视频也是看了很久才看懂。=1那么说的就是假话。

明璐花生牛奶的博客 374

ISOLAR Autosar BSW 配置 之 Com

Autosar ISOLAR Bsw Configuration 之 Com

qq_42262743的博客 453

Algorithm 并查集

模板 例题:HDOJ 1213 How Many Tables #include <iostream> using namespace std; const int MAX=1001; int set[MAX]; void init(int N) { for(int i=1;i<=N;i++) { set[i]=i;//把每个元素的初始根设置为自己 //在本题中的意思是每个人最初单独一桌 } } int Find_set(int x) { return x==s

功不唐捐 288

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

并查集、Kruskal‘s Algorithm

并查集 并查集是一种树形的数据结构,主要用于处理一些**不交集(Disjoint Sets)**的合并及查询问题。**联合-查找算法(union-find algorithm)**定义了两个用于此数据结构的操作: Union:将两个子集合并成同一个集合。 ...

没有经历过长夜痛哭的人,不足以谈人生。 251

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Union-Find Algorithm-并查集

并查集

ggggggzzzzz的博客 506

并查集算法 | Union-Find Algorithm

Union-Find Algorithm即并查集算法,常用于解决 动态连通性,判断有向无圈图等问题。根本上讲,Union-Find算法就和他的名字一样是一种对不相交集数据结构执行两个有用操作的算法,不相交集数据结构是跟踪一组元素的数据结构,这些元素被划分为多个不相交(非重叠)子集。在这篇文章中,我们将讨论不相交集数据结构的应用。该应用是检查给定图形是否包含循环。我们跟踪一维数组中的子集,我们称之为 parent[]。以下图为例:对于每条边,用边的两个顶点制作子集。

嗅探网的博客 883

【Algorithm】并查集的基础知识

一、定义 Union(合并)、Find(查找)、Set(集合) 合并:合并两个集合。 查找:判断两个元素是否在一个集合。 对于同一个集合来说只存在一个根结点,且将其作为所属集合的标识。 二、基本操作 1、初始化 for(int i = 1; i <= n; i++) { father[i] = i; // 令 father[i] 为 -1 也可,此处以 father[i] = i 为例 } 2、查找 由于规定同一个集合中只存在一个根结点,因此查找操作就是对给定的结点寻

CodeEcho 118

Algorithm: Union Find (并查集查找)

Union Find是基于disjoint set的原理去判断一个图中元素之间的连通性或者说关联性的方法。关于Disjoint Set的原理,可以参考这篇文章:https://blog.youkuaiyun.com/firehotest/article/details/53503624其中提到了,生成最小生成树的kruskal 算法是基于disjoint set的基础上的。disjoint set的基本操作就...

Steven Li's Zone 783

并查集类的c++封装,比较union_find algorithm四种实现方法之间的性能差别

并查集类的c++封装,比较union_find algorithm四种实现方法之间的性能差别

manthink2005的专栏 1922

并查集

在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(Union-find Algorithm)定义了两个用于此数据结构的操作: Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。 Union:将两个子集合并成同一个集合。 由于支持这两种操作,一个不相交集也常被称为联合-查找数据结构(Union-find Data Structure)或合并-查找集合(Merge-find Set)。 为了更加精确的.

平凡小智 847

并查集 Union-Find

单看“并查集”这个名字可能没什么概念,它的英文名(Union-Find) 可能还稍微好理解一点。看看官方一点的描述 (豆包生成^_^):初始化(Initialize):将每个元素初始化为独立集合,每个集合的代表元(根节点)为自身。查找(Find):确定某个元素所属的集合,返回该集合的代表元(根节点)。合并(Union):将两个不同的集合合并为一个集合。浅浅总结并查集算法的设计目标是高效处理集合的动态合并与查询问题,其核心思想是通过树形结构表示集合,每个节点存储其父节点信息,根节点作为集合的标识。

TS & c++ 1218

union find并查集 (algorithm course Of Princeton )

Week 1          第一周:unionfind problem (并查集问题)          解决动态连接问题 目标:   Quick find 算法 解决动态连接问题 解释:          快速查找算法思想是用一个数组来代表可能的节点,如果两个不同下标中的值相同的话则说明两个点相连,如果拥有不同的id,说明他们不相连。

梦在waterloo 914

python 并查集算法中的按秩联合和路径压缩(Union By Rank and Path Compression in Union-Find Algorithm)

当为元素 x 调用find()时,将返回树的根。路径压缩的思想是将找到的根作为 x 的父节点,这样我们就不必再次遍历所有中间节点。如果 x 是子树的根,则 x 下所有节点的路径(到根)也会压缩。事实证明,最终的摊销时间复杂度为 O(α(n)),其中 α(n) 是逆阿克曼函数,其增长非常稳定(当 n

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1079

LeetCode - 并查集类题目总结

情侣牵手

much efforts, much luck 817

Algorithm 关键路径算法 PAT How Long Does It Take (25)

#include #include #include #include #include using namespace std ; #define MAXN 100 int map[MAXN][MAXN] ; int in_cout[MAXN] ; int e_time[MAXN] ; int arry[MAXN] ; int n , e , n_s = 1 ,sum ; int max(

没有进步就是退步 1717
上一篇: Algorithm 最短路径 简单的代码
下一篇: Algorithm 网络流最大流(代码)(Edmond-Karp算法)
CallMeJiaGu
博客等级 码龄12年 149粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值