В ответе говорится о трудной временной сложности, когда дело доходит до добавления элементов в конец списка. Когда вы объединяете список xs
длины m и список ys
длины n вместе, используя (++)
, тогда xs ++ ys
будет иметь сложность времени O ( m) (в предположении вы оцениваете xs ++ ys
для ряда шагов пропорционально m ).
Так что, если ваш список ys
состоит из одного элемента y
(то есть ys == [y]
), тогда [y] ++ xs
будет O (1) , потому что вы добавляете его в начало, но xs ++ [y]
будет O (м) , потому что вы добавляете его в конец другого списка. Поэтому, когда вы несколько раз добавляете элементы в конец другого списка, вы получите O (m ^ 2) . Так что лучше сделайте это за один раз, чтобы у вас было O (м) .
Обратите внимание, что списки в Haskell на самом деле являются стеками, которые могут иметь бесконечное количество элементов.