找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1966|回复: 0
打印 上一主题 下一主题

php全排列递归算法代码

[复制链接]

2647

主题

2647

帖子

7881

积分

论坛元老

Rank: 8Rank: 8

积分
7881
跳转到指定楼层
楼主
发表于 2018-2-14 08:27:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            算法原理

如果用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的全排列功能
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端