我需要帮助理解关于加权快速联合的问题给出的解释:
以下哪个
id[]数组可能是对一组10项目运行加权快速联合算法的结果?检查所有适用。回想一下,我们的加权快速联合算法使用按大小(节点数)联合(而不是按高度联合)。
不正确:
9 1 7 3 4 9 6 7 8 9
解释:9-5 7-2 5-0不正确:
2 2 2 2 5 1 2 3 1 2
解释:2-9 3-7 9-3 5-4 0-2 1-8 8-4 4-9 8-6正确:
9 9 3 4 9 4 9 9 4 2
说明:id[]数组包含一个循环:2->3->4->9->2正确:
0 2 3 0 0 2 2 9 3 0
解释:以父为2 <根的树的大小是以父为根的树的大小的两倍2正确:
0 4 6 7 4 …
我正在学习关于数据结构和算法的课程。作者提到快速查找是 O(N^2),这是有道理的(考虑到 N 个对象上的 N 个联合操作可能需要 N*N 个数组访问)。但是,我不明白为什么 Quick Union 会更好。似乎在最坏的情况下,一棵狭长的树,对 N 个对象进行 N 次 Find 操作也会导致 O(N^2) 但材料说它是 O(N)。
所以,一种是二次时间,一种是线性。我不确定我是否理解为什么会有差异。例子:
快速查找方法
int[] id = new int[10];
for(int i = 0; i < 10; i++)
id[i] = i;
// Quick find approach
int QuickFind(int p)
{
return id[p];
}
public void Union(int p, int q)
{
int pId = find(p);
int qId = find(q);
if (pId == qId)
return;
for (int i = 0; i < id.length; i++)
{
if(id[i] …Run Code Online (Sandbox Code Playgroud)