Конвертировать дважды в ключ (приоритетная очередь) - PullRequest
0 голосов
/ 14 октября 2019

Я провел обширный поиск по сетям, пытаясь найти какой-то ответ на мою проблему, но мне не повезло найти что-нибудь, что могло бы мне помочь. По сути, меня интересует, возможно ли преобразовать двойное число в ключ, который затем вставляется в приоритетную очередь.

Это метод, с которым я борюсь, это имя файла 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();
    }

Они идентичны. Теперь проблема возникает, поскольку public void insert(Double a) из MedianPQ.java нельзя изменять. Я должен взять двойной, а затем вставить этот двойной в PQ. Но методы из MinPQ.java and MaxPQ.java только вставляют ключ. Можно ли просто преобразовать double в ключ в методе insert(Double a) ???

1 Ответ

2 голосов
/ 14 октября 2019

Вы должны использовать Double как общее для MaxPQ и MinPQ. Для этого попробуйте следующее:

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;

Надеюсь, это поможет.

...