并查集C++实现

集合——并查集的C++实现及优化 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 并查集的C++实现及优化前言一、什么是并查集(Disjoint-set)三、C++实现一方法一:方法二:五、C++实现二(优化版)总结 前言 提并查集(Disjoint-set) 的代码非常简洁,但是功能却很强大。 关于并查集,这里有一篇文章超有爱的并查集~,讲得非常好,但是只使用了并查集两个主要优化中的"路径压缩"优化,并且我觉得很多情况下采用递归的写法要比采用循环的写法要易懂很多。本文将使用C++实现并查集并使用“按秩合并”和”路径压 阅读详情

这篇比较简单,看看书就会了,需要注意的是这里使用静态数组实现的集合的,而且默认数组的下标即为存储的集合元素。

UnionFindSet.h

#pragma once
#ifndef UNIONFINDSET_H
#define UNIONFINDSET_H
#include<iostream>
using std::swap;
using std::cout;
using std::endl;

//并查集类
class UnionFindSet
{
public:
	UnionFindSet(int sz);//初始化并查集父节点数组
	~UnionFindSet();
	void GenerentSet(int a[], int number, int parent);//生成一个父节点为root,且有number个数量的子节点的集合
	int Find(int val);//搜索元素val所在的set
	void Merge(int root1, int root2);//如果两个集合不重叠,就把集合root2并入root1中
	void WeightenMerge(int root1, int root2);//加权融合两个集合,将节点多的融合进节点少的
	void PrintParent();
private:
	int size;
	int* parent;
};

UnionFindSet::UnionFindSet(int sz)
{
	parent = new int[sz];
	if (parent == nullptr) { exit(-1); }
	size = sz;
	for (int i = 0; i < size; i++)//默认并查集的每个元素的父节点都为-1
		parent[i] = -1;
}

UnionFindSet::~UnionFindSet()
{
	if (parent) delete[]parent;
}

//生成一个父节点为root,且有number个数量的子节点的集合
void UnionFindSet::GenerentSet(int a[], int number, int root)
{
	for (int i = 0; i < number; i++)
		parent[a[i]] = root;
}

//搜索元素val所在的set
int UnionFindSet::Find(int val)
{
	if (parent[val] < 0) return val;
	else return Find(parent[val]);
	//while (parent[val] > 0)
	//	val = parent[val];
	//return val;
}

//如果两个集合不重叠,就把集合root2并入root1中
void UnionFindSet::Merge(int root1, int root2)
{
	for (int i = 0; i < size; i++)
	{
		if (root1 == parent[i])
		{
			parent[root2] = i;
			return;
		}
	}
}

//加权融合两个集合,将节点多的融合进节点少的
void UnionFindSet::WeightenMerge(int root1, int root2)
{
	int num1 = 0, num2 = 0;
	for (int i = 0; i < size; i++)	//统计两个集合拥有的节点数量
	{
		int x;
		if (parent[i] > 0) x = Find(parent[i]);
		else x = i;
		if (x == root1) num1++;
		if (x == root2) num2++;
	}
	if (num1 < num2) { swap(root1, root2); }//如果num1小于num2,交换root1与root2的值,因为我们需要调用Merge函数
	Merge(root1, root2);
}

void UnionFindSet::PrintParent()
{
	for (int i = 0; i < size; i++)
		cout << parent[i] << " ";
	cout << endl;
}



#endif // !UNIONFINDSET_H

main.cpp

#include"UnionFindSet.h"


int main()
{
	UnionFindSet myset(10);
	int a[] = { 3,4,5 };
	int b[] = { 6,7 };
	int c[] = { 8,9 };
	myset.GenerentSet(a, 3, 0);
	myset.GenerentSet(b, 2, 1);
	myset.GenerentSet(c, 2, 2);
	myset.PrintParent();
	myset.Merge(0, 1);
	myset.PrintParent();
	myset.WeightenMerge(0, 2);
	myset.PrintParent();
	return 1;
}

 

C++ 实现并查集 个人来自不同的学校,起先互不相识,每个学生都是一个独立的小团体,现给这些学生进行编号:{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};给以下数组用来存储该小集体,数组中的数字代表:该小集体中具有成员的个数。毕业后,学生们要去公司上班,每个地方的学生自发组织成小分队一起上路,于是:西安学生小分队s1={0,6,7,8}沿着数组表示的树形关系往上一直找到树的根,如果根相同表明在同一个集合,否则不在。遍历数组,数组中元素为负数的个数即为集合的个数。担任队长,负责大家的出行。个人,总共两个朋友圈。 阅读详情

