当前位置:网站首页>Explanation of parallel search set theory and code implementation
Explanation of parallel search set theory and code implementation
2022-07-05 07:24:00 【BugMaker-shen】
List of articles
One 、 Concept
And lookups are tree like data structures , It is mainly used to solve some problems The problem of element grouping . Used to deal with some Disjoint Set Of Merge as well as Inquire about problem
The idea of joint search set is to represent the whole forest with an array , The root node of the tree uniquely identifies a collection , As long as we find the root of an element , You can determine which set it is in
Two 、 And look up the construction process
Let's first explain the construction process of the search set
Father Son
1 3
1 2
5 4
2 4
6 8
8 7
Let's assume that the above nodes are in a set , On the left is the parent node , On the right is the child node
For the first four groups of data , We construct the following structure
There is a problem , According to the first 4 When constructing a set with group data , Should put the 4 The root node of the tree is the same as 2 The root node of the tree is connected , The correct set structure is as follows :
In the process of constructing and searching sets , It's not simply connecting two nodes , Instead, connect the root node of the tree where the node is located
Determine whether two nodes are in a set , Judge whether the root node of the tree where these two nodes are located is the same
We then construct a set of the last two sets of data
The above kind of direct handle 7 Put it in 8 The following is wrong , We just said , Merging two sets is to merge the root nodes of two trees .7 Become the root node of a tree alone , and 6 A merger , The correct combination is as follows :
Through the above construction process , Here is a summary :
- In the process of constructing and searching sets , It's not simply connecting two nodes , Instead, connect the root node of the tree where the node is located ( Don't care about the parent-child relationship of the root node )
- Determine whether two nodes are in a set , Judge whether the root node of the tree where these two nodes are located is the same
3、 ... and 、 Code implementation
When implemented on code , Whether merging or querying , We need to find the root node of the tree where the node is located , Therefore, you need to record the parent node
The main idea : The position of array elements corresponding to each node , Store the number of its parent node
How to initialize ?
Because we say that the root node of the tree where each independent node is located is itself , So we initialize with its own node number
When did you find the roots ?
When x = arr[x] When equal , Indicates that its parent node is itself , It means that the root of the tree is itself
The initialization of parallel search set is as follows :
The forest we constructed is represented by union search set as follows
Traversal array , By comparing whether the element value and subscript are the same, we can get and check how many tree roots there are in the set . You can also see from the picture , node 1 and 6 It's the root
#include <iostream>
using namespace std;
const int SIZE = 9;
int parent[SIZE];
// return x The number of the root node of the tree
int find_root(int x) {
if (x <= 0 || x >= SIZE) {
return -1;
}
while (x != parent[x]) {
x = parent[x];
}
return x;
}
// Recursive version of the query
int cur_find_root(int x) {
if (x <= 0 || x >= SIZE) {
return -1;
}
if (x == parent[x]) {
return x;
}
else {
return cur_find_root(parent[x]);
}
}
// Merge x and y Where the collection is
void merge(int x, int y) {
x = find_root(x);
y = find_root(y);
if (x != y) {
// x and y In a set, there is no need to merge , If you are not in a set, you need to merge
parent[y] = x;
// parent[x] = y;
}
}
int main() {
for (int i = 0; i < SIZE; i++) {
parent[i] = i;
}
int x, y;
for (int i = 0; i < 6; i++) {
cin >> x >> y;
merge(x, y);
}
cout<<(find_root(2) == find_root(8) ? "YES" : "NO")<<endl;
return 0;
}
边栏推荐
- HDU1231 最大连续子序列(分治or动规or双指针)
- Hdu1231 maximum continuous subsequence (divide and conquer or dynamic gauge or double pointer)
- [OBS] x264 Code: "buffer_size“
- D2L installation
- IPage能正常显示数据,但是total一直等于0
- 目标检测系列——Faster R-CNN原理详解
- When jupyter notebook is encountered, erroe appears in the name and is not output after running, but an empty line of code is added downward, and [] is empty
- Energy conservation and creating energy gap
- 一文揭开,测试外包公司的真实情况
- Chapter 2: try to implement a simple bean container
猜你喜欢
【Node】nvm 版本管理工具
HDU1231 最大连续子序列(分治or动规or双指针)
I implement queue with C I
Three body goal management notes
2022年PMP项目管理考试敏捷知识点(7)
Delayqueue usage and scenarios of delay queue
行测--资料分析--fb--高照老师
借助 Navicat for MySQL 软件 把 不同或者相同数据库链接中的某数据库表数据 复制到 另一个数据库表中
Inftnews | drink tea and send virtual stocks? Analysis of Naixue's tea "coin issuance"
Hdu1232 unimpeded project (and collection)
随机推荐
[framework] multi learner
Database SQL practice 4. Find the last of employees in all assigned departments_ Name and first_ name
公安专业知识--哔哩桐老师
Daily Practice:Codeforces Round #794 (Div. 2)(A~D)
Unforgettable summary of 2021
公安基础知识--fb
[solved] there is something wrong with the image
An article was opened to test the real situation of outsourcing companies
Matrix and TMB package version issues in R
Eclipse project recompile, clear cache
Raspberry pie 4B arm platform aarch64 PIP installation pytorch
I 用c l 栈与队列的相互实现
Brief description of inux camera (Mipi interface)
Jenkins reported an error. Illegal character: '\ufeff'. Class, interface or enum are required
Matlab在线性代数中的应用(四):相似矩阵及二次型
Simple operation of running water lamp (keil5)
The mutual realization of C L stack and queue in I
Miracast技术详解(一):Wi-Fi Display
iNFTnews | 喝茶送虚拟股票?浅析奈雪的茶“发币”
Graduation thesis project local deployment practice