【发布时间】:2012-01-18 19:28:12
【问题描述】:
我想生成列表的所有排列,但我想在将某些排列添加到堆栈或存储在任何地方之前过滤掉它们。
我将根据一些自定义的临时规则过滤掉排列。
换句话说,我想生成一个大列表(50-300 个元素)的排列列表,但我想在此过程中丢弃大部分生成的排列(我知道完整的数字排列的数量是N!)。
我已经用它的Array.permutation.to_a 尝试了 Ruby,但它看起来在执行过程中维护了一个完整的堆栈,所以我很快就耗尽了内存 (8 GB)。
我也尝试过this Erlang 解决方案,但它的性能似乎与之前的 Ruby 类似。
这个问题有什么定制的解决方案吗?
【问题讨论】:
-
您可以使用一种称为“Steinhaus-Johnson-Trotter 算法”的算法通过迭代生成排列:en.wikipedia.org/wiki/…
-
您链接的第二个问题得到了一个很好的解决方案,应该很容易将其重写为 ruby。
-
听起来你想要的可能不是排列生成的路线,而是列表推导的路线。
-
TreyE,您能否详细说明一下使用列表推导式?
-
为什么要担心递归和堆栈?在 Erlang 中,递归是事物的自然顺序。
标签: ruby recursion erlang stack permutation