相关推荐

GN算法边介数计算优化指南:如何提升大规模社交网络分析效率

本文深入探讨了GN算法在大规模社交网络分析中的核心瓶颈——边介数计算,并提供了从算法优化到工程部署的完整性能提升方案。通过引入Brandes算法、并行计算、增量更新及分布式处理等策略,有效解决了传统GN算法在处理百万级网络时效率低下的问题,为社交网络社区划分等实际应用提供了高效解决方案。

weixin_29196613的博客 485

并查集(简单版、完整版C++实现)

相关英语 vertex:顶点 vertices:顶点(复数形式) Disjoint Sets:不相交集合 Union Find:并查集 并查集例子 与其追踪具体形式,不如追踪每个元素所属的集合 不需要知道2、4是否直连,反正他们是通的(可以直接/间接相通)(因为在同一个set) 当连接2-4,事实上这个set没有任何的改变。 {0,1,2,4,6}, {3,5} --...

bijingrui的博客 4392

104报文解析工具

可选择包含报文的文本文件或日志文件进行解析,可选择按条数范围或时间范围,输出结果可以在报文解析显示区,也可以输出到文件。可以对文本内容的报文文件进行高级分析,包括遥信遥测等通讯数据的具体信息,通讯帧的统计,通讯次数的统计,各种错误的分析,报文的定位功能,传输的文件具体内容等。输入完成后点击工具栏的解析报文按钮或使用右键菜单的解析就可以对报文进行解析。在报文输入区输入待解析报文并解析后,解析结果就显示在报文解析显示区和报文定位展示区及报文定位条目区。当有多条报文解析后,可以通过报文列表树具体定位某条报文。

XZHOUMIN的博客 5947

C++实现并查集

当我们需要判断一个集合中的两个元素x,y是否同属于一个集合时,我们可以使用并查集的方法进行查询。其核心思路在于将一个数组转化成一棵树的形式:每个节点初始时都认为是一棵独立的树,当两个节点同属于一个集合时,我们可以将其中一个节点指向另一个节点用于表示两个节点同属于一个集合。因此当我们想要确定两个节点是否同属于一个子集时,我们只需要比较他们二者的即可。因此并查集中的基础操作有两个:find判断两个节点是否相同;union合并两个相同的节点。

L.Wzz的博客 1668

手把手教你用OpenCalib完成激光雷达与相机联合标定:从数据准备到结果可视化

本文详细介绍了使用OpenCalib工具链中的lidar2camera模块完成激光雷达与相机联合标定的全流程,包括数据准备、标定命令执行、结果验证与可视化。通过实战指南,帮助读者掌握工业级标定技术,提升自动驾驶和机器人领域的传感器融合精度。

weixin_30872499的博客 398

在centos7部署k8s搭建kubernetes集群

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找

山东梅长苏 1万+

C++ 并查集

C++并查集

YMWM_的博客 1197

高效与灵活相结合:Verilog编写的跨时钟域循环缓冲控制器解析

循环缓冲区,也被称作循环队列、环形缓冲区,是一种数据结构,其主要特性是使用一个固定大小的缓冲区作为数据的存储空间,这个缓冲区在逻辑上被视作是首尾相接的。虽然Verilog是一种常用的硬件描述语言,被广泛应用在FPGA和ASIC设计中,但是在描述循环缓冲区时,它并没有提供一种直接且灵活的方式来指定循环缓冲区的参数,如字长、缓冲区深度、缓冲区数量等。这给硬件设计带来了一定的不便。同时,该控制器的设计也充分考虑了硬件资源的利用率,通过优化的算法和数据结构,使得在实现高性能的同时,也能够有效地节省硬件资源。

qq_38334677的博客 1220

c++ 并查集详解

