PHP fully arranged recursive algorithm code

高洛峰
Release: 2023-03-02 19:10:01
Original
1273 people have browsed it

Algorithm Principle

If P represents the full arrangement of n elements, and Pi represents the full arrangement of n elements that does not include element i, (i) Pi represents the arrangement with the prefix i in front of the arrangement Pi, then n The total arrangement of elements can be recursively defined as:
① If n=1, then the arrangement P has only one element i;
② If n>1, then the total arrangement P consists of the arrangement (i) Pi;
According to the definition, it can be seen If a permutation Pi of (k-1) elements has been generated, then a permutation of k elements can be generated by adding element i in front of each Pi.
Code implementation
Copy code The 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]);
                                                                                            , after multiple test runs, it was found that there is a problem: if there are the same elements, the entire arrangement will be repeated.
For example, there are only three situations for the full arrangement of '122': '122', '212', and '221'; but the above methods are repeated.
Slightly modified, added a flag to identify duplicates, solved the problem (the code is as follows):
Copy the code The 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)
                                                                                                                                                                               break;
                                                                                                                                                                          }
                 fsRank(substr($base, 0, $i).substr($base, $i+1, $len-$i-1), $temp.$base[$i]); return $ret;
}
print '

';<br>print_r(fsRank('122'));<br>print '
';

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template