Re: [collections] BinaryHeap and PriorityQueue

2004-01-02 Thread scolebourne
  from:Phil Steitz [EMAIL PROTECTED]
  I was also looking at the heap impl and wondering if the compare method
  could check for ascendingOrder, then removing the need for near duplicate
  methods (one for minHeap, one for maxHeap) elsewhere. Would this be a good
  change?
 
 That would simplify the code, but might cost something in overall 
 performance (since compare is hot). Could be that's why the original 
 author(s) set it up the way it is?  Should be trivial. Might be worth 
 playing with.
Its hassle vs absolute performance. Always tricky in collections.

 Another solution would be to just have the constructor reverse the 
 comparator for maxHeaps (using ComparatorUtils.reversedComparator). There 
 the cost would be stack operations for each compare (calling through to 
 the reversed comparator).
The comparator is returned by a method in PriorityBuffer, so this might cause 
problems. (Of course the null comparator could similarly be represented by a 
ComparableComparator at the cost of an object creation)

 Another (small?) consideration is backward compatability for anyone who 
 has subclassed BinaryHeap (assuming we are not going to deprecate), since 
 all of the percolateXxx methods are protected, not private.
No backwards compatability issues - BinaryHeap is final, PriorityBuffer is new :-)

Stephen

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [collections] BinaryHeap and PriorityQueue

2004-01-01 Thread Stephen Colebourne
I have made the following changes:
- PriorityQueue now disapproved (not deprecated, but the language indicates
it is)
- BinaryHeap in main package is not deprecated, as it is the only
implementation of PQ
- BinaryHeap in buffer subpackage renamed to BinaryBuffer. No longer
implements PQ
- PQ decorators now inner classes of PQUtils

We could go further and actually deprecated PQ. But I'm a little wary of
that.

(And both BinaryHeap and BinaryBuffer still need their remove bug fixing :-)

Stephen


- Original Message -
From: Stephen Colebourne [EMAIL PROTECTED]
 BinaryHeap is a very old collections class, originally from Avalon. It
 implements PriorityQueue interface.

 PQ is an interface that does not extend Collection, Buffer is effectively
 the replacement that does. They use different terms though - PQ
 insert/peek/pop - Buffer add/get/remove. PQ is also badly named as the
 interface specifies nothing about 'priority'.

 Currently I have moved BinaryHeap and the PriorityQueue decorators into
the
 buffer subpackage (as they seem related). But is this right???
 Possibilities:

 a) BinaryHeap and PQ decorators in buffer subpackage

 b) BinaryHeap and PQ decorators in (new) priorityqueue subpackage

 c) BinaryHeap left in main package where it always was, PQ decorators as
 hidden inner classes on PriorityQueueUtils.

 I think I favour (c), as I'm not a fan of the PQ interface, and this would
 avoid change for this dubious (but probably useful) class/interface.



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [collections] BinaryHeap and PriorityQueue

2004-01-01 Thread Phil Steitz
Sorry to respond first to the commit message (must be all the oversight 
talk ;)  See interspersed.

Stephen Colebourne wrote:
I have made the following changes:
- PriorityQueue now disapproved (not deprecated, but the language indicates
it is)
- BinaryHeap in main package is not deprecated, as it is the only
implementation of PQ
- BinaryHeap in buffer subpackage renamed to BinaryBuffer. No longer
implements PQ
It might be better named something like PriorityBuffer since that 
matches the behavior.

- PQ decorators now inner classes of PQUtils

We could go further and actually deprecated PQ. But I'm a little wary of
that.
We should decide whether or not Queue implementations belong in 
[collections].  I am +0 on this (the + is because BinaryHeap/Buffer 
exists). If no, we should deprecate.  See below.
(And both BinaryHeap and BinaryBuffer still need their remove bug fixing :-)
As noted in bug report, I have a fix ready to commit.  What I don't like 
about the setup above is that this and all other fixes / enhancements need 
to be applied to both classes.
Stephen

- Original Message -
From: Stephen Colebourne [EMAIL PROTECTED]
BinaryHeap is a very old collections class, originally from Avalon. It
implements PriorityQueue interface.
PQ is an interface that does not extend Collection, Buffer is effectively
the replacement that does. They use different terms though - PQ
insert/peek/pop - Buffer add/get/remove. PQ is also badly named as the
interface specifies nothing about 'priority'.
Ack. Maybe should just be called Queue.  As noted below, however, the 
only impl in [collections] is a heap-backed priority queue.

Currently I have moved BinaryHeap and the PriorityQueue decorators into
the

buffer subpackage (as they seem related). But is this right???
Sorry to respond late on this, but it does not seem right to me.  I see 
the BinaryHeap/Buffer impl as a array-heap-backed implementation of a 
priority queue.  The interface is a Queue interface, which, as you point 
out is different from a buffer interface.

