我无法将快速查找算法中的联合运算与集合论中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;
}
}
答案 0 :(得分:2)
快速查找中的联合步骤意味着合并具有相同ID的组件。在一般意义上,它有点像两套联合。您可以考虑两个集合,其中id1为其所有组件的id,另一个为id2。 有关一个很好的解释,请在快速查找部分中查看此演示文稿:
答案 1 :(得分:1)
查看支持的操作集。如果没有办法要求“列出所有元素”,只需插入,找到&amp;工会,那么使用这些操作就无法判断元素是否重复。它使支持的操作更有效率,并且仍然是BEHAVES(就用户所知),就像一个集合。