public class HeapQ<T> where T : IComparable { List<T> items; public HeapQ () { items = new List<T> (); } public bool Empty { get { return items.Count == 0; } } public T First { get { if (items.Count > 1) { return items[0]; } return items[items.Count - 1]; } } public void Push (T item) { items.Add (item); SiftDown (0, items.Count - 1); } public T Pop () { T item; var last = items[items.Count - 1]; items.RemoveAt (items.Count - 1); if (items.Count > 0) { item = items[0]; items[0] = last; SiftUp (0); } else { item = last; } return item; } void SiftDown (int startpos, int pos) { var newitem = items[pos]; while (pos > startpos) { var parentpos = (pos - 1) >> 1; var parent = items[parentpos]; if (parent.CompareTo (newitem) <= 0) break; items[pos] = parent; pos = parentpos; } items[pos] = newitem; } void SiftUp (int pos) { var endpos = items.Count; var startpos = pos; var newitem = items[pos]; var childpos = 2 * pos + 1; while (childpos < endpos) { var rightpos = childpos + 1; if (rightpos < endpos && items[rightpos].CompareTo (items[childpos]) <= 0) childpos = rightpos; items[pos] = items[childpos]; pos = childpos; childpos = 2 * pos + 1; } items[pos] = newitem; SiftDown (startpos, pos); } }
Thursday, August 25, 2011
Heap Queue in C#
A minimal re-implementation of the Python heapq module.
Subscribe to:
Post Comments (Atom)
Popular Posts
-
These are the robots I've been working on for the last 12 months. They each weigh about 11 tonnes and have a 17 meter reach. The control...
-
This hard-to-see screenshot is a Generic Node Graph Editing framework I'm building. I'm hoping it can be used for any kind of node...
-
Unfortunately I've not secured a venue for the GGJ. With 9 days left, things are not looking hopeful. It could be that GGJ Perth will no...
-
So, you've created a car prefab using WheelCollider components, and now you can apply a motorTorque to make the whole thing move along. ...
-
MiddleMan: A Pub/Sub and Request/Response server in Go. This is my first Go project. It is a rewrite of an existing Python server, based o...
-
Often, when building a game, you need to test if objects are colliding. The objects could be spaceships, rocks, mouse pointers, laser beams....
-
After my last post, I decided to benchmark the scaling properties of Stackless, Kamaelia, Fibra using the same hackysack algorithm. Left axi...
-
I've just read a newspaper article (courtesy of Kranzky ) from WA Business News documenting the malfeasance, gross negligence and misc...
-
Space is awesome. Especially when it is generated using Perlin noise, and some cool shaders. You can try it out over here.
-
If you're using DontDestroyOnLoad to preserve a game object across levels, you might find that you get duplicated instances of that obje...
No comments:
Post a Comment