F#优先级队列

Fag*_*ain 4 heap f# priority-queue

我试图使用这段代码

https://code.msdn.microsoft.com/windowsdesktop/Net-Implementation-of-a-d3ac7b9d

实现Prim算法的基于堆的实现,以解决非定向连通图中的最小生成树(MST)问题.

经过几次迭代后,我发现堆/优先级队列不再得到很好的维护.这是PriorityQueue的头部没有堆中最低的Key.

PQ 0 [-7230, 309]
...
PQ 146 [-7277, 308]
Run Code Online (Sandbox Code Playgroud)

有没有人使用此代码并遇到类似的问题?如果有人在看它,我可以在GitHub上发布一个链接

我的需求是堆数据结构,它支持删除中间的元素.看起来Fsharpx.collections没有这样的数据结构.

有人知道某处有好的实施吗?

谢谢

V.B*_*.B. 7

最近,我移植一个MaxHeap从PLINQ到F#在这里,并使其MinHeap.它基于数组,并且比任何"纯功能"替代方案都表现得更好.

然而,经过大量的基准测试后,我发现SortedDeque基于一个简单的排序循环缓冲区,在大多数用例中表现得更好,即使我需要在中间添加或删除.