3

文字列のセットを作成したいのですが、以下が唯一の制限です。同じ数字を繰り返さないでください。

文字列 範囲 1 ~ 8 (12345678) または 1 ~ 16 (12345678910111213141516)
例:(シリーズのセット)

12345678
12345687
12345876
12345867
...
...
87654321

そのように 2^8(1-8) と 2^16(1-16) の可能性があります。これらの文字列をより少ない計算で非常に効率的に生成するにはどうすればよいですか?

4

2 に答える 2

2

私が理解している限りでは、指定された一連の記号 (この場合は数字) のすべての順列を生成する必要があります

于 2012-06-04T16:03:22.063 に答える
1

あなたの 8 ケースは可能ですが、その後すぐにスペースが不足します。

これは2^nあなたが思っているようなケースではありません - それはn!ケースです。

8 の場合、40,320 の順列があります。

permute(k,n) = k! / (n-k)!
permute(8,8) = 8! / (8-8)! = 8! = 40320

16 の場合、20,922,789,888,000 の順列があります。順列あたり 16 バイトの場合、それらを格納するには約 304 TB が必要です。

@kolの回答は順列を行う必要がありますが、要件を変更する必要があると思います。

于 2012-06-04T18:00:51.207 に答える