迭代生成排列而无需递归或使用Ruby/Erlang进行堆栈

ska*_*tek 4 ruby erlang recursion stack permutation

我想生成列表的所有排列,但我想在将它们添加到堆栈或存储在任何位置之前过滤掉一些排列.

我将根据一些自定义ad-hoc规则过滤出排列.

换句话说,我想生成一个大型列表(50-300个元素)的排列列表,但我想在此过程中抛弃大部分生成的排列(我知道排列的全部数量是N!).

我已经尝试过Ruby Array.permutation.to_a,但看起来它在执行期间保持了完整的堆栈,因此我的内存(8 GB)相当快.

我也尝试过这个 Erlang解决方案,但它似乎与之前的Ruby类似.

这个问题有任何自定义解决方案吗?

PS我已经读过这个这个,但不幸的是我不知道C/C++.

ste*_*lag 8

Ruby Array.permutation.to_a确实生成了一个数组.不要用的to_a话!它意味着'到阵列'.Array.permutation给你一个'枚举器',一个发生器.既然你想抛弃大多数排列,那么就使用reject它.

res = [1,2,3,4].permutation(3).reject do |perm|
  perm.first.even? #if this line is true, the perm will be rejected
end
Run Code Online (Sandbox Code Playgroud)

将生成三个元素的所有排列,并拒绝第一个位置上具有偶数的元素.但是呃......你见过多少300!是什么?