当前位置: 首页 > 知识库问答 >
问题:

将双精度转换为密钥(优先级队列)

笪德华
2023-03-14

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

这就是我正在努力使用的方法,它来自一个文件名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 文件中的 insert 方法如下所示:

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的公共空白插入(Double a).java不能更改。我必须接受一个双精度,然后将该双精度插入PQ。但是MinPQ.java和MaxPQ.java的方法只插入一个键。是否可以在 insert(Double a) 方法中将双精度值转换为键???

共有1个答案

周滨海
2023-03-14

对于MaxPQMinPQ,应使用Double。要执行此操作,请尝试以下操作:

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;

希望有帮助。

 类似资料:
  • 我试图在Java中实现一个稳定的(先进先出)优先级队列。假设键是一个名称,值是一个年龄,我知道我可以像这样制作一个不稳定的优先级队列: 这几乎完成了我需要它做的所有事情,除了它在我插入(或移除)键值对时不保持它们的顺序。 编辑: 感谢你在第一条评论中提出的好问题。我所说的FIFO是指对于具有相等值的键值对,首先放入的键值对应该首先被提取。

  • 我想用一个小数点和一个小数位的格式将任何双精度四舍五入为双精度,这样29575.347434将是2.3。 我试着用decimalFormat做这个,但当我试着我只得到了一个29575.3格式的字符串,带有一个,我不知道如何在保留值为双精度的同时去掉所有小数点。

  • 我试图理解为什么我的A*搜索的实现似乎工作良好,尽管我似乎是在优先级队列后面更新键。 在表示映射的类中,我有以下数据结构来保存映射中的所有节点(例如从文件加载)。 为了实现*搜索,我的MapNode类包含“从开始到开始的距离”和“从目标到启发式距离”属性。在搜索开始之前,我将映射中每个节点的距离初始化为无穷大。这一切都很好。 稍后,作为*实现的一部分,当我在node对象中重新计算和更新距离时,我将

  • 我是Matlab新手,所以这应该是一个简单的问题。我有一个带有几个特定像素的图像,我需要从中获取红色RGB分量,求和,并将结果存储到一个变量中。默认情况下,这些值的类型为uint8,因此总和不能超过255。我尝试使用double()的每个组合将R值转换为double,但似乎没有任何效果。下面是从终端复制的实际情况:(所有像素的R值都在200以上) 我做错了什么?我不能将这些值转换为双精度值吗?

  • 我试图得到一个double(由两个int的分数得到)作为我下面函数的返回值。 但结果总是错的,我得到的价值如: 预期结果应介于和 我的代码有什么问题! 谢谢

  • 我知道我们可以使用collections.reverseOrder()创建一个使用优先级队列的max堆,但是我还需要在那个地方传递ArrayList。我试图创建一个自定义比较器以防万一,但它似乎不起作用。我想知道这样做的确切语法。 示例/我的知识: 1)创建一个空的最小堆->PriorityQueue pqmin=new PriorityQueue(); 2)从一个ArrayList创建一个最小堆