iT邦幫忙

2024 iThome 鐵人賽

DAY 1
0

二元搜尋法(Binary Search),又稱作二分搜尋法、對數搜尋,是一個在已排序的序列中,快速找出特定元素的搜尋演算法。此種搜尋法會先將各元素做排序,並且每次搜尋時會將序列從中一分為二,將目標值與序列中間值做比較。如果目標值即為中間值,則搜尋成功。若目標值小於中間值則往序列左邊繼續尋找,反之,若目標值大於中間值則往序列右邊尋找。以此類推,直到找到目標值或是序列清空為止。

二元搜尋法適合解決以下問題:

  1. 查找問題:在排序好的數列中找出特定的值或位置。
  2. 範圍問題:找到某個值第一次或最後一次出現的位置。
  3. 決策問題:尋找符合特定條件的臨界點,如最大值或最小值。

範例說明
問題:以下有一個已經排序好的數列,共有9個元素,請找出19是否在序列中。
題目數列:[1, 2, 3, 5, 7, 9, 11, 19, 25]

【文字說明解法】:
Step1. 找到中間值,9/2=4.5。第五個元素為7,而目標值19大於中間值7。因此往第五個元素以後的序列找尋目標值,故所剩序列1僅剩下四個元素。
所剩序列1:[ 9, 11, 19, 25]

Step2. 繼續將序列剖半,尋找中間值,4/2=2。所剩序列1中第二個元素為11,而目標值19大於中間值11。因此往所剩序列1中第二個元素以後的序列尋找目標值,故所剩序列2僅剩下兩個元素。
所剩序列2:[19, 25]

Step3. 再一次將序列剖半,2/2=1。所剩序列2中第一個元素為19,而目標值19等於中間值,故搜尋結束。

【圖解法】(可搭配文字說明服用):
https://ithelp.ithome.com.tw/upload/images/20240915/20168781WUwh3HpZN8.png


優點:

  • 搜尋效率高:每次搜尋將範圍縮小一半,搜尋速度非常快,適合處理大型數據。
  • 時間複雜度低:由於效率高,故執行時間也相對較短。
  • 邏輯簡單易實現:演算法邏輯簡單明瞭,容易理解和實現。

缺點:

  • 只能應用於已排序序列:必須保證數據是排序好的,否則演算法無法正確運行。
  • 不適合小型數據:對於較小型的數據,選擇線性搜尋法會較快,並且不需要將資料先做排序。
  • 對動態型數據較難以掌控:對於隨時可能做變動(新增或刪除等等)的序列,二元搜尋法會相對較難以進行。

參考資料:

  1. 二元搜尋 Binart Search - Rust Algorithm Club
  2. 二元搜尋法(Binary search) - Hack MD by 王冠智

下一篇
Day2 Binary Search 題目1:33. Search in Rotated Sorted Array
系列文
Java刷題B:Leetcode Top 100 Liked30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言