获取代表元素:获取某个集合的代表元素(根节点)。在并查集中,每个集合都有一个代表元素,该代表元素是该集合中任意元素的祖先节点。通过遍历该元素的父指针,可以找到其所在的集合的代表元素(根节点)。首先找到需要合并的两个集合的代表元素(根节点),然后将其中一个集合的代表元素的父指针指向另一个集合的代表元素,从而实现合并。路径压缩:在查找过程中,将某个元素的父指针直接指向其所在集合的根节点,以减少后续查找的时间复杂度。通过遍历该元素的父指针,可以找到其所在的集合的代表元素(根节点),从而判断该元素是否属于该集合。

weixin_72389218的博客 2583

深入YOLOv8内部核心:用RepNCSPELAN4深度重构主干网络,即插即用的高效涨点方案

本文提出了一种改进YOLOv8目标检测模型的方法,通过在YOLOv8中引入RepNCSPELAN模块来提高检测性能。该模块融合了RepVGG重参数化思想与CSP-ELAN结构,在保持推理速度的同时增强特征表达能力。实验结果表明,改进后的RepNCSPELAN-YOLOv8相比原模型在多项指标上均有提升:准确率从0.84提高到0.86,召回率从0.72提升至0.81,mAP50和mAP50-95也分别提高了0.06和0.04。文章详细介绍了模块设计原理和移植步骤,包括配置文件创建、代码修改等关键环节,为YOL

FJN110的博客 185

Python爬虫教程:抓取电商网站评论(以淘宝和京东为例)

通过本文的介绍,我们学会了如何使用Python编写爬虫,抓取淘宝和京东等电商平台的商品评论数据。我们介绍了如何使用电商平台提供的开放API以及如何通过模拟浏览器来抓取动态加载的数据。此外,我们还讨论了如何应对反爬虫技术,如何存储抓取的数据等。爬取电商平台的数据是一个强大的工具,能够为市场分析、消费者行为研究、产品优化等领域提供有力的支持。然而,在使用爬虫技术时,我们必须遵循法律法规,尊重平台的隐私政策,避免滥用数据。

2201_76125261的博客 1737

并查集C++实现——算法设计与分析,含代码解释

介绍什么并查集,以及如何优化并查集,加上代码讲解

m0_56222998的博客 1828

【实战】LLaMA-Factory 如何做 LLM 的多轮对话微调

LLaMA-Factory 作为一个广受欢迎、易于使用的 LLM 微调框架,为开发者提供了便捷的途径来针对特定任务(包括多轮对话)优化模型。本文将深入探讨 LLaMA-Factory 如何支持多轮对话微调,涵盖其基本概念、数据准备、核心机制、评估方法等。简单来说,多轮对话是指包含两个或更多轮次(Turn)的交互过程,其中每一轮通常包含用户的一个输入和模型的一个输出。后续轮次的回应通常依赖于前面轮次的对话内容。模型需要理解并记忆对话历史。

kakaZhui的博客 1309

并查集的C++代码实现

并查集的C++代码实现并查集的初始化操作并查集的查找操作并查集的合并操作并查集的应用范围判断图的连通分量数和连通性判断图是否有环实现Kruskal算法 去年408的大纲发生比较大的变化,其中就包括之前从大纲中删除的并查集,没错,它又回来了。后来我为了应付初试,只是稍微了解了一些概念性的知识,没有过度深究,现在初试考完了,复试可能会考到代码实现,因此好好学习一下,做些笔记。 并查集其实就是集合的一种表示方法,它是借助我们在树中学过的知识——双亲表示法处理集合的,即去集合中的一个结点作为根节点,后来的结点指向该

学习永无止境 2672

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

并查集的C++实现及优化

前言 并查集(Disjoint-set) 的代码非常简洁,但是功能却很强大。 关于并查集,这里有一篇文章超有爱的并查集~,讲得非常好,但是只使用了并查集两个主要优化中的"路径压缩"优化,并且我觉得很多情况下采用递归的写法要比采用循环的写法要易懂很多。本文将使用C++实现并查集并使用“按秩合并”和”路径压缩“优化并查集。我们先大概了解什么是并查集。 什么是并查集(Disjoint-set) 对于一个...

IT小白的博客 483

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

c++高效实现并查集

C++实现并查集 题意:输入n,m。分别代表n个节点和m个节点连接,接下来m行,每行两个数,代表两个节点相连。节点编号从1-n,请判断所有节点的组成的集合的个数。 思路: 典型的连通图问题,题意就是求所有节点的连通图的个数。可通过树的合并实现。首先:初始化n个节点到n棵树,每次遍历一对相连关系,对节点进行寻根,如果他们根相同,则是一个数,无需合并,否则将其中一个节点的根挂到另一个节点的根上,最后判...

