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