gpt4 book ai didi

ruby - 无需递归或使用 Ruby/Erlang 堆栈迭代生成排列

转载 作者:数据小太阳 更新时间:2023-10-29 07:26:14 26 4
gpt4 key购买 nike

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

我将根据一些自定义的临时规则过滤掉排列。

换句话说,我想生成一个大列表(50-300 个元素)的排列列表,但我想在这个过程中扔掉大部分生成的排列(我知道完整的数字排列数是 N!)。

我已经尝试使用 Ruby 的 Array.permutation.to_a,但看起来它在执行期间保持了完整的堆栈,所以我很快就用完了内存 (8 GB)。

我也试过this Erlang 解决方案,但它的性能似乎与之前的 Ruby 解决方案类似。

这个问题有没有定制的解决方案?

附言我读过thisthis , 但不幸的是我不懂 C/C++。

最佳答案

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

将生成三个元素的所有排列,并拒绝第一个位置为偶数的排列。但是嗯……你有没有看到有多少 300!是吗?

关于ruby - 无需递归或使用 Ruby/Erlang 堆栈迭代生成排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8480487/

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