Min-Heap and Hash Table help
Chris Pons
cmpons at gmail.com
Tue Apr 3 15:14:13 PDT 2012
Thanks! This clears up that part very well. I'm a lot closer to
having a decent path finding algorithm now.
On Tuesday, 3 April 2012 at 21:24:24 UTC, Chris Cain wrote:
> On Tuesday, 3 April 2012 at 19:38:12 UTC, Chris Pons wrote:
>> Thanks, yes, that did work. However now when trying to insert
>> nodes I get this error: Cannot grow a heap created over a
>> range. I This is what I have: ...
>
> Hey there,
>
> BinaryHeap is using the "slice of memory" you're giving it to
> use as a heap. In the first code you gave, your array is length
> = 0. In other words, there is no place to actually insert
> things!
>
> When you specified Node[2500] a, you are making an array of
> size 2500 filled with zeros. You still don't have any room to
> insert, because all of the space in the array is still taken up.
>
> Depending on your data, your option might be to just insert all
> the items you want first, then heapify the resulting array,
> maybe like this:
> Node[] a;
> foreach(i; 0..5) {
> Node nextNode;
> nextNode.fScore = (i*3) % 5;
> a ~= nextNode;
> }
> auto b = BinaryHeap!(Node[], "a.fScore > b.fScore")(a);
>
> while(!b.empty()) {
> writeln(b.front());
> b.removeFront();
> }
>
> Otherwise, if you know a maximum bound for the number of
> inputs, you could simply allocate enough memory to store your
> items, and then use the initialSize parameter.
> Something like this:
> Node[] a;
> // or Node[10] a; for a static array sized to 10...
> a.length = 10;
> // 0 states that nothing is in the heap
> auto b = BinaryHeap!(Node[], "a.fScore > b.fScore")(a, 0);
> foreach(i; 0..5) {
> Node nextNode;
> nextNode.fScore = (i*3) % 5;
> b.insert(nextNode);
> }
> while(!b.empty()) {
> writeln(b.front());
> b.removeFront();
> }
>
> The thing you looked like you were doing with your third option
> looks like it was getting close to the right track for yet
> another potential solution, but apparently a bug prevents this
> from working: http://d.puremagic.com/issues/show_bug.cgi?id=6959
> If this was working, then you could use Array for an unbounded
> input (because it supports insertBack).
>
> I hope this helps!
More information about the Digitalmars-d-learn
mailing list