当前位置:编程学习 > php >>

php 算法优化




算法优化 请大家帮忙
答案


目的,将任意字符,数字,组合数用数组的形式描述,不要求排序。
举例 combination('a','b','c')
得到的结果应是
array(
array('a'),
array('b'),
array('a','b'),
array('a','c'),
array('b','c'),
array('a','b','c'),
)
我的算法在命令行模式下执行combination(array(1,2,3,4,5,6,7,8,10,11,12,13,14,15,16)) ;
排列三次时间分别是
0.109853982925 seconds
0.109352827072 seconds
0.109138011932 seconds
希望高手能帮忙优化到0.05s左右
代码 function combination($arr = array(),$tmp=0){

if(count($arr) ==2){

return array(array($arr[0]),array($arr[1]),array($arr[0],$arr[1]));

}

else{

if(is_array($arr[0])){

$len = count($arr);

for($i=0;$i<$len;$i++){

$arrtmp = $arr[$i];

array_push($arrtmp,$tmp);

$arr[] = $arrtmp;

}

$arr[] = array($tmp);

return $arr;

}

else{

$tmp = $arr[count($arr)-1];

array_pop($arr);

$array = combination($arr);

return combination($array,$tmp);

}

}

}
复制代码

我来回答




其它解决方案
消灭零回复

其它解决方案
版主帮忙研究研究啊

其它解决方案
版主帮忙研究研究啊
ws00377531 发表于 2009-6-16 16:28 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=1072164&ptid=128593]链接标记[img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
上班中偷偷过来的。晚上看看,见谅。

其它解决方案
消灭0时间

其它解决方案
好的 这个算法 16位如果能在0.01秒的话 很有意义的

其它解决方案
消灭0时间
tdhfgg 发表于 2009-6-16 16:33 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=1072194&ptid=128593]链接标记[img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
什么意思 说明白点好嘛

其它解决方案
没时间 啊,带我有时间细看

其它解决方案
0.05s左右可以吗

其它解决方案
function combination($arr = array()){
$count = count($arr);
$key1 = 0;
for($i=0;$i<$count;$i++){
$key2 = 0;
$tmp[$key1+$key2] = array($arr[$i]);
for($j=$i+1;$j<$count;$j++){
$tmp[$key1+$key2+1] = array_merge($tmp[$key1+$key2],array($arr[$j]));
$key2++;
}
$key1 = count($tmp);
}
}

粘回去自己测试吧,我机子比你原来的要快300倍,不要递归,肯定慢


补充:Php教程,常见问题 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,