Possibilities:

a) BinaryHeap and PQ decorators in buffer subpackage

b) BinaryHeap and PQ decorators in (new) priorityqueue subpackage

c) BinaryHeap left in main package where it always was, PQ decorators as
hidden inner classes on PriorityQueueUtils.
I think I favour (c), as I'm not a fan of the PQ interface, and this would
avoid change for this dubious (but probably useful) class/interface.

Here is a logical alternative:

1) Deprecate PriorityQueue interface in favor of Queue.

2) Create a queue package and put BinaryHeap there (maybe renamed 
something like HeapPriorityQueue or BinaryPriorityQueue or even 
PriorityQueue).  This would open the door for other queue implementations.

I understand that this departs from the general pattern of sticking with 
things that extend collection, but it is more natural to me at least.

Phil



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: [collections] BinaryHeap and PriorityQueue

2004-01-01 Thread Stephen Colebourne
  We could go further and actually deprecated PQ. But I'm a little wary of
  that.

 We should decide whether or not Queue implementations belong in
 [collections].  I am +0 on this (the + is because BinaryHeap/Buffer
 exists). If no, we should deprecate.  See below.
 
  (And both BinaryHeap and BinaryBuffer still need their remove bug fixing
:-)

 As noted in bug report, I have a fix ready to commit.  What I don't like
 about the setup above is that this and all other fixes / enhancements need
 to be applied to both classes.
I am happy for Buffer to exist in [collections]  (although I wish the
methods were peek and pop) Given a choice I would deprecate PQ altogether.

Your change will need to be applied to both BinaryBuffer and BinaryHeap,
unless we make BinaryHeap wrap a BinaryBuffer (maintaining the old
interface).

I am +1 on renaming to PriorityBuffer.

Stephen


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [collections] BinaryHeap and PriorityQueue

2004-01-01 Thread Phil Steitz
Stephen Colebourne wrote:

I am happy for Buffer to exist in [collections]  (although I wish the
methods were peek and pop) 
Yeah.  Like a queue ;-).

 Given a choice I would deprecate PQ altogether.

That would make things simpler.

Your change will need to be applied to both BinaryBuffer and BinaryHeap,
unless we make BinaryHeap wrap a BinaryBuffer (maintaining the old
interface).
For now, I am making the change to both (and both tests).

I would like to consider, however either

a) deprecate both PQ and BinaryHeap (rationale: we implement what are 
effectivley queues in the buffer package)

b) change BinaryHeap to wrap a BinaryBuffer

I guess I ultimately favor a).
I am +1 on renaming to PriorityBuffer.
I agree.

Phil
Stephen

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: [collections] BinaryHeap and PriorityQueue

2004-01-01 Thread Phil Steitz
Stephen Colebourne wrote:
From: Phil Steitz [EMAIL PROTECTED]

Stephen Colebourne wrote:
 Given a choice I would deprecate PQ altogether.
That would make things simpler.
If no one else comments, I'll do this.


I am +1 on renaming to PriorityBuffer.
Done

I was also looking at the heap impl and wondering if the compare method
could check for ascendingOrder, then removing the need for near duplicate
methods (one for minHeap, one for maxHeap) elsewhere. Would this be a good
change?
That would simplify the code, but might cost something in overall 
performance (since compare is hot). Could be that's why the original 
author(s) set it up the way it is?  Should be trivial. Might be worth 
playing with.

Another solution would be to just have the constructor reverse the 
comparator for maxHeaps (using ComparatorUtils.reversedComparator). There 
the cost would be stack operations for each compare (calling through to 
the reversed comparator).

Another (small?) consideration is backward compatability for anyone who 
has subclassed BinaryHeap (assuming we are not going to deprecate), since 
all of the percolateXxx methods are protected, not private.

Phil
Stephen

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


[collections] BinaryHeap and PriorityQueue

2003-12-29 Thread Stephen Colebourne
BinaryHeap is a very old collections class, originally from Avalon. It
implements PriorityQueue interface.

PQ is an interface that does not extend Collection, Buffer is effectively
the replacement that does. They use different terms though - PQ
insert/peek/pop - Buffer add/get/remove. PQ is also badly named as the
interface specifies nothing about 'priority'.

Currently I have moved BinaryHeap and the PriorityQueue decorators into the
buffer subpackage (as they seem related). But is this right???
Possibilities:

a) BinaryHeap and PQ decorators in buffer subpackage

b) BinaryHeap and PQ decorators in (new) priorityqueue subpackage

c) BinaryHeap left in main package where it always was, PQ decorators as
hidden inner classes on PriorityQueueUtils.

I think I favour (c), as I'm not a fan of the PQ interface, and this would
avoid change for this dubious (but probably useful) class/interface.

Stephen


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]