Algorithm 类Z的行为类似于哪个著名的数据结构?
我正在处理这个问题,我不确定: 类Z的行为类似于哪个著名的数据结构 如果可能的答案是: 后进先出堆栈。 B.先进先出队列。 C.优先级队列。 D.联合——寻找。 通过查看代码,我认为答案是D-union find。如果我们查看methods查询(last或first),我们会看到它使用Union find数据结构来确定数组是否相等Algorithm 类Z的行为类似于哪个著名的数据结构?,algorithm,data-structures,Algorithm,Data Structures,我正在处理这个问题,我不确定: 类Z的行为类似于哪个著名的数据结构 如果可能的答案是: 后进先出堆栈。 B.先进先出队列。 C.优先级队列。 D.联合——寻找。 通过查看代码,我认为答案是D-union find。如果我们查看methods查询(last或first),我们会看到它使用Union find数据结构来确定数组是否相等 public class Z { int[] next, prev; Z(int N) { prev = new int[N];
public class Z
{
int[] next, prev;
Z(int N) {
prev = new int[N];
next = new int[N];
for (int i = 0; i<N; ++i) {
// put element i in a list of its own
next[i] = i;
prev[i] = i;
}
}
int first(int i) {
// return first element of list containing i
while (i != prev[i]) i = prev[i];
return i;
}
int last(int i) {
// return last element of list containing i
while (i != next[i]) i = next[i];
return i;
}
void update(int i, int j) {
int f = first(j);
int l = last(i);
next[l] = f;
prev[f] = l;
}
boolean query(int i, int j) {
return last(i) == last(j);
}
}
是的,你说得对-它可以用作联合查找数据结构。如果z是这个类的一个实例,那么可以像这样编写Union!z、 queryi,j z.updatei,j和Find可以写成z.lasti 细节 Z将整数0、1、…、N-1保留在一组不相交的列表中,每个整数最初都在自己的列表中。updatei,j将包含j的列表附加到包含i的列表。firsti和lasti返回包含i的列表的第一个和最后一个元素。queryi,j报告i和j是否在同一列表中 该实现要求仅当i和j不在同一列表中时才调用updatei,j,否则列表将成为循环,对任何方法的后续调用可能不会终止,并且由于没有进行通常的不相交的联合数据结构优化,因此其效率很低