当前位置:网站首页>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;
}
边栏推荐
- Altimeter data knowledge point 2
- 2022.06.27_ One question per day
- R language learning notes 1
- arcgis_ spatialjoin
- PHY drive commissioning - phy controller drive (II)
- Solve tensorfow GPU modulenotfounderror: no module named 'tensorflow_ core. estimator‘
- Rough notes of C language (2) -- constants
- M2dgr slam data set of multi-source and multi scene ground robot
- Energy conservation and creating energy gap
- ModuleNotFoundError: No module named ‘picamera‘
猜你喜欢
[software testing] 02 -- software defect management
Inftnews | drink tea and send virtual stocks? Analysis of Naixue's tea "coin issuance"
行测--资料分析--fb--高照老师
Pytorch has been installed in anaconda, and pycharm normally runs code, but vs code displays no module named 'torch‘
An article was opened to test the real situation of outsourcing companies
Three body goal management notes
611. 有效三角形的个数
[software testing] 03 -- overview of software testing
HDU1231 最大连续子序列(分治or动规or双指针)
How to deal with excessive memory occupation of idea and Google browser
随机推荐
Typescript get timestamp
[software testing] 03 -- overview of software testing
一文揭开,测试外包公司的真实情况
[OBS] x264 Code: "buffer_size“
Daily Practice:Codeforces Round #794 (Div. 2)(A~D)
氫氧化鈉是什麼?
Three body goal management notes
HDU1232 畅通工程(并查集)
Using GEE plug-in in QGIS
Chapter 2: try to implement a simple bean container
Now there are HTML files and MVC made with vs (connected to the database). How can they be connected?
ORACLE CREATE SEQUENCE,ALTER SEQUENCE,DROP SEQUENCE
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
并查集理论讲解和代码实现
【obs】x264编码:“buffer_size“
Machine learning Seaborn visualization
Today, share the wonderful and beautiful theme of idea + website address
Graduation thesis project local deployment practice
Simple operation with independent keys (hey, a little fancy) (keil5)
611. 有效三角形的个数