目錄
基本概念
二分搜尋(Binary Search)是一種高效的搜尋演算法,用於在已排序的數列(通常是陣列或串列)中尋找特定元素的位置或值。其基本概念如下:
前提條件:
- 資料集合必須是已排序的,可以是升序或降序排列。這是因為二分搜尋利用了排序順序來有效地縮小搜索範圍。
步驟:
- 初始化左右邊界:將搜尋範圍的左邊界
left
設為 0,右邊界right
設為資料集合的最後一個元素的索引。 - 重複以下步驟,直到左邊界
left
大於右邊界right
:- 計算中間索引
mid
,可以使用mid = (left + right) // 2
。 - 檢查中間元素
arr[mid]
與目標元素target
的比較:- 如果
arr[mid]
等於target
,則找到目標元素,返回mid
。 - 如果
arr[mid]
大於target
,則將右邊界right
設為mid - 1
,縮小搜索範圍為左半部分。 - 如果
arr[mid]
小於target
,則將左邊界left
設為mid + 1
,縮小搜索範圍為右半部分。
- 如果
- 計算中間索引
- 如果搜索範圍內找不到目標元素,則返回 -1,表示目標元素不存在於數列中。
特點:
- 二分搜尋是一種高效的搜尋演算法,因為它可以在每次迭代中將搜索範圍縮小一半,而不是線性搜索逐一檢查每個元素。
- 時間複雜度為 O(log n),其中 n 是資料集合中的元素數量。因此,二分搜尋適用於大型排序數列。
- 二分搜尋通常用於數列搜尋,但也可以應用於其他已排序的數據結構,如二叉搜尋樹。
二分搜尋是一個高效的搜尋演算法,特別適用於已排序的數列中尋找目標元素。它的主要優勢在於其快速的搜索速度,特別在大型資料集合中表現出色。
實際應用
以下是使用 Python 實際運用二分搜尋的範例。假設我們有一個已排序的數列(陣列),我們想要找到特定的數字是否存在於數列中,以及它的索引位置(如果存在)。
def binary_search(arr, target):
left, right = 0, len(arr) - 1 # 初始化左右邊界
while left <= right:
mid = (left + right) // 2 # 計算中間索引
if arr[mid] == target:
return mid # 找到目標元素,返回索引位置
elif arr[mid] < target:
left = mid + 1 # 縮小搜索範圍為右半部分
else:
right = mid - 1 # 縮小搜索範圍為左半部分
return -1 # 目標元素不存在於數列中,返回-1
# 測試
my_list = [2, 4, 7, 12, 15, 21, 30, 34, 42]
target_number = 15
result = binary_search(my_list, target_number)
if result != -1:
print(f"目標數字 {target_number} 存在於數列中,索引位置為 {result}")
else:
print(f"目標數字 {target_number} 不存在於數列中")
在這個範例中,我們定義了一個名為 binary_search
的函數,它接受兩個參數:一個已排序的數列 arr
和一個目標數字 target
。函數使用二分搜尋的算法來尋找目標數字。我們初始化左邊界 left
為 0,右邊界 right
為數列的最後一個元素的索引,然後在每次迭代中根據中間元素的值與目標值的比較,縮小搜索範圍。
在測試部分,我們創建了一個已排序的數列 my_list
和一個目標數字 target_number
,然後調用 binary_search
函數來尋找目標數字。最後,我們根據返回值判斷目標數字是否存在於數列中,並打印相應的訊息。
使用案例
二分搜尋(Binary Search)是一種高效的搜尋算法,特別適用於已排序的數據集。以下是一些二分搜尋程式案例應用:
- 查找元素: 最常見的用途是在已排序的數列或列表中查找特定的元素。因為數據已經排序,所以你可以迅速縮小搜索範圍,從而實現快速查找。
- 字典或詞彙搜尋: 在字典或詞彙中查找單詞或詞彙時,可以使用二分搜尋,特別是當詞彙是按字母順序排列時。
- 庫存管理系統: 在庫存管理系統中,你可以使用二分搜尋來查找特定產品或物品的庫存信息。庫存項目通常按照產品編號或名稱排序。
- 數學方程求解: 在數學應用中,你可以使用二分搜尋來解方程或找到方程的根。通過不斷縮小可能的解的範圍,可以高效地找到解。
- 遊戲開發: 在遊戲中,你可以使用二分搜尋來實現各種功能,如查找玩家在排行榜中的位置、確定物體是否在特定範圍內等。
- 日曆應用: 在日曆應用中,你可以使用二分搜尋來查找特定日期,尤其是當日期已按日期順序排列時。
- 簡單排序: 雖然二分搜尋主要是一個查找算法,但也可以在排序中使用。你可以使用二分搜尋來找到應該插入的位置,以實現插入排序。
- 音樂播放器: 在音樂播放器中,你可以使用二分搜尋來查找特定歌曲或歌手,特別是當音樂庫已按標題或藝術家名稱排序時。
- 路線規劃: 在地圖或路線規劃應用中,你可以使用二分搜尋來查找最接近的地點或路徑,以提高搜索速度。
其他演算法快速通道:
- 【Python】什麼是演算法?
- 【Python】Stack(堆疊) 資料結構實作
- 【Python】linear search 線性搜尋
- 【Python】binary search 二分搜尋
- 【Python】Single Linked List(單向鏈結串列) 資料結構實作
- 【Python】Binary Search Tree (二元搜尋樹) 資料結構實作(1)
- 【Python】Binary Search Tree (二元搜尋樹) 資料結構實作(2)
線上學習平台推薦
udemy

我自己最愛用的學習平台是 udemy ,當初會選擇在 udemy 上學習的原因除了課程便宜(當初買的很多課程都300塊左右,是台幣喔台幣!)。
上課時間也可以自己控制(對自律的人來說是一大好處!)
雖然可能有些人會覺得,Youtube上不也很多Tutorials嗎?性質應該差不多吧?而且免費。
雖然看Youtube上也有教學影片,但其實你會發現,這些老師都有另外開課程。
原因也很簡單,只要我們付費購買了他的課程,他就能提供更多的資源來輔助學習,且更有組織的教學過程,甚至有被公司認可的證書。
這就是在免費的youtube上沒辦法做到的。
想知道更多的話,歡迎到【2023】10個使用線上平台學習的好處|學生、工程師、各行各業皆適用 看完整介紹。
推薦入門書籍
精通 Python:運用簡單的套件進行現代運算(第二版)

之前開始入坑python時就是用這本打底的(有換封面過)
這本書除了前幾張介紹基本的語法之外
後續幾張開始介紹與python相關的延伸性的功能
非常適合程式設計初學者以及剛要開始學習這個語言的讀者
羅列以下幾點關於本書大綱供大家參考
- 學習簡單的資料類型、基本數學運算與文字操作
- 以Python的內建資料結構處理資料
- 探索Python程式碼結構,包括函式的使用
- 使用模組與套件編寫大型Python程式
- 深入討論物件、類別與其他物件導向功能
- 檢視一般檔案、關聯式資料庫與NoSQL的儲存機制
- 使用Python建構web用戶端、伺服器、API與服務
- 管理系統工作,例如程式、程序與執行緒
- 瞭解並行處理與網路程式設計的基礎
流暢的 Python:清晰、簡潔、有效的程式設計

適合已經有Python程式語言基礎的人
這本書更詳細的介紹有關python的用法
讓我們寫的程式可以更加"Pythonic"
建議可以與英文版同時閱讀
以後在查閱stackoverflow文獻的時候能不因語言而產生隔閡
- Python 資料模型:瞭解特殊方法是讓物件具備一致行為的關鍵
- 資料結構:充分使用內建的型態,並瞭解 Unicode 時代中,文字 vs. bytes 之間的關係
- 函式就是物件:見識 Python 函式是一級物件,並瞭解這個事實如何影響熱門的設計模式
- 物件導向的習慣用法:學習參考、可變性、介面、運算子多載與多重繼承,並建構類別
- 控制流程:藉由 concurrent.futures 與 asyncio 套件,來充分活用情境管理器、產生器、協同程序與並行
- 中繼編程:瞭解特性、屬性描述器、類別修飾器與中繼類別的工作原理
演算法圖鑑

直觀理解,從基礎開始學習,全圖像化step by step,讓不懂程式的人也能利用圖形了解各種演算法的特質跟運作.
雖然內容並沒有程式實作
但內容演算法流程圖片非常精美
非常適合用來教學或以圖像的方式了解演算法的運作!
Python 自動化的樂趣:搞定重複瑣碎&單調無聊的工作(第二版)

如果想使用自動化來增強工作流程效率,大推本書
之前這本書只有英文版
在博客來等了1個月還是沒等到
沒想到在2020/08/28 出了中文版
二話不說馬上看看人家都是怎麼用python來完成例行公事的
除了運用Python寫出程式,在幾分鐘內搞定人工手動處理需要花費數小時的工作。
探索Python豐富的模組程式庫來完成某些特定工作
例如從網站上抓取資料、讀取PDF和Word文件,以及自動化執行滑鼠點按和鍵盤輸入的工作。
‧在一個或多個檔案中搜尋文字
‧建立、更新、搬移和重新命名檔案和資料夾
‧搜尋網頁和下載網路上的圖文內容
‧處理PDF檔的分割與合併,加入浮水印和加上密碼等作業
‧傳送Email和簡訊
‧填寫線上表單
- 【SSH】製作SSH key教學製作SSH key 1. 打開終端機(Bash/Terminal) 2. 輸入指令 3. 將指定的 SSH 私 … 閱讀全文
- 【快速架站】什麼是Hexo? 5分鐘快速架站教學What is Hexo? Hexo 是一個快速、簡單且強大的網誌框架。Hexo 使用 Markdown(或其 … 閱讀全文
- 【Python】Quick Sort 快速排序|演算法介紹、新手快速入門目錄 基本概念實際應用線上學習平台推薦udemy推薦入門書籍精通 Python:運用簡單的套件進行現代運算(第 … 閱讀全文
- 【Python】Insertion Sort 插入排序|演算法介紹、新手快速入門目錄 基本概念實際應用線上學習平台推薦udemy推薦入門書籍精通 Python:運用簡單的套件進行現代運算(第 … 閱讀全文
- 【Python】Selection Sort 選擇排序|演算法介紹、新手快速入門目錄 基本概念實際應用線上學習平台推薦udemy推薦入門書籍精通 Python:運用簡單的套件進行現代運算(第 … 閱讀全文
在〈【Python】Binary Search 二分搜尋|演算法介紹、新手快速入門〉中有 4 則留言