我找到了一个创建make的教程,并找到了这样的方法
public void makeSet(long data) {
Node node = new Node();
node.data = data;
node.parent = node;
node.rank = 0;
map.put(data, node);
}
private Node findSet(Node node) {
Node parent = node.parent;
if (parent == node) {
return parent;
}
node.parent = findSet(node.parent);
return node.parent;
}
以下是指向code的完整链接 这是Kruskal Algorithm
的链接我很困惑他们为什么要返回一个节点,该节点的父亲本身而不是不同的节点,以及当等级设置为0时实施Union时等级用于什么.I&#39 ;我们试图找到其他Kruskal算法代码和解释,但很少有消息来源实现。
答案 0 :(得分:0)
Kruskal的算法是这样的:
在此特定实现中,每个节点可以处于以下两种状态之一:
当您测试边是否连接两个单独的子树时,您将第一个节点的主节点与第二个节点的主节点进行比较。如果它们相等,则节点在同一子树中,您可以忽略边缘。
如果第一个节点的主节点不等于第二个节点的主节点,则加入这些子树:将父节点设置为#34;第二个节点的主节点#34; 设置为第一个节点的主人。
当您最终拥有一个具有(node.parent == node)的主节点时,您将拥有一个完整的树。当然,简单地计算边缘更容易,因为您期望树的N-1边缘。