【发布时间】:2017-09-26 11:13:59
【问题描述】:
这是参考 Robert Sedgewick 和 kevin Wayne 所著的 Algorithm (Foutth Edition) 一书
对于 Union-find 实现,find 和 union 的代码如下(第 222 页)给出:
public int find(int p)
{
return id[p];
}
public void union(int p, int q)
{
// Put p and q into the same component.
int pID = find(p);
int qID = find(q);
// Nothing to do if p and q are already in the same component.
if (pID == qID) return;
// Rename p’s component to q’s name.
for (int i = 0; i < id.length; i++)
if (id[i] == pID) id[i] = qID;
count--;
}
然后是命题:
命题 F。快速查找算法对每个使用一个数组访问 调用 find() 并在 N + 3 和 2N + 1 之间为每个数组访问 调用结合两个组件的 union()。
我想了解我们实际上是如何得出 N + 3 和 2N + 1 的。我对 N + 3 有一些想法,但对 2N + 1 不知道。请帮忙。
【问题讨论】:
标签: algorithm union-find