1.什麼是算法(Algorithm)
算法是一組完成任務的指令。程序=算法+數據結構
算法是軟件的靈魂,得益於好的算法會給軟件帶來的往往都是質的變化,性能都是呈指數倍提高
2.二分查找法
二分查找是一種算法,其輸入是一個有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否則返回null。相比於簡單查找元素(檢查n次)時,二分法最多需要檢查個元素。
3.Python代碼實現
缺陷:測試的數組數據是有序的,從小到大排列
//二分查找
def search_2fen(list,item): #list數據表,目標元素item 注意寫函數開頭不能爲數字,必須帶冒號:
low = 0 #低索引
high = len(list) - 1 #高索引 爲 len - 1 (初始低索引爲0)
while low <= high: #只要範圍沒有縮小到只包含一個元素以後
//mid = (low + high) // 2
mid = int ((low + high) / 2) #索引爲整數或切片,故 中間元素的索引 mid 強制轉換 或 //
guess = list[mid] #獲取中間元素
if guess == item: #如果中間元素 guess 即爲 目標元素 item 則返回 索引 mid
return mid
if guess > item: #如果中間元素 大於 目標元素,將高索引更改爲 mid - 1
high = mid - 1
else: #如果中間元素 小於 目標元素,將低索引更改爲 low + 1
low = mid + 1
return None #while執行結束,未查找到元素
my_list = [1,3,5] #定義一個list
search_2fen(my_list,1) #查找 1 是否在list中,存在則返回 索引值,不存在則返回None
運行結果:(返回0,說明 1 在 list 的 0 號索引)
0
4.常見算法大O運行時間比較
序號 | 算法名稱 | 大O運行時間 |
---|---|---|
1 | 二分查找 | O() [對數時間] |
2 | 簡單查找 | O() [線性時間] |
3 | 快速排序 | O() [一種速度較快的排序算法] |
4 | 選擇排序 | O() [一種速度較慢的排序算法] |
5 | 動態規劃 | O() [旅行商問題] |
5.總結
- 二分查找的速度比簡單查找快得多。
- O()比O()快。需要搜索的元素越多,前者比後者就快得越多。
- 算法運行時間並不以秒爲單位。
- 算法運行時間是從其增速的角度度量的。
- 算法運行時間用大O表示法表示。
6.參考資料
《算法圖解》第一章
此部分學習算法內容已上傳github:https://github.com/ShuaiWang-Code/Algorithm/tree/master/Chapter1