热门关键字:  PHP  Cisco  seo  网络广告 虚拟主机 中文域名
当前位置 :| 主页>编程开发>PHP>php基础>

很笨的方法实现全排列

来源: 作者: 时间:2007-03-22 点击:
很笨的方法实现全排列

这种方法是我左思右想想出来的,方法很笨,效率很低

有兴趣的看一下
 
PHP代码如下:

<?php
function full_sort($array
){
    
$len count($array
);
    for(
$i=0;$i<$len;$i
++){
        
$a[]    = 0
;
        
$numr[] = $i
;
    }
    for(
$a[$len-1]=0;$a[$len-1]<=$len;$a[$len-1
]++){
        if(
$a[0]==$len
) break;
        for(
$i=1;$i<$len;$i
++){
            if(
$a[$i]==$len
){
                
$a[$i-1
]++;
                for(
$j=$i;$j<$len-1;$j
++){
                    
$a[$i]=0
;
                }
                
$a[$len-1]=-1
;
                
$skip=true
;
                break;
            }
        }
        if(
$skip
){
            
$skip=false
;
            continue;
        }
        
$pass =1
;
        foreach(
$numr as $num
){
            if(
in_array($num,$a
)){
                
$pass *= 1
;
            }else{
                
$pass *= 0
;
            }
        }
        if(
$pass
){
            
$k
++;
            for(
$i=0;$i<$len;$i
++){
                
$str.= $array[$a[$i
]];
            }
            
$str.= "<br>"
;
        }
    }
    
$str.=$k
;
    return 
$str
;
}
$array = array("a","b","c","d","e","f"
);
echo 
full_sort($array
);
?> 


楼上递归的很好
php中的函数我知道的很少
array_shift()
array_unshift()
array_push()
我都不知道干什么的

在我机子上运行你的代码用时:0.231194972992秒

在你机子上试试这个
 
PHP代码如下:

<?php
function gosort($array,$len
){
    if(
$len<=2
){
        
$rs_array[0]=$array[0].$array[1
];
        
$rs_array[1]=$array[1].$array[0
];
    }else{
        for(
$i=0;$i<$len;$i
++){
            
$leave_one=$array[$i
];
            
$k=0
;
            for(
$j=0;$j<$len;$j
++){
                if(
$j==$i
){
                    continue;
                }else{
                    
$tosent[$k]= $array[$j
];
                    
$k
++;
                }
            }
            
$fetch gosort($tosent,$len-1
);
            foreach(
$fetch as $comein
){
                
$rs_array[] = $leave_one.$comein
;
            }
        }
    }
    return 
$rs_array
;
}

//example
$array =array("a","b","c","d","e","f","g"
);
set_time_limit(0
);
$begin explode(' 'microtime
());
$comeonbaby gosort($array,7
);
$f=0
;
foreach(
$comeonbaby as $menu
){
    echo 
$menu."<br>"
;
    
$f
++;
}
echo 
$f
;
$end explode(' 'microtime
());
$time = ($end[0]+$end[1]) - ($begin[0]+$begin[1
]);
echo 
'<br>'
;
echo 
"执行时间:{$time}秒"
;
?> 


这个执行时间:0.0428099632263秒

我研究这个是想用来计算行列式
我的这个方法虽然已经够快了,还是不行,10个以上字符我电脑CPU 99%被apache占了,好长一段时间都不出结果,

也不知道到底要用多长时间,总之计算不出来了,这种用来开发web的语言不适于用来计算这些东西
 

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
赞助商连接