Ruby 获取5个以上字母的所有可能字母组合

Ruby 获取5个以上字母的所有可能字母组合,ruby,Ruby,这段代码将成功地生成包含5个字符的所有可能字母组合的数组 a=('aaaaa'..'zzzzz')。到a 然而,当我尝试使用6个以上的字符时,它需要10分钟,然后结束任务。有没有办法让它在不终止任务的情况下实际加载?它受到硬件的限制吗?你确实受到硬件的限制。简单来说,这里有两个限制——处理能力和内存容量 “”公式将告诉我们您正在尝试生成和处理26**6=308_915_776元素 (x..y)创建一个,它知道如何生成它的所有元素,但并不急于这样做。但是,当您调用Range#to_a时,处理器会尝

这段代码将成功地生成包含5个字符的所有可能字母组合的数组

a=('aaaaa'..'zzzzz')。到a


然而,当我尝试使用6个以上的字符时,它需要10分钟,然后结束任务。有没有办法让它在不终止任务的情况下实际加载?它受到硬件的限制吗?

你确实受到硬件的限制。简单来说,这里有两个限制——处理能力和内存容量

“”公式将告诉我们您正在尝试生成和处理
26**6=308_915_776
元素

(x..y)
创建一个,它知道如何生成它的所有元素,但并不急于这样做。但是,当您调用
Range#to_a
时,处理器会尝试生成所有这些元素。一段时间后,进程将耗尽内存并终止

为了避免内存限制,您可以利用
范围
也是
可枚举的这一事实。例如:

('aaaaaaa'..'zzzzzzz').each { |seven_letter_word| puts seven_letter_word }
将立即开始打印字符串。最终(经过一段时间的等待)它将在所有这些文件中循环


但是,请注意,这将允许您绕过内存限制,而不是处理限制。因此,除了了解手头问题的具体情况外,没有其他捷径。

您确实受到硬件的限制。简单来说,这里有两个限制——处理能力和内存容量

“”公式将告诉我们您正在尝试生成和处理
26**6=308_915_776
元素

(x..y)
创建一个,它知道如何生成它的所有元素,但并不急于这样做。但是,当您调用
Range#to_a
时,处理器会尝试生成所有这些元素。一段时间后,进程将耗尽内存并终止

为了避免内存限制,您可以利用
范围
也是
可枚举的这一事实。例如:

('aaaaaaa'..'zzzzzzz').each { |seven_letter_word| puts seven_letter_word }
将立即开始打印字符串。最终(经过一段时间的等待)它将在所有这些文件中循环


但是,请注意,这将允许您绕过内存限制,而不是处理限制。为此,除了了解手头问题的具体情况外,没有其他捷径。

您正在创建大约3000亿个字符串,每个字符串大约40字节(在64位平台上)大(包括标题和元数据),总共11GB加上一个包含3000亿条目的数组,每个指针(即8字节)代表另一个2.3 GB。所以,在你开始做一些真正的工作之前,你已经分配了大约14G的RAM。[这些数字是对YARV最新版本的粗略估计。显然,内存内部并不是公共API的一部分,可能会在没有通知的情况下随时更改,因此不同版本之间会有差异,在JRuby或Rubinius等IMPL之间会有更大的差异。]@JörgWMittag:我想你的意思是3亿,但是的,分析不错。哦,是的。美国的百万/十亿/万亿数据让我困惑,我纠正了错误:-DYou创建了大约3000亿个字符串,每个字符串大约40字节(在64位平台上)大(包括头和元数据),总共11GB,加上一个包含3000亿条目的数组,每个指针,即8字节,再加上2.3 GB。所以,在你开始做一些真正的工作之前,你已经分配了大约14G的RAM。[这些数字是对YARV最新版本的粗略估计。显然,内存内部并不是公共API的一部分,可能会在没有通知的情况下随时更改,因此不同版本之间会有差异,在JRuby或Rubinius等IMPL之间会有更大的差异。]@JörgWMittag:我想你的意思是3亿,但是的,分析不错。哦,是的。美国百万/十亿/万亿的东西让我困惑,我纠正得太多了