我试图使用这段代码
https://code.msdn.microsoft.com/windowsdesktop/Net-Implementation-of-a-d3ac7b9d
实现Prim算法的基于堆的实现,以解决非定向连通图中的最小生成树(MST)问题。
经过几次迭代后,我发现堆/优先级队列不再维护得很好。 这是PriorityQueue的负责人并没有堆中最低的密钥。
PQ 0 [-7230, 309]
...
PQ 146 [-7277, 308]
是否有人使用此代码并遇到类似问题? 如果有人在看它,我可以在GitHub上发布一个链接
我的需求是堆数据结构,它支持删除中间的元素。看起来Fsharpx.collections没有这样的数据结构。
有人知道某个地方有一个很好的实现吗?
感谢
答案 0 :(得分:7)
最近,我将MaxHeap从PLINQ移植到了F#here并将其设为MinHeap。它基于数组,并且比任何“纯功能”替代方案都表现得更好。
然而,在经过大量的基准测试之后,我发现基于一个简单的排序循环缓冲区的SortedDeque在most use cases上表现得更好,即使我需要在中间添加或删除。
答案 1 :(得分:-1)
我的答案受到V.B.的启发。但在这里它是完整的
我使用的是另一个库而不是FSharpx.collections,它被称为
阅读该页面了解详情和说明。
SortedDeque是我遇到此问题所需的数据结构。 我使用相同的代码,只是从微软博客页面代码更改为库函数,并发现了良好的结果,所以它确实是微软博客页面代码中的一些错误
PS。这个点差库设计用于格式化财务数据以进行定量分析,我很高兴我发现它!看起来这个图书馆看起来很新,这也就是为什么它不在谷歌的搜索之上或在任何其他SO问题中被引用(或者如果我没有看到它)
FSharpx.Collections对于该问题毫无用处,您可以从该讨论中看到heap issue in FSharpx.Collections