php 常用算法和时间复杂度
时间:2023-11-05 10:30:49
按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3)
//二分查找O(log2n)
function erfen($a,$l,$h,$f){
if($l >$h){ return false;}
$m = intval(($l+$h)/2);
if ($a[$m] == $f){
return $m;
}elseif ($f < $a[$m]){
return erfen($a, $l, $m-1, $f);
}else{
return erfen($a, $m+1, $h, $f);
}
}
$a = array(1,12,23,67,88,100);
var_dump(erfen($a,0,5,1));
//遍历树O(log2n)
function bianli($p){
$a = array();
foreach (glob($p.'/*') as $f){
if(is_dir($f)){
$a = array_merge($a,bianli($f));
}else{
$a[] = $f;
}
}
return $a;
}
//阶乘O(log2n)
function jc($n){
if($n<=1){
return 1;
}else{
return $n*jc($n-1);
}
}
//快速查找 O(n *log2(n))
function kuaisu($a){
$c = count($a);
if($c <= 1){return $a;}
$l = $r = array();
for ($i=1;$i<$c;$i++){
if($a[$i] < $a[0]){
$l[] = $a[$i];
}else{
$r[] = $a[$i];
}
}
$l = kuaisu($l);
$r = kuaisu($r);
return array_merge($l,array($a[0]),$r);
}
//插入排序 O(N*N)
function charu($a){
$c = count($a);
for($i=1;$i<$c;$i++){
$t = $a[$i];
for($j=$i;$j>0 && $a[$j-1]>$t;$j--){
$a[$j] = $a[$j-1];
}
$a[$j] = $t;
}
return $a;
}
//选择排序O(N*N)
function xuanze($a){
$c = count($a);
for($i=0;$i<$c;$i++){
for ($j=$i+1;$j<$c;$j++){
if($a[$i]>$a[$j]){
$t = $a[$j];
$a[$j] = $a[$i];
$a[$i] = $t;
}
}
}
return $a;
}
//冒泡排序 O(N*N)
function maopao($a){
$c = count($a);
for($i=0;$i<$c;$i++){
for ($j=$c-1;$j>$i;$j--){
if($a[$j] < $a[$j-1]){
$t = $a[$j-1];
$a[$j-1] = $a[$j];
$a[$j] = $t;
}
}
}
return $a;
}
/**
* 排列组合
* 采用二进制方法进行组合的选择,如表示5选3时,只需有3位为1就可以了,所以可得到的组合是 01101 11100 00111 10011 01110等10种组合
*
* @param 需要排列的数组 $arr
* @param 最小个数 $min_size
* @return 满足条件的新数组组合
*/
function plzh($arr,$size=5) {
$len = count($arr);
$max = pow(2,$len);
$min = pow(2,$size)-1;
$r_arr = array();
for ($i=$min; $i<$max; $i++){
$count = 0;
$t_arr = array();
for ($j=0; $j<$len; $j++){
$a = pow(2, $j);
$t = $i&$a;
if($t == $a){
$t_arr[] = $arr[$j];
$count++;
}
}
if($count == $size){
$r_arr[] = $t_arr;
}
}
return $r_arr;
}
$pl = pl(array(1,2,3,4,5,6,7),5);
var_dump($pl);
标签:常用算法,时间复杂度
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python中random模块常用方法的使用教程
2023-12-03 16:30:11
SQL语句练习实例之四 找出促销活动中销售额最高的职员
2011-11-03 16:47:03
SQL 合并多行记录的方法总汇
2024-01-22 08:42:56
Discuz7 的提示效果如何实现
2010-01-13 13:10:00
![](https://img.aspxhome.com/file/UploadPic/20101/13/2010113131444838s.jpg)
PHP封装的PDO数据库操作类实例
2023-11-18 04:54:31
Python3操作YAML文件格式方法解析
2021-05-22 03:57:10
在django admin中配置搜索域是一个外键时的处理方法
2021-02-20 18:48:26
javascript中的数字与字符串相加实例分析
2024-06-05 09:12:13
Python3.x和Python2.x的区别介绍
2022-01-05 12:36:27
python中filter函数的用法示例代码
2022-11-01 19:18:40
Python实现softmax反向传播的示例代码
2021-02-24 10:54:02
![](https://img.aspxhome.com/file/2023/3/84903_0s.png)
vue 项目代码拆分的方案
2024-06-05 09:17:56
![](https://img.aspxhome.com/file/2023/2/123052_0s.png)
QQ邮箱的一个文本编辑器代码
2024-04-29 14:07:13
比较全面的PHP数组的使用方法小结
2023-11-18 21:30:25
Mysql的数据库迁移到另一个机器上的方法详解
2024-01-16 18:33:24
![](https://img.aspxhome.com/file/2023/8/79148_0s.png)
微信小程序 ES6Promise.all批量上传文件实现代码
2024-02-26 15:32:10
python用opencv将标注提取画框到对应的图像中
2023-01-18 21:10:16
![](https://img.aspxhome.com/file/2023/5/72845_0s.png)
PHP在线生成二维码代码(google api)
2024-05-05 09:18:08
解决MySQL 5数据库连接超时问题
2009-03-25 15:24:00
py3nvml实现GPU相关信息读取的案例分析
2022-01-11 11:00:52