Algorithm principle
If p represents the full arrangement of n elements, and Pi means that n elements do not contain the full permutation of element I, (i) pi indicates the arrangement of the prefix I in front of the permutation pi, then the full arrangement of n elements is recursively defined as:
① if n=1, then the permutation p has only one element i;
② if n>1, then the entire arrangement p is composed of the permutation (i) pi;
By definition, you can see that if you have generated the permutation pi for (k-1) elements, then the arrangement of the K elements can be generated by adding element I to each pi.
Code implementation
Copy CodeThe code is as follows:
function rank ($base, $temp =null)
{
$len = strlen ($base);
if ($len <= 1)
{
echo $temp. $base. '
';
}
Else
{
for ($i =0; $i < $len; + + $i)
{
Rank (substr ($base, 0, $i). substr ($base, $i +1, $len-$i-1), $temp. $base [$i]);
}
}
}
Rank (' 123 ');
However, after several tests of the results of the operation, it was found that there was a problem: if the same element exists, then the whole permutation is repeated.
For example, there are only three cases of the full arrangement of ' 122 ': ' 122 ', ' 212 ', ' 221 ';
Slightly modified, add a judge to repeat the flag, resolved the problem (code below):
Copy CodeThe code is as follows:
function Fsrank ($base, $temp =null)
{
Static $ret = Array ();
$len = strlen ($base);
if ($len <= 1)
{
echo $temp. $base. '
';
$ret [] = $temp. $base;
}
Else
{
for ($i =0; $i < $len; + + $i)
{
$had _flag = false;
for ($j =0; $j < $i; + + $j)
{
if ($base [$i] = = $base [$j])
{
$had _flag = true;
Break
}
}
if ($had _flag)
{
Continue
}
Fsrank (substr ($base, 0, $i). substr ($base, $i +1, $len-$i-1), $temp. $base [$i]);
}
}
return $ret;
}
print '
';
Print_r (Fsrank (' 122 '));
print '
';
http://www.bkjia.com/PHPjc/326052.html www.bkjia.com true http://www.bkjia.com/PHPjc/326052.html techarticle The principle of the algorithm if p is used to denote the full arrangement of n elements, while pi means that n elements do not contain the full permutation of element I, (i) pi indicates the arrangement of the prefix I in the arrangement of Pi, then n elements of the whole ...