zh-hant/docs/chapter_divide_and_conquer/binary_search_recur.md
我們已經學過,搜尋演算法分為兩大類。
實際上,時間複雜度為 $O(\log n)$ 的搜尋演算法通常是基於分治策略實現的,例如二分搜尋和樹。
二分搜尋的分治策略如下所示。
分治能夠提升搜尋效率,本質上是因為暴力搜尋每輪只能排除一個選項,而分治搜尋每輪可以排除一半選項。
在之前的章節中,二分搜尋是基於遞推(迭代)實現的。現在我們基於分治(遞迴)來實現它。
!!! question
給定一個長度為 $n$ 的有序陣列 `nums` ,其中所有元素都是唯一的,請查詢元素 `target` 。
從分治角度,我們將搜尋區間 $[i, j]$ 對應的子問題記為 $f(i, j)$ 。
以原問題 $f(0, n-1)$ 為起始點,透過以下步驟進行二分搜尋。
1. 步和第 2. 步,直至找到 target 或區間為空時返回。下圖展示了在陣列中二分搜尋元素 $6$ 的分治過程。
在實現程式碼中,我們宣告一個遞迴函式 dfs() 來求解問題 $f(i, j)$ :
[file]{binary_search_recur}-[class]{}-[func]{binary_search}