试图了解如何不向列表中添加元素

用户名

作为后续到这个问题,我试图了解如何给元素添加小号list使用++

这个答案:

同样,如果您只想将单个元素追加到列表中,那不是问题。如果您想以这种方式将n个元素追加到列表中,那么这将是一个问题,因此,如果您每次都将单个元素追加到列表中,并执行了n次,则算法将为O(n2)

因此,根据我的理解,这意味着您不应该这样做:

let numbers = [1,3,5,10,15]
newNumbers = numbers ++ [27]
listofnumbers = newNumbers ++ [39]

这是引用的答案中的粗体字告诉您不要这样做吗?如果不是,请使用代码,粗体字警告您不要做什么?

Elmex80s

答案是在将元素追加到列表末尾时,时间复杂度很差当您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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章