时时商务社区
标题:
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