Brian Schröäer <ruby.brian / gmail.com> wrote:

> As I recently said, I'd like some more advanced datastructures in
> ruby. So I wrote a nice priority queue extension. Maybe it's not so
> nice c-code right now, because it is my first try on an extension, but
> it works really good. I created quite a quick quiz solver with it ;-)

Oooh nice ;)  And a full blown Fibonacci Heap even.  Thank you.

> As I have a problem with my webspace at the moment, this first release
> is mailing list only. The extension is not packaged for installation
> but it is easy to build and use.

> ## Usage
>
>     require 'priority_queue'
>
>     q = PriorityQueue.new
>     q.push "node1", 0
>     q.puts "node2", 1

Why not "def push(priority, *args)"?  That would make it easier to store  
multiple things in the queue.

   q.push distance, x, y
   [...]
   x, y = q.pop_min

>     q.decrease_priority("node2", -1)

It should be possible to add things to the queue multiple times and access  
them separately.  This would not work in the current version:

   q.push :foo, 1
   q.push :foo, 100
   q.decrease_priority :foo, 0

If you wrap everything into a new array when it is inserted into the queue  
the following would be possible:

   h1 = q.push 1, :foo    #=> [:foo]
   h2 = q.push 100, :foo  #=> [:foo]
   q.decrease_priority(0, h1)

I don't know if this is better, though


Viele Grüße,
Levin