3

可能な重複:数字または単語を取り、可能なすべての組み合わせを見つける
文字列アルゴリズムの可能な組み合わせを表示します

次のような 3 つの文字列がある場合:

"abc def xyz"

そして、これらの文字列を並べ替えることで生成できる組み合わせの最大数を見つけたいと思います。

  • abc xyz デフ
  • def xyz abc
  • xyz abc def

これを計算するための式/アルゴリズムは何ですか?

4

4 に答える 4

8

これは組み合わせではなく順列です。アルゴリズムは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);
  }
}

これは再帰的な例です

于 2010-08-06T17:06:54.043 に答える
1

私の記憶が正しければ、nです!組み合わせ。

したがって、9の場合は次のようになります

9*8*7*6*5*4*3*2 = 362880 通りの組み合わせ

于 2010-08-06T17:04:04.893 に答える
0

3*2*1=6階乗!

3弦=6コンビネーション……4弦=24コンビネーション……など

于 2010-08-06T17:10:08.827 に答える
0

順列を調べます。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であるアルゴリズムの他の回答を参照してください!

于 2010-08-06T17:01:30.157 に答える