常見數據結構算法
Array
數組是 最簡單 並且 應用最普遍 的數據結構數組
特徵: 一、使用連續內存空間來存儲 二、存放相同類型或着衍生類型的元素(PHP數組比較特別,能夠存放八種數據類型) 三、經過下標來訪問
Set
集合安全
特徵: 一、保存不重複的元素
Map
字典數據結構
特徵: 一、就是PHP關聯數組,以Key/Value形式存儲
Stack
棧,與隊列類似併發
特徵: 一、存儲數據是先進先出,棧只有一個出口,只能從棧頂部添加和刪除元素
Heap
堆,與二叉樹的數據結構類似函數
特性: 一、子節點的鍵值和索引總小於他的父節點
list
線性表,由零個或多個數據元素組成的有序序列code
特性: 一、線性表是一個序列,在PHP中就是索引數組
Queue
隊列對象
特性: 一、先進先出,併發中使用,能夠安全地將對象從一個任務傳給另外一個任務,能夠使用PHP數組模擬
如何模擬雙向鏈表?排序
使用數組Array來實現 array_shift() / array_unshift() array_pop() / array_push()
重點:找出算法的規律,再用代碼來實現
遞歸
不使用PHP內置函數的前提下,實現字符串翻轉
function str_rev($str){ for($i=0;true;$i++){ if(!isset($str[$i])){ break; } } $return = ''; for($j=$i-1;$j>=0;$j--){ $return .= $str[$j]; } return $return; }
算法是什麼?
是一種解決問題的計算方法
,一個問題有多種算法
來解決,每種算法效率都不一樣,根據需求選擇最優算法
時間複雜度和空間複雜度
做用:用於
評定
某算法 是否合適?是否高效?
時間複雜度
:執行算法所須要的時間空間複雜度
:執行算法所須要的內存空間
常見時間複雜度 例如:常數階O(1)、線性階O(n)、平方階O(n^2)、立方階O(n^3)、對數階O(log2n)、nlog2n階O(nlog2n)、指數階O(n^n) 效率從大到小:O(1) > O(log2n) > O(n) > O(nlog2n) > O(n^2) > O(n^3) > O(2^n) > O(n!) > O(n^n) 時間複雜度計算方式:得出算法的計算次數(空間複雜度與之相似) 用1來取代說有肯定次數的加法
常見排序算法
冒泡排序、直接插入排序、希爾排序、選擇排序、快速排序、歸併排序、堆排序
冒泡排序 最壞狀況 平均狀況 時間複雜度 O(n^2) O(n^2) 空間複雜度 O(1) 直接插入排序 最壞狀況 平均狀況 時間複雜度 O(n^2) O(n^2) 空間複雜度 O(1) 希爾排序 最壞狀況 平均狀況 時間複雜度 O(n^2) O(nlog2n) 空間複雜度 O(1) 選擇排序 最壞狀況 平均狀況 時間複雜度 O(n^2) O(n^2) 空間複雜度 O(1) 快速排序 最壞狀況 平均狀況 時間複雜度 O(n^2) O(nlog2n) 空間複雜度 O(n) O(log2n) 歸併排序 最壞狀況 平均狀況 時間複雜度 O(nlog2n) O(nlog2n) 空間複雜度 O(n) 堆排序 最壞狀況 平均狀況 時間複雜度 O(nlog2n) O(nlog2n) 空間複雜度 O(1)
常見查找算法
二分查找、順序查找
二分查找 最壞狀況 平均狀況 時間複雜度 O(log2n) O(log2n) 空間複雜度 迭代O(1) 遞歸O(log2n) 順序查找 最壞狀況 平均狀況 時間複雜度 O(n) O(n) 空間複雜度 O(1)