【发布时间】:2010-08-22 21:06:44
【问题描述】:
我只是在学习 Haskell,如果我的问题很愚蠢,很抱歉。我正在阅读 learnyouahaskell.com,现在我在第 5 章“递归”。有一个标准“反向”功能的实现示例:
reverse' :: [a] -> [a]
reverse' [] = []
reverse' (x:xs) = reverse' xs ++ [x]
但它似乎在 O(N^2) 时间内运行,而标准反向运行在 O(N) 时间(我希望如此)。以下代码说明了这一点:
sum (reverse [1,2..1000000]) -- runs pretty fast
sum (reverse' [1,2..1000000]) -- never finishes
所以,我开始思考如何更快地实现我自己的反向。用命令式语言很容易做到。也许我需要后续章节中的一些更高级的材料来做到这一点?欢迎任何提示。
【问题讨论】:
标签: haskell performance complexity-theory