【发布时间】:2012-01-15 19:38:41
【问题描述】:
我很好奇应该如何提高 Haskell 例程的性能,该例程可以找到字符串的字典顺序最小循环旋转。
import Data.List
swapAt n = f . splitAt n where f (a,b) = b++a
minimumrotation x = minimum $ map (\i -> swapAt i x) $ elemIndices (minimum x) x
我想我应该使用 Data.Vector 而不是列表,因为 Data.Vector 提供就地操作,可能只是将一些索引操作到原始数据中。我实际上不应该自己费心跟踪索引以避免过度复制,对吧?
我很好奇++ 如何影响优化。我想它会产生一个惰性字符串 thunk,在字符串被读取到那么远之前永远不会进行附加。因此,a 永远不应该被附加到 b 上,只要 minimum 可以尽早消除该字符串,例如因为它以一些非常晚的字母开头。这是正确的吗?
【问题讨论】:
-
@LightnessRacesinOrbit:显然你从未在benchmarks game 中看到过 Haskell 程序!
-
我幽默善意的评论被删除了。 :( 去图。
标签: string optimization haskell lazy-evaluation