如何生成种子串的所有唯一4个字符排列?

时间:2012-05-01 21:40:53

标签: algorithm set combinations

  

可能重复:
  Algorithm to return all combinations of k elements from n
  Generate Distinct Combinations PHP

我有一个包含多个字符/字母的数组,例如:

$seed = array('a','b','c','d','e','f',.....,'z','1','2','3',...'9');

我希望从种子中获得所有可能的唯一4个字符组合/排列,例如:

abcd, azxy, ag12, aaaa, etc

实现这一目标的最佳方法是什么?

我已经考虑过将种子数组划分为4个字母组,然后遍历每个组并生成该组的所有可能组合,但这将省去许多组合(即它将处理abcd和wxyz,但不处理abyz和wxcd)

2 个答案:

答案 0 :(得分:1)

对于数组中的每个字符,从后面的字符(如果你实际上是指组合)或所有字符(我认为你的意思)中写下该字符后跟每个唯一的3个字符串。

  

如何生成种子字符串的所有唯一3个字符排列?

请参阅this very similar question

您可能还想了解recursion

Python代码

>>> def product(chars, n):
        if n == 0:
            yield ''
        else:
            for c in chars:
                for result in product(x, n - 1):  # Recursive call
                    yield c + result

>>> list(product(['a', 'b', 'c'], 2))
['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc']

(注意:在真正的Python代码中,您应该使用itertools.product而不是自己编写。)

答案 1 :(得分:0)

生成排列就像汇总数字一样。在免费提供的书Higher Order Perl,第128页

中对此进行了详细解释