Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 类Z的行为类似于哪个著名的数据结构?_Algorithm_Data Structures - Fatal编程技术网

Algorithm 类Z的行为类似于哪个著名的数据结构?

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];

我正在处理这个问题,我不确定:

类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];
        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,否则列表将成为循环,对任何方法的后续调用可能不会终止,并且由于没有进行通常的不相交的联合数据结构优化,因此其效率很低