PHP全排列演算法實現程式碼_PHP教程

來源:互聯網
上載者:User

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)鄰位對換法

  實現全排列演算法

代碼如下

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."
";
$i++;
}
}
return $i;
}
$a=array('A','B','C','D');
$b=array();
$range=wholerange($a,$b,$a);
$count=recursionarray($range);
echo "總共有".$count."排列";
?>

http://www.bkjia.com/PHPjc/941716.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/941716.htmlTechArticlePHP全排列演算法實現程式碼 從n個不同元素中任取m(mn)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的一個排列。當...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.