Java Kruskal算法的实现
我找到了一个创建make和查找方法的教程Java Kruskal算法的实现,java,algorithm,kruskals-algorithm,disjoint-sets,Java,Algorithm,Kruskals Algorithm,Disjoint Sets,我找到了一个创建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 pare
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;
}
这里是完整的链接
这里是链接到
我不明白为什么他们返回的节点的父节点是它自己,而不是不同的节点,并且当秩设置为0时,在实现Union时,秩是用来做什么的。我曾尝试寻找其他Kruskal算法代码和解释,但很少有源代码涉及到实现。Kruskal算法的工作原理如下:
当您得到一个具有(node.parent==node)的主节点时,您就有了一个完整的树。当然,简单地计算边会更容易,因为你期望一棵树有N-1条边。Kruskal的算法是这样工作的:
当您得到一个具有(node.parent==node)的主节点时,您就有了一个完整的树。当然,简单地计算边会更容易,因为一棵树有N-1条边。我错过了链接谢谢我错过了链接谢谢