weixin_43011522的博客 540

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

并查集实现C++

//数组实现并查集 #include<iostream> #include<vector> #include "vectorOutput.h" using namespace std; class DisjSets { public: explicit DisjSets(int numElements); int find(int x) const;//访问函数,找到根节点 //int find(int x);//修改函数 void unionSets(int

sakumashirayuki的博客 194

并查集(C++实现)

由于我使用并查集来解决Kruskal算法(最小生成树),至于并查集的定义我并不是特别熟悉,看下面的并查集的实现过程应该对并查集有所了解。 并查集在Kruskal中的作用, 用来判断某两个顶点连接起来判断这棵树是否构成环。 并查集讲解。 下面是我自己用C++将并查集封装成一个类。 #include<iostream> #define max 10 using namespace std;...

weixin_42222609的博客 312

并查集的C++实现

并查集是一种用于处理集合合并与查询操作的高效树型数据结构。其核心是一个数组,其中元素值为负数表示根节点,其绝对值为集合大小;非负值则指向父节点索引。主要操作包括: 初始化:将每个元素初始化为独立根节点 查找根节点:采用路径压缩优化,使后续查询更高效 集合合并:按秩合并(集合大小)优化性能 该实现使用C++类封装,包含初始化、查找、合并等基本操作,以及扩容功能。通过路径压缩和按秩合并两种优化,使并查集的时间复杂度接近常数级别。

qq_20199577的博客 405

C++实现树 - 08 并查集

并查集是一种非常精巧而实用的树形数据结构,他主要是处理一些不相交集合的合并和查询的问题。比如我给定一些数字并给定它们属于哪个集合,并且每次询问当中的两个数字时可以告诉我这两个数字是否处于同一个集合,这就是一个典型的并查集问题。我们可以利用一个数组来存储每个元素的相邻结点:每次合并两个结点时就只用将一个结点数组中的值改成另一个结点的数值即可,假如我们想合并(4,3),(3,2),(2,1),在图中显示出来就会得到下面的结果:由此我们也可以发现这样子做如果遇到最坏情况时,会使查找的时间复杂度非常的大,这时候我们

Newin2020的博客 1042

C++并查集优化实现

C++实现并查集

m0_56081785的博客 683

并查集C++实现和优化

转载自下面的链接,做了部分修改: https://www.jianshu.com/p/fc17847b0a31 前言 并查集(Disjoint-set) 的代码非常简洁,但是功能却很强大。 本文将使用C++实现并查集并使用“按秩合并”和”路径压缩“优化并查集。我们先大概了解什么是并查集。 什么是并查集(Disjoint-set) 对于一个集合S={a1, a2, ..., an-1, an},我们还可以对集合S进一步划分: S1,S2,...,Sm-1,Sm,我们希望能够快速确定S中的两两元素是否

silverBlack 587

并查集 c++和python具体实现

数据结构-并查集并查集是一种特殊的数据结构,其基本功能就是查询某个编号结点的祖先结点和合并两个结点,将这两个结点加入同一个集合中,至于并查集的含义有很多博客都是有讲过并且给出了很形象的例子来说明这一数据结构,这里不做过多赘述其实这些题目总结一下就是求连通分量的问题,也可以通过dfs来解决,但是并查集作为一种数据结构还是很重要的个人学习过程中的总结,如果有问题希望大佬指出。

m0_74200445的博客 1802

并查集——(三)C++ 使用 STL 的 map 实现查并集功能

综述 我们接上一节,https://blog.youkuaiyun.com/justidle/article/details/108846236,继续讨论并查集问题。我们发现使用 C++ 数组实现并查集主要问题有以下几个: 1、元素中不能支持负数。因为 C++ 规定数组的下标不能是负数。 2、代码量相对比较大。实现并查集代码量相对有点大。 使用 map 实现并查集 我们可以使用 STL 的 map 这个数据结构来实现。map 本生就是两个数据的映射关系,天生就具有并查集的特点。而且 map 可以支持负数。

努力中的老周的专栏 4046
上一篇: 二叉排序树C++实现
下一篇: 散列表C++实现
-Gentle-
博客等级 码龄8年 80粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值