1

私が覚えているように、組み合わせの数は n です!

しかし、私の例では、文字列「abc」があります。aBcやABcなど、異なるレジストリを持つすべての組み合わせを取得したい

したがって、abc は 3 文字です。3!= 1 * 2 * 3 = 6。ただし、この作業を手動で行うと、8 つのバリエーションが得られます。

1 abc 2 abc 3 abc 4 abc 5 abc 6 abc 7 abc 8 abc

すると、2^3 = 8 と答えられますが、2 とは何ですか? 3 - 文字列内のレジストリの数です。2 とは何ですか? レジストリバリアントの数?

4

2 に答える 2

2

私の理解が正しければ、大文字と小文字を混在させて固定文字列を記述することに関して、固定文字列について可能な組み合わせがいくつあるかを知りたいと考えています。ソース文字列の実際の順列には関心がありません。つまり、abc には acb、cab、cba などがあることを考慮したくありません。はい?

もしそうなら、1文字のために私たちは持っています

a A

二文字分

ab Ab aB AB

そして三文字

abc Abc aBc abC ABc aBC AbC ABC

等々。その場合、適切な基礎となるモデルを選択すれば、解決策は非常に簡単です。お気づきかもしれませんが、選択した文字列に関係なく結果が得られますa

a A
aa aA Aa AA
aaa aaA aAa aAA Aaa AaA AAa AAA

パターンは、各文字に対して、大文字または小文字、設定されているか設定されていないかの 2 つの選択肢があります。

0 1
00 01 10 11
000 001 010 011 100 101 110 111

それは実際にはバイナリカウントです!したがって、n 文字の場合、可能な組み合わせの数は 2^n になります。

于 2011-08-22T22:50:27.280 に答える
1

ああ、私はあなたが言っていることがわかると思います。私があなたを正しく理解していれば、すべての文字が同じ大文字小文字にならないように、文字列内の文字を大文字にするすべての可能な方法を見つけようとしています。つまり、abc を指定すると、

abC aBc aBC Abc AbC ABc

だがしかし

abc ABC

これらのバージョンのすべての文字の大文字と小文字は同じだからです。

これが必要な場合、長さ n の空でない文字列でこれを行う方法の数は 2 n - 2 で与えられます。直観的に、この背後にある理論的根拠は次のとおりです。n 文字の文字列が与えられた場合、その文字列内のすべての文字を大文字にする方法は 2 n通りあります。これは、各文字が残りの文字とは独立して、その文字が 2 つの状態 (大文字または小文字) のいずれかになる可能性があるためです。これらすべての組み合わせを考慮すると、禁止したいのは、すべての文字が大文字であるバージョンとすべての文字が小文字であるバージョンの 2 つだけです。

あなたの質問では、n 要素シーケンスの組み合わせの数は n! であると述べました。これは正しくありません。あります!n 要素シーケンスの順列(各要素が異なると仮定)。例えば、3つあります!= シーケンス abc の 6 つの順列:

abc  acb  bac  bca  cab  cba

すべての文字に同じ大文字を使用せずに 3 文字のシーケンスを大文字にする方法が 6 通りあり、abc の順列が 6 通りあるという事実は、完全な偶然の一致です。シリーズの他の項を見ると、それらが 2 つの場所 (2 と 3) でのみ一致することがわかります。

                                    n = 1   2   3   4   5   6
Permutations (n!)                       1   2   6   24  120 720
Mixed-case capitalizations (2^n - 2)    0   2   6   14  30  62

上と下だけでなく、より多くのケースを許容する場合 (たとえば、k 個の異なるバージョン)、これを一般化して値 k n - kを取得できます。k n 個の異なる組み合わせがあり、そのうちの k 個がすべて同じ大文字。

お役に立てれば!

于 2011-08-22T22:20:55.813 に答える