我有一个有向图G,以邻接列表的形式给出:
newtype Graph Int = Graph [(Int, [Int])]
G有n个顶点和m条边。我正在尝试在Haskell中实现BFS算法,以在O(m)时间内运行(也许是摊销的),但是我能想到的最佳解决方案需要在O(m*log n)的时间内运行,并使用
Data.Map
模块中的数据结构。我的线性解决方案如下:使用
Data.Sequence
结构作为高效的FIFO队列,并像命令式BFS一样做所有事情,但是我卡在了必须将节点标记为已访问的地方。我的问题是:是否可能在Haskell(或任何其他纯函数语言)中实现运行时间为O(m)的BFS?如果不行,你可以用什么论据证明这种说法?
O(1)
队列吗? - alternative