网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的范文:

 

标题 PHP全排列算法实现程序代码
范文
    从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
    简介
    如1,2,3三个元素的全排列为:
    1,2,3
    1,3,2
    2,1,3
    2,3,1
    3,1,2
    3,2,1
    共3*2*1=6种 3!
    2公式
    全排列数f(n)=n!(定义0!=1)
    递归算法
    1,2,3
    1,3,2
    2,1,3
    2,3,1
    3,2,1
    3,1,2
    这是由于算法只是考虑到了如何输出全排列,而没有考虑到换位是否有问题。所以我提出了解决方案,就是换位函数修改下
    如 1 2 3 换位的话 ,不应该直接 3 2 1这样 ,让3和1直接换位; 而是让3排在最前后 ,1 2 依次向后
    基本算法
    以下介绍全排列算法四种:
    (A)字典序法
    (B)递增进位制数法
    (C)递减进位制数法
    (D)邻位对换法
    实现全排列算法
    代码如下
    <?php
    header("content-type:text/html;charset=utf-8");/**
    * @param array $a 待排列的元素集合,会动态变化
    * @param array $b 储存当前排列
    * @param array $M 待排列的元素集合,相当于一个常量,始终为初始待排列的元素集合
    */
    function wholerange($a,$b,$M){
    $range=array();
    if(count($a) > 1){
    $d=$b;
    foreach($a as $value){
    $b[]=$value;
    $c=array_diff($M,$b);
    if(count($c) > 0){
    $range[]=wholerange($c,$b,$M);
    }
    $b=$d;
    }
    }elseif(count($a) == 1){
    foreach($a as $value){
    $b[]=$value;
    }
    $onerange="";
    foreach($b as $value){
    $onerange.=$value;
    }
    $range[]=$onerange;
    }
    return $range;
    }
    /**
    * 递归输出数组
    *
    * @param array $arr 待输出的数组
    * @return int 返回数组元素个数*/
    function recursionarray($arr){
    $i=0;
    foreach($arr as $value){
    if(is_array($value)){
    $i+=recursionarray($value);
    }else{
    echo $value."<br/>";
    $i++;
    }
    }
    return $i;
    }
    $a=array('A','B','C','D');
    $b=array();
    $range=wholerange($a,$b,$a);
    $count=recursionarray($range);
    echo "总共有".$count."排列";
    ?>
随便看

 

在线学习网范文大全提供好词好句、学习总结、工作总结、演讲稿等写作素材及范文模板,是学习及工作的有利工具。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/20 8:19:54