gpt4 book ai didi

erlang - 为什么这个列表理解在 Erlang/OTP 20 上评估需要很长时间?

转载 作者:行者123 更新时间:2023-12-02 05:51:08 25 4
gpt4 key购买 nike

查找总和 = 100 的任意 5 个数字。这可以在循环中完成,但我在向 friend 演示列表理解时才意识到这在我的 Mac Book Pro、酷睿 i7、2.2GHz 上需要超过 30 分钟

[[A,B,C,D,E] || A <- lists:seq(1,100),B <- lists:seq(1,100),C <- lists:seq(1,100),D <- lists:seq(1,100),E <- lists:seq(1,100),(A + B + C + D + E) == 100]

如果问题改为 5 个连续的数字,构建的列表理解甚至需要更长的时间。如果我要使用列表理解来解决这个问题,我做得对吗?如果是,为什么需要太长时间?请提供一个可能更快的解决方案,也许使用循环。

最佳答案

多个生成器的行为类似于列表上的嵌套循环,并且每次调用lists:seq()都将被完全评估。这需要很长的时间,并且大部分时间都花在分配列表单元格和再次对它们进行垃圾收集上。但由于无论如何它们都评估为相同的常量列表,因此您可以将其重写为 L =lists:seq(1,100), [[A,B,C,D,E] || A <- L,B <- L,C <- L,D <- L,E <- L,(A + B + C + D + E) == 100]。此外,在 shell 中运行它会比在编译模块中运行慢很多。在我的 MacBook 上,编译的代码大约在 2 分 30 秒内完成。这只是使用一个核心。使用 [native] 编译使其运行时间只需 60 秒。

关于erlang - 为什么这个列表理解在 Erlang/OTP 20 上评估需要很长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47534634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com