作为后续到这个问题,我试图了解如何不给元素添加小号的list
使用++
。
从这个答案:
同样,如果您只想将单个元素追加到列表中,那不是问题。如果您想以这种方式将n个元素追加到列表中,那么这将是一个问题,因此,如果您每次都将单个元素追加到列表中,并执行了n次,则算法将为O(n2)。
因此,根据我的理解,这意味着您不应该这样做:
let numbers = [1,3,5,10,15]
newNumbers = numbers ++ [27]
listofnumbers = newNumbers ++ [39]
这是引用的答案中的粗体字告诉您不要这样做吗?如果不是,请使用代码,粗体字警告您不要做什么?
答案是在将元素追加到列表末尾时,时间复杂度很差。当您Concat的一个列表xs
的长度米和列表ys
的长度ñ使用起来(++)
则xs ++ ys
会有时间复杂度为O(M) (您评估的假设下,xs ++ ys
按比例为若干步骤来米)。
因此,如果您的列表ys
包含一个元素y
(即ys == [y]
),[y] ++ xs
则将是O(1),因为您将其添加到开头,但xs ++ [y]
将是O(m),因为您将其添加到了另一个列表的末尾。因此,当您将元素重复添加到另一个列表的末尾时,您将得到O(m ^ 2)。因此,最好一口气做到这一点,这样就可以得到O(m)。
请注意,Haskell中的列表实际上是堆栈,可以具有无限数量的元素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句