小编bug*_*fix的帖子

Haskell 性能——拓扑排序不够快

我是 Haskell 初学者,并选择它来解决我的班级的编程任务,但是我的解决方案太慢并且没有被接受。我正在尝试对其进行分析,并希望我可以从更高级的 Haskellers 那里得到一些指导。

到目前为止,我班上唯一被接受的其他解决方案是用 Rust 编写的。我确信我应该能够在 Haskell 中实现类似的性能,并且我编写了可怕的命令式代码以希望提高性能,可惜没有效果。

我的第一个怀疑与 相关work,我用来forever遍历入度数组,直到出现越界异常。我希望这是尾递归并编译为while (true)样式循环。

我的第二个怀疑是 I/O 可能会减慢速度。

编辑:这个问题可能与我的算法有关,因为我没有保留入度为 0 的节点队列。谢谢@luqui。

EDIT2:看来真正的瓶颈是 I/O,感谢@Davislor,我解决了这个问题。

该任务基于此: http: //www.spoj.com/UKCPLAD/problems/TOPOSORT/,我只能使用 Haskell 平台中的库。

{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE LambdaCase #-}
{-# OPTIONS_GHC -O3 #-}

import Control.Monad
import Data.Array.IO
import Data.IORef
import Data.Int
import Control.Exception

type List = []
type Node = Int32
type Edge = (Node, Node)
type Indegree = Int32

main = do
  (numNodes, _) <- readPair <$> …
Run Code Online (Sandbox Code Playgroud)

performance haskell

3
推荐指数
1
解决办法
382
查看次数

评论.ghci文件

是否可以在.ghci文件中添加注释?

例如

:set +r # https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#faq-and-things-to-watch-out-for
Run Code Online (Sandbox Code Playgroud)

这对于记录和切换行为都很有用.

haskell ghc ghci

0
推荐指数
1
解决办法
91
查看次数

标签 统计

haskell ×2

ghc ×1

ghci ×1

performance ×1