次のような 3 つの文字列がある場合:
"abc def xyz"
そして、これらの文字列を並べ替えることで生成できる組み合わせの最大数を見つけたいと思います。
- abc xyz デフ
- def xyz abc
- xyz abc def
これを計算するための式/アルゴリズムは何ですか?
次のような 3 つの文字列がある場合:
"abc def xyz"
そして、これらの文字列を並べ替えることで生成できる組み合わせの最大数を見つけたいと思います。
これを計算するための式/アルゴリズムは何ですか?
これは組み合わせではなく順列です。アルゴリズムはn! ここで、n は要素の数です。
なんで ?
3 つの場所に配置する 3 つの値があるため、最初の場所には 3 つのオプションがあり、2 番目の場所には 2 つだけ (最初の文字列を既に宮殿に配置しているため)、最後には 1 つのオプションしかありません。
3 * 2 * 1 = 3! = 6
しかし、それらの選択を繰り返すことができれば、繰り返しによる順列があります
1 位は 3 弦、2 位は 1 弦から選択できます。
3 * 3 * 3 = 3^3 = 27
n^k - n は文字列の数、k - 「場所」の数
コード アルゴリズムは次のようになります。
function fact($n)
{
if ($n == 0)
{
return 1;
}
else
{
return $n * fact($n - 1);
}
}
これは再帰的な例です
私の記憶が正しければ、nです!組み合わせ。
したがって、9の場合は次のようになります
9*8*7*6*5*4*3*2 = 362880 通りの組み合わせ
3*2*1=6階乗!
3弦=6コンビネーション……4弦=24コンビネーション……など
順列を調べます。O'Reilley は、Google 経由でこれに関する良い情報を提供しています。時間があれば、例を作成してみます。
アップデート
ここにいくつかのコードがあります。正しく動作する場合は 100% ではありませんが、必要に応じて変更できるはずです (コア コードは O'Reilley サイトから取得しました)。
<?php
function pc_permute($items, $perms = array( )) {
if (empty($items)) {
print join(' ', $perms) . "\n";
} else {
for ($i = count($items) - 1; $i >= 0; --$i) {
$newitems = $items;
$newperms = $perms;
list($foo) = array_splice($newitems, $i, 1);
array_unshift($newperms, $foo);
pc_permute($newitems, $newperms);
}
}
}
pc_permute(array('abc', 'xyz', 'def', 'hij'));
?>
編集
彼がアルゴリズムを望んでいること、またはコードが他の潜伏者の結果を生成する必要があることをちょうど見ました:) nであるアルゴリズムの他の回答を参照してください!