php 常用算法和时间复杂度_php技巧
按数量级递增排列,常见的时间复杂度有:常数阶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 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 return 1;
}else{
return $n*jc($n-1);
}
}
//快速查找 O(n *log2(n))
function kuaisu($a){
$c = count($a);
if($c $l = $r = array();
for ($i=1;$i if($a[$i] $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 $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 for ($j=$i+1;$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 for ($j=$c-1;$j>$i;$j--){
if($a[$j] $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 $count = 0;
$t_arr = array();
for ($j=0; $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);

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

遞歸函數的時間複雜度分析涉及:識別基本情況和遞歸呼叫。計算基本情況和每次遞歸呼叫的時間複雜度。求和所有遞歸呼叫的時間複雜度。考慮函數呼叫次數與問題大小的關係。例如,階乘函數的時間複雜度為O(n),因為每次遞歸呼叫都會遞歸深度增加1,總深度為O(n)。

時間複雜度是衡量函數執行時間的指標。常見的PHP函數時間複雜度問題包括循環巢狀、大量陣列遍歷和遞歸呼叫。優化時間複雜度的技術包括:使用快取減少循環次數簡化演算法使用平行處理

Go語言是一種越來越流行的程式語言,它被設計成易於編寫、易於閱讀和易於維護的語言,同時也支援高階程式設計概念。時間複雜度和空間複雜度是演算法和資料結構分析中重要的概念,它們衡量一個程式的執行效率和占用記憶體大小。在本文中,我們將重點分析Go語言中的時間複雜度和空間複雜度。時間複雜度時間複雜度是指演算法執行時間與問題規模之間的關係。通常用大O表示法來表示時間

如何使用C++中的時間複雜度和空間複雜度分析演算法時間複雜度和空間複雜度是演算法運行時間和所需空間的度量。在軟體開發中,我們常常需要評估演算法的效率,以選擇最優的解決方案。 C++作為一種高效能程式語言,提供了豐富的資料結構和演算法庫,同時也具備強大的運算能力和記憶體管理機制。本文將介紹如何使用C++中的時間複雜度和空間複雜度分析演算法,並透過具體的程式碼範例解釋如何進行

Java冒泡排序的時間複雜度分析及應用場景【導言】冒泡排序(BubbleSort)是一種基本的排序演算法。它透過重複交換相鄰的未按順序排列的元素,直到序列完成排序。冒泡排序的時間複雜度較高,但實現簡單,適用於小規模資料的排序。 【演算法原理】冒泡排序的演算法原理很簡單。首先,從序列會計較相鄰的兩個元素,如果順序不對就交換位置;然後,依序對序列中的每一對相鄰元素

PHP陣列打亂排序時間複雜度為O(n),執行時間與陣列大小成正比。實戰案例:建立陣列使用shuffle函數打亂排序列印打亂排序後的陣列

透過使用std::chrono函式庫或外部函式庫等方法,可以測量C++演算法的時間複雜度。為了改善時間複雜度,可以使用更有效的演算法、資料結構來優化或平行程式設計等技術。

理解時間複雜度陷阱至關重要,最佳化策略包括:1.使用正確演算法;2.減少不必要的拷貝;3.最佳化遍歷。實戰案例探討了計算數組平方和、將字串轉換為大寫以及在無序數組中尋找元素的最佳化方法。
