-1

重複の可能性:
n から k 個の要素のすべての組み合わせを返すアルゴリズム
個別の組み合わせの生成 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 は処理されません)。

4

2 に答える 2

1

配列内の各文字について、その文字の後に、その文字の後に続く文字 (実際には組み合わせを意味する場合) またはすべての文字 (つまり、あなたが意味すると思います) のいずれかから、一意の 3 文字の文字列をそれぞれ書き込みます。

シード文字列の一意の 3 文字順列をすべて生成する方法は?

この非常によく似た質問を参照してください。

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では、自分で作成するのではなく、使用する必要があります。)

于 2012-05-01T21:43:09.760 に答える
0

順列の生成は、数値を合計するようなものです。これは、無料で入手できる本Higher Order Perlの 128 ページで美しく説明されています。

于 2012-05-01T22:25:34.013 に答える