アルゴリズム原理
P が n 個の要素の完全な配置を表し、Pi が要素 i を含まない n 個の要素の完全な配置を表す場合、 (i) Pi は、配置 Pi の前に接頭辞 i を付けた配置を表し、要素の全体の配置は次のように再帰的に定義できます。
① n=1 の場合、配置 P には要素 i が 1 つだけあります。
② n>1 の場合、全体の配置 P は配置 (i)Pi で構成されます。
定義によれば、(k-1) 個の要素の順列 Pi が生成されている場合、各 Pi の前に要素 i を追加することで k 要素の順列を生成できることがわかります。
コードの実装
コードをコピー コードは次のとおりです:
function Rank($base, $temp=null)
{
$len = strlen($base);
if($len < = 1)
echo $temp.$base.'
(substr ($base, 0, $i).substr($base, $i+1, $len-$i-1), $ temp.$base[$i]);
123');
しかし、複数回テストを実行した結果、同じ要素がある場合、配置全体が繰り返されるという問題があることが判明しました。
たとえば、「122」の完全な配置には「122」、「212」、「221」の 3 つの状況しかありませんが、上記の方法が繰り返されます。
少し変更し、重複を判断するためのフラグを追加し、問題を解決しました (コードは次のとおりです):
コードをコピーします
コードは次のとおりです:
function fsRank($base, $temp=null )
{
static $ret = array();
$len = strlen($base); if($len { //echo $temp.$base.'
http://www.bkjia.com/PHPjc/326052.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/326052.html
技術記事
アルゴリズム原理 P が n 個の要素の完全な配置を表し、Pi が要素 i を含まない n 個の要素の完全な配置を表す場合、 (i) Pi が配置 Pi の前に接頭辞 i を付けた配置を表す場合、完全な配置はn 個の要素のうち ...