当前位置:网站首页>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;
}
边栏推荐
- 1290_FreeRTOS中prvTaskIsTaskSuspended()接口实现分析
- Unconventional ending disconnected from the target VM, address: '127.0.0.1:62635', transport: 'socket‘
- Install deeptools in CONDA mode
- Unforgettable summary of 2021
- Microservice registry Nacos introduction
- [framework] multi learner
- UNIX commands often used in work
- M2dgr slam data set of multi-source and multi scene ground robot
- Docker installs MySQL and uses Navicat to connect
- Delayqueue usage and scenarios of delay queue
猜你喜欢
第 2 章:小试牛刀,实现一个简单的Bean容器
Idea to view the source code of jar package and some shortcut keys (necessary for reading the source code)
Basic series of SHEL script (III) for while loop
DelayQueue延迟队列的使用和场景
[vscode] prohibit the pylance plug-in from automatically adding import
I implement queue with C I
PowerManagerService(一)— 初始化
行测--资料分析--fb--高照老师
Today, share the wonderful and beautiful theme of idea + website address
SOC_ SD_ CMD_ FSM
随机推荐
一文揭开,测试外包公司的真实情况
HDU1232 畅通工程(并查集)
Application of MATLAB in Linear Algebra (4): similar matrix and quadratic form
Hdu1232 unimpeded project (and collection)
[node] differences among NPM, yarn and pnpm
【无标题】
[OBS] x264 Code: "buffer_size“
【obs】x264编码:“buffer_size“
SOC_ SD_ DATA_ FSM
Use of Pai platform
Target detection series - detailed explanation of the principle of fast r-cnn
Rough notes of C language (2) -- constants
剑指 Offer 56 数组中数字出现的次数(异或)
Unity ugui how to match and transform coordinates between different UI panels or uis
Word import literature -mendeley
R language learning notes 1
npm install -g/--save/--save-dev的区别
Typescript get timestamp
The SQL implementation has multiple records with the same ID, and the latest one is taken
Idea to view the source code of jar package and some shortcut keys (necessary for reading the source code)