我正在尝试在Haskell中实现Dijkstra算法。我已经使用树实现了二进制堆。在算法中,当前顶点的邻居键应该在堆中更新。在Haskell中如何模拟指向堆中值的指针?在每次操作后,如何快速访问堆中的元素,而堆又在不断变化?
我正在尝试在Haskell中实现Dijkstra算法。我已经使用树实现了二进制堆。在算法中,当前顶点的邻居键应该在堆中更新。在Haskell中如何模拟指向堆中值的指针?在每次操作后,如何快速访问堆中的元素,而堆又在不断变化?
请查看 Data.IORef 和 Data.STRef 这两个包,它们可以让您访问可变引用。如果您还需要执行 IO 操作,请使用 IORefs;如果不需要,则使用 STRefs。
然而,我怀疑您可能做错了。完全有可能在不使用可变状态的情况下实现 Dijkstra 算法(尽管您需要小心一点,因为如果您不断重新计算可以缓存的函数评估,可能会导致渐近运行时间增加)。