【发布时间】:2017-01-14 08:46:38
【问题描述】:
我遇到了以下问题,我想在一个字符串数组中进行所有可能的组合,并且只返回组合总数中元素的特定组合。
数组看起来像这样。
array = ['ab','bc','cd','de','bd','ae']
在这个例子中,输入是
source = 'a' target = 'd'
我现在用来获取我想要的字符串的代码就是这个。
(2..2).flat_map do |n|
array.repeated_permutation(n).map(&:join).select do |string|
string[0] == source && string[-1] == target && string[1..2].squeeze.size == n - 1
end
end
输出看起来像这样
['abbd']
当我选择字符串时,我想确保字符串的最后一个字母是下一个字母的第一个。
现在它可以工作,但我遇到了几个问题,
大量重复排列,8个或以上,电脑就死机,无法处理这么多的组合,所以我需要一种不同的方法来减少负载。
很难在排列之前实施选择过程以帮助减少负载,因为在执行 repeat_permutations 方法之后会生成组合。
【问题讨论】:
-
暴力破解似乎相当低效,因为在每个步骤中,您的数组中似乎只有少数元素是合格的(例如,第一次必须以 a 开头)。你的第二个问题我不清楚
-
您好 Frederick,对于第二点很抱歉。确实写的很差。我将对其进行编辑以使其更清晰
-
看起来是正则表达式的完美用例!
-
“巨大的重复排列”是什么意思?
-
@Nakilon,我的意思是,通过在数组上调用方法 repeat_permutations(8) 或更多,它创造了太多的可能性,它们会导致计算机崩溃
标签: arrays ruby performance permutation memory-efficient