php 常用算法和时间的解决办法
内容摘要
这篇文章主要为大家详细介绍了php 常用算法和时间的简单示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!按数量级递增排列,常
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!按数量级递增排列,常
文章正文
这篇文章主要为大家详细介绍了php 常用算法和时间的简单示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!
按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3)代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | <code> //二分查找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 ; }</code> |
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <code> /** * 排列组合 * 采用二进制方法进行组合的选择,如表示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 ); </code> |
注:关于php 常用算法和时间的简单示例的内容就先介绍到这里,更多相关文章的可以留意
代码注释