【问题标题】:Convert Double to Key (Priority queue)将 Double 转换为 Key(优先级队列)
【发布时间】:2019-10-14 10:17:41
【问题描述】:

我一直在通过互联网进行广泛的搜索,寻找某种类型的解决我的问题的方法,但我没有找到任何可以帮助我的东西。基本上我想知道的是是否可以将双精度转换为密钥,然后将其插入优先级队列。

这是我正在努力解决的方法是来自文件名MedianPQ.java。就是这个:

public void insert(Double a){
        if (size == 0 || a.compareTo(findMedian()) == 1) minPQ.insert(a);
        else maxPQ.insert(a);
        rearrange();
        size++;
    }

MinPQ.java文件中的插入方法如下:

public void insert(Key x) {
        // double size of array if necessary
        if (n == pq.length - 1) resize(2 * pq.length);

        // add x, and percolate it up to maintain heap invariant
        pq[++n] = x;
        swim(n);
        assert isMinHeap();
    }

这里是MaxPQ.java的插入方法

public void insert(Key x) {

        // double size of array if necessary
        if (n == pq.length - 1) resize(2 * pq.length);

        // add x, and percolate it up to maintain heap invariant
        pq[++n] = x;
        swim(n);
        assert isMaxHeap();
    }

它们是相同的。现在问题出现了,因为不能更改来自MedianPQ.javapublic void insert(Double a)。我必须接受一个双倍然后将那个双倍插入到 PQ 中。但是MinPQ.java and MaxPQ.java 中的方法只插入一个键。是否可以将双精度转换为insert(Double a) 方法内的键???

【问题讨论】:

    标签: java type-conversion key double priority-queue


    【解决方案1】:

    您应该将Double 用作MaxPQMinPQ 的通用。 为此,请尝试以下操作:

    public static void main(String[] args) {
        MedianPQ<Double> median = new MedianPQ<Double>(10, 20);
        median.insert(1.1D);
        median.insert(2.2D);
    }
    

    或者

    private MaxPq<Double> left;
    private MinPq<Double> right;
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 2011-12-20
      • 2011-03-20
      相关资源
      最近更新 更多