相关疑难解决方法(0)

记忆斐波那契的时间复杂性

我最近遇到了这个Haskell的memoized fibonacci实现:

fibonacci :: Int -> Integer
fibonacci = (map fib [0 ..] !!)
  where fib 0 = 0
        fib 1 = 1
        fib n = fibonacci (n - 1) + fibonacci (n - 2)
Run Code Online (Sandbox Code Playgroud)

我想知道第一次生成第n个斐波纳契数的时间复杂度.因为Haskell中的列表查找,它是O(n ^ 2)吗?如果是,那么有没有办法以某种方式使O(n)像查找操作为O(1)的语言一样?

algorithm performance haskell

6
推荐指数
1
解决办法
888
查看次数

为什么我的Haskell代码与Swift和C相比是如此之慢

这是非常简单的Haskell代码,用于查找满足毕达哥拉斯定理的1到200的所有毕达哥拉斯整数X ^ 2 = Y ^ 2 + Z ^ 2

哈斯克尔:

let l = [1..200]
let pythagoras = [ x | x <- l, y <- l, z <- l, x^2 == y^2 + z^2]
Run Code Online (Sandbox Code Playgroud)

完成它需要24.1秒,

Swift:使用标准循环 0.05秒

C:使用标准循环 0.022秒

在此输入图像描述

haskell

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

标签 统计

haskell ×2

algorithm ×1

performance ×1