初始化函数的时间复杂度

时间:2019-07-09 12:04:07

标签: haskell functional-programming

我正在尝试删除Haskell中列表的最后一个元素,并且发现了有关init函数的信息。由于我要使用的函数必须是O(n),所以我想知道init的时间复杂度是什么。

1 个答案:

答案 0 :(得分:9)

init :: [a] -> [a]implemented as [src]

init [] =  errorEmptyList "init"
init (x:xs) =  init' x xs
  where init' _ [] = []
        init' y (z:zs) = y : init' z zs

因此,为了生成列表,它将在源列表上进行迭代,每次在尾部都不是空列表的情况下,每次向前看一个元素并发出前一个元素。

因此,这意味着对于 n 个元素的列表,将需要 O(n)时间来计算该列表的init

但是在Haskell函数中,调用是惰性的。例如,如果您仅对采用第一个k元素感兴趣,它将以 O( min( n k