时时商务社区

标题: php全排列递归算法代码 [打印本页]

作者: 网络通达    时间: 2018-2-14 08:27

            算法原理

如果用P表示n个元素的全排列,而Pi表示n个元素中不包含元素i的全排列,(i)Pi表示在排列Pi前面加上前缀i的排列,那么n个元素的全排列可递归定义为:
    ① 如果n=1,则排列P只有一个元素i;
    ② 如果n>1,则全排列P由排列(i)Pi构成;
根据定义,可以看出如果已经生成(k-1)个元素的排列Pi,那么k个元素的排列可以在每个Pi前面加上元素i而生成。
代码实现
[U]复制代码[/U] 代码如下:
function rank($base, $temp=null)
{
    $len = strlen($base);
    if($len
不过,经多次测试运行结果,发现存在一个问题:若是存在相同的元素,则全排列有重复。
例如'122'的全排列只有三种情况:'122'、'212'、'221';上面方法却有重复。
略修改,加个判断重复的标志,解决了问题(代码如下):
[U]复制代码[/U] 代码如下:
function fsRank($base, $temp=null)
{
    static $ret = array();
    $len = strlen($base);
    if($len ';
print_r(fsRank('122'));
print '';
            
            
您可能感兴趣的文章:
  • PHP中使用数组实现堆栈数据结构的代码
  • php数据结构与算法(PHP描述) 查找与二分法查找
  • PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
  • php求数组全排列,元素所有组合的方法
  • 浅谈PHP链表数据结构(单链表)
  • php求数组全排列,元素所有组合的方法总结
  • PHP常用算法和数据结构示例(必看篇)
  • PHP实现的简单排列组合算法应用示例
  • 基于PHP实现栈数据结构和括号匹配算法示例
  • php 数据结构之链表队列
  • PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
            




    欢迎光临 时时商务社区 (http://bbs.4435.cn/) Powered by Discuz! X3.2