加入2个列表的最快方式?

时间:2015-01-30 00:16:19

标签: scheme racket

我正在制作一个程序,在一个非常具体的部分我需要加入2个对象列表。我总是习惯附加做这些事情,但我读过它并不是那么快。我需要加入的这两个列表最终会增长。所以我正在寻找计算机的最快方式

我应该使用

(append list1 list2)

或更好:

(foldr cons list1 list2)

我认为我不介意元素的顺序。

1 个答案:

答案 0 :(得分:3)

对于相等长度的列表,这应该稍快一些:

(foldl cons list1 list2)

为什么呢?因为它在cons head 处开始list2来自list1的元素,而append将首先cons所有元素最后list1 cons之前的list2 - 并注意到我使用的是foldl,而不是foldr。这将具有在恒定空间中运行的好处(因为尾递归)。

换句话说:foldl解决方案在常量空间中运行且为O(length-of-list2),而append解决方案为O(length-of-list1)并且不在恒定空间中运行,如果列表有不同的长度,请记住这一点。