算法圖解part1:二分查找

1.什麼是算法(Algorithm)

算法是一組完成任務的指令。程序=算法+數據結構
算法是軟件的靈魂,得益於好的算法會給軟件帶來的往往都是質的變化,性能都是呈指數倍提高

2.二分查找法

二分查找是一種算法,其輸入是一個有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否則返回null。相比於簡單查找元素(檢查n次)時,二分法最多需要檢查lognlog n個元素

3.Python代碼實現

缺陷:測試的數組數據是有序的,從小到大排列

//二分查找
def search_2fen(list,item):                         #list數據表,目標元素item   注意寫函數開頭不能爲數字,必須帶冒號:
    low = 0		                                    #低索引
    high = len(list) - 1                            #高索引 爲 len - 1   (初始低索引爲0while 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(lognlog n) [對數時間]
2 簡單查找 O(nn) [線性時間]
3 快速排序 O(nlognn * log n) [一種速度較快的排序算法]
4 選擇排序 O(n2n^2) [一種速度較慢的排序算法]
5 動態規劃 O(n!n!) [旅行商問題]

5.總結

  • 二分查找的速度比簡單查找得多。
  • O(lognlog n)比O(nn)快。需要搜索的元素越多,前者比後者就快得越多。
  • 算法運行時間並不以秒爲單位
  • 算法運行時間是從其增速的角度度量的。
  • 算法運行時間用大O表示法表示。

6.參考資料

《算法圖解》第一章

此部分學習算法內容已上傳github:https://github.com/ShuaiWang-Code/Algorithm/tree/master/Chapter1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章