我试图了解如何使用两个堆(最小堆和最大堆)构建双优先级队列。到目前为止,我的想法是,我需要一个数组来存储最小堆,而另一个数组来存储最大堆,然后我需要弄清楚如何将两个数组中的相关条目相互连接。例如,我需要确保值“ 12”最终出现在最小堆中的位置以某种方式指向值“ 12”在最大堆中的位置,反之亦然。我从理论上理解这一点,但是我不知道如何去实际实施它。

如何有效而灵活地使一个数组中的元素指向另一个数组中的元素?尤其是由于每个数组都将在整个程序中不断重新组合。

不知道这是否有意义,但是对您的帮助非常感谢。谢谢。

最佳答案

如何使一个数组中的元素指向另一个数组中的元素
  高效灵活地排列数组?


使用指向每个知道对象是对象的元素的指针,例如

public class Element<T> {
    T otherElement;

    public void setOther(T element) {
        this.otherElement = element;
    }
}

// when you create the objects
Element<String> one = new Element();
Element<String> two = new Element();

// now both elements know about each other and they can be to whatever list/array etc they want
one.setOther(two);
two.setOther(one);


如果您的要求是每个对象都知道其在每个列表中的位置(即索引),则根据实现堆的方式,可能需要做更多的工作。您应该确保每次更改元素位置时,它们都会设置每个元素的位置。因此Element对象将变为位置感知。

关于java - 使用双重结构方法的双优先级队列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17874088/

10-12 05:26