PHP全排列算法實(shí)現(xiàn)程序代碼
來(lái)源:易賢網(wǎng) 閱讀:1629 次 日期:2015-01-15 14:11:16
溫馨提示:易賢網(wǎng)小編為您整理了“PHP全排列算法實(shí)現(xiàn)程序代碼”,方便廣大網(wǎng)友查閱!

從n個(gè)不同元素中任取m(m≤n)個(gè)元素,按照一定的順序排列起來(lái),叫做從n個(gè)不同元素中取出m個(gè)元素的一個(gè)排列。當(dāng)m=n時(shí)所有的排列情況叫全排列。

簡(jiǎn)介

如1,2,3三個(gè)元素的全排列為:

1,2,3

1,3,2

2,1,3

2,3,1

3,1,2

3,2,1

共3*2*1=6種 3!

2公式

全排列數(shù)f(n)=n!(定義0!=1)

遞歸算法

1,2,3

1,3,2

2,1,3

2,3,1

3,2,1

3,1,2

這是由于算法只是考慮到了如何輸出全排列,而沒有考慮到換位是否有問題。所以我提出了解決方案,就是換位函數(shù)修改下

如 1 2 3 換位的話 ,不應(yīng)該直接 3 2 1這樣 ,讓3和1直接換位; 而是讓3排在最前后 ,1 2 依次向后

基本算法

以下介紹全排列算法四種:

(A)字典序法

(B)遞增進(jìn)位制數(shù)法

(C)遞減進(jìn)位制數(shù)法

(D)鄰位對(duì)換法

實(shí)現(xiàn)全排列算法

代碼如下

<?php

header("content-type:text/html;charset=utf-8");/**

* @param array $a 待排列的元素集合,會(huì)動(dòng)態(tài)變化

* @param array $b 儲(chǔ)存當(dāng)前排列

* @param array $M 待排列的元素集合,相當(dāng)于一個(gè)常量,始終為初始待排列的元素集合

*/

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;

}

/**

* 遞歸輸出數(shù)組

*

* @param array $arr 待輸出的數(shù)組

* @return int 返回?cái)?shù)組元素個(gè)數(shù)*/

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."排列";

?>

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:PHP全排列算法實(shí)現(xiàn)程序代碼
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)