快速查找算法 - 并集操作 - 在集合论中与union相同吗?

时间:2012-02-10 15:35:11

标签: c++ algorithm union-find

我无法将快速查找算法中的联合运算与集合论中A U B的一般含义联系起来。

Book(C ++中的算法Robert Sedgewick)告诉union操作是“扫描每个输入对的整个数组。(代码中的第9行和第10行)。

基本上我们将节点q的值复制到与节点p具有相同值的所有其他节点。 为什么我们将此操作命名为UNION?

直接从书中复制代码。

#include <iostream>
const int N = 10000;
int main() {
int i, p, q, id[N];
for( i = 0; i < N; i++ ) id[i] = i;
while( cin >> p >> q ) {
    int t = id[p];
    if ( t = id[q] ) continue;              //quick find operation
    for ( i = 0; i < N; i++ )               //---> union why?
        if ( id[i] == t) id[i] = id[q];
    cout << " " << p << " " << q << endl;
}
}

2 个答案:

答案 0 :(得分:2)

快速查找中的联合步骤意味着合并具有相同ID的组件。在一般意义上,它有点像两套联合。您可以考虑两个集合,其中id1为其所有组件的id,另一个为id2。 有关一个很好的解释,请在快速查找部分中查看此演示文稿:

http://www.cs.princeton.edu/~rs/AlgsDS07/01UnionFind.pdf

答案 1 :(得分:1)

查看支持的操作集。如果没有办法要求“列出所有元素”,只需插入,找到&amp;工会,那么使用这些操作就无法判断元素是否重复。它使支持的操作更有效率,并且仍然是BEHAVES(就用户所知),就像一个集合。