我已经了解了IO列表的效率。但是我仍然无法绕过它。
IO列表的嵌套与连接的效率如何 字符串。
当有大量重复词时,IO列表的确切效率如何。
我曾使用this链接作为参考。
答案 0 :(得分:5)
免责声明:我将使用Erlang语法,因为即使在Elixir中它也是在BEAM VM中完成的。
如果您有两个长度为LM
和LN
的{{1}}和M
列表。然后附加N
是LM ++ LN
操作。 O(M)
是[LM|LN]
操作。如果您有两个二进制文件O(1)
和BM
,那么BN
是<<BM/binary, BN/binary>>
操作,O(M+N)
(是的,它有效[BM|BN]
。)仍然是io_list
操作。
重复O(1)
长度W
,无论是列表还是二进制,使用W
重复N
次lists:duplicate(N, W)
操作,它消耗O(N)
额外的内存,即整个内存为O(N)
。如果您要进行展平,则需要花费O(N+W)
时间并消耗O(N*W)
个内存。
示例:您可以使用此O(N*W)
长2^31
列表(不要在shell中输入!):
x
并且它需要30次lists:foldl(fun(_, X) -> [X|X] end, "x", lists:seq(1, 30)).
操作时间并消耗31 * 2 * 8B,即496B内存(在64b平台上,一半在32b上)。如果你将它作为二进制文件,它将占用超过2GB的内存和32GB作为一个平面列表(在64b和32b上16GB)。祝你好运。