Home  >  Article  >  Backend Development  >  PHP之算法偶遇?感

PHP之算法偶遇?感

WBOY
WBOYOriginal
2016-06-23 14:38:01862browse

    php真的很棒,很多函?把我?想要的功能都????了,是?目快速??的首?.???,在BS程序??方面我??最好的???言是PHP和JSP,我之前曾??一段??的java,??很棒完全的OOP,但是它太"?毛"了,?然他的??有很多,但是想要??快速???乎是不大可能的,太多的?西需要遵循,而在?方面PHP就好的太多了,但是也正因?如此??多的PHPER?忽略了算法的重要性,好了言?正?我?今天就???一?算法.

    昨天我在??一??目的?候遇到了一???,就是???合的部份,我曾研究??似的代?,??人家循?了7?,看得我眼冒金星,至於效率就更甭提了,於是我就想自己?一?函???理?部份,首先要效率高,其次是要能?足我的需求,整了半天愣是?有整出?,下?是我?在CSDN上的一篇求救文:

请帮忙写一个函数,用来重新组合字符串,大概如下:
    
/**
参数:
    $arr:需要被重新?合的原始Array
    $len:组合后的长度
/**/
Function getArray($arr,$len){
    //请帮忙写
}
$arr=Array('A','B','C');
print_r(getArray($arr,2));
 
$arr=Array('A','B','C','D','E','F');
print_r(getArray($arr,4));


要求如下:
    第1种: A,B,C
    期望能够得到的组合是: AB,AC,BC
    
    第2种: A,B,C,D(可通过参数控制结果长度,如长度为2或3)
    期望能够得到的组合是: AB,AC,AD,BC,BD,CD或ABC,BCD,ACD,ABD
              
    第3种: A,B,C,D,E(可通过参数控制结果长度,如长度为2;3或4)
    期望能够得到的组合是: AB,AC,AD,AE,BC,BD,BE,CD,CE,DE或ABC,BCD,CDE,ABD,ABE,ACD,ACE,BDE,BCE,ADE或ABCD,BCDE,ABCE,ACDE,ABDE
 
    第四种:A,B,C,D,E,F(可通过参数控制结果长度,如长度为2;3;4或5)
    期望能够得到的组合是: 可根据上边的组合推演出来,在此不再例举

    上?的要求貌似很??,但是真正?我?始?的?候才??竟然一???都?有,我曾?想?用??等做法但是想?想去都?得不可行,放狗搜了半天也找不到?似的做法,只??有人用C?言??一?函?,但是?我把C?言代?改成PHP?行的?候和?期的效果差很大.最後??法只好在CSDN花?了??的200??分?高手?解?,俗?所的好"重?之下有勇夫",哈哈?句?果真一?都不假,很快PHP版的斑竹"xuzuning"就?了我三?答案,汗!!!最後通?十?次的循????中了一?最佳解?方案,代?如下:

	/**		重新?合Array,例如(2x3;3x3;3x4)		返回:			重?後的Array		??:			$arr:要重?的Array			$len:??Array?合到一起		用法:			$arr=Array('A1','B2','C3','D4','E5','f');			$x3=Fun::CombiArray($arr,3);	/**/	Public Static Function combiArray($arr,$len){		$cr = Range(0,$len-1);		$k = False;		$total = Count($arr);		While($cr[0] < $total-($len-1)) {			$t = Array();			For($i=0;$i<$len;$i++){$t[]=$arr[$cr[$i]];}			$r[] = $t;			For($i=$len-1;$i>=0;$i--) {				$cr[$i]++;				For($j=$i;$j<$len-1;$j++){$cr[$j+1] = $cr[$j]+1;}				IF($cr[$i] < $total-($len-$i-1)){Break;}			}		}		Return $r;	}

 很棒的算法,看了老半天才看明白,比起某人?的那7?循?不知道效率提升了多少倍.

PHP成就了快速??,?也?程序??笨了,看?得??一下算法了,在算法方面有?有啥比?好的?啊?大家可否推??我?本?

..

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn