2

I used priorityQueue as a max-heap implementation in my java program. Right now I need to heapify the created heap for calculating the maximum value. It seems that priorityQueue does not implement heapify method. So my question would be is there anyway for handling this problem using priorityQueue? If no, is there any reliable implementation for Max-heap in java that has heapify method? Note that my program use its own comparator. So this implementation should support that.

Some more explanation:

PriorityQueue<Customer> marginalGainHeap = new PriorityQueue<Customer>(
            1, new Comparator<Customer>() {
                public int compare(Customer c1, Customer c2) {
                    return Double.compare(c1.getMarginalGain(),
                            c2.getMarginalGain());
                }
            });

Suppose a marginalGain value changed for "node" object which is a type of "Customer". one solution would be

marginalGainHeap.remove(node)
marginalGainHeap.add(node)

but there is a problem:

  • It adds some extra latency to my program. I want to be as efficient as possible.
7
  • 1
    What are you trying to do, and why? Commented Feb 24, 2014 at 10:42
  • So if it is priority queue then you have max at the beginning (or at the end) of the queue ? Commented Feb 24, 2014 at 10:42
  • I am going to retrieve update some values in heap and retrieve the one with maximum value (root) Commented Feb 24, 2014 at 10:43
  • @Fazovsky Not necessarily, what if a child node updated and its value be more than root? Commented Feb 24, 2014 at 10:45
  • Your priority queue should maintain order of the elements on the update. i.e. if value changes then order might also need to change Commented Feb 24, 2014 at 10:45

1 Answer 1

3

A priority queue is already a heap, so it does not need a heapify method.
This method is usually implemented on structures which are not heaps.

So just add/remove elements to/from your queue and just
assume you have the max elements at position 0 (at the root).

Sign up to request clarification or add additional context in comments.

5 Comments

How can I remove that value? first I need to find that value so this process will add some latency at run-time. BTW, what method could handle this situation?
@Alin You poll() a Queue to remove an element.
That's great, except when the priority of an item changes and it has to be resorted. As of right now, you have to remove and then add it back into the queue. This is much more expensive.
@SergueiFedorov just checking, you need to remove and reinsert the specific item? Something like queue.add(queue.remove()); doesn't work?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.