【问题标题】:How to generate all unique 4 character permutations of a seed string? [duplicate]如何生成种子字符串的所有唯一 4 个字符排列? [复制]
【发布时间】:2012-05-11 09:32:20
【问题描述】:

可能重复:
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)

【问题讨论】:

  • 你的意思是组合还是排列?
  • @ninjagecko 4 个字符怎么会是 35 个字符的排列?
  • @sehe: 这叫做k-permutation
  • @sehe:它们可能是 35 个(k 排列)的 4 个字母子集的排列。
  • @Click Upvote: 只是为了翻译问题.. aaaa 是一个有效的输出吗?

标签: algorithm set combinations


【解决方案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 而不是自己编写。)

【讨论】:

  • 这不能回答我的问题
  • @ClickUpvote:如果这不能回答您的问题,那么您需要澄清您的问题,因为它回答了您所写的内容。
  • @OliCharlesworth 如何通过说“生成 3 个唯一排列”来回答“如何生成唯一排列”的问题。可能如果他给出一个代码示例来澄清它,我可能会理解。
  • @ClickUpvote:因为您错过了它意味着递归解决方案。
  • @ClickUpvote:您如何获得所有可能的长度为 1 的“排列”?你可以这样做,对吧?好的,现在通过编写每个字母后跟所有长度为 1 的排列,将其扩展到 2 个字母。到目前为止还好吗?现在通过编写每个字母后跟所有长度为 2 的排列将其扩展到 3 个字母。发现模式了吗?
【解决方案2】:

生成排列就像对数字求和。这在免费提供的书籍Higher Order Perl,第 128 页中得到了很好的解释

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2023-03-04
    • 2012-02-29
    相关资源
    最近更新 更多