倍增法求最近公共祖先

倍增法(Binary Search)是一種高效的搜尋算法,用於查找數組中的某個元素。它通過不斷縮小搜尋範圍來找到目標元素的位置。倍增法的基本思想是:

  1. 首先確定搜尋範圍,通常是整個數組的開始和結束位置。
  2. 然後確定搜尋範圍的一半,即中點。
  3. 如果目標元素小於中點,則在數組的下半部分繼續搜尋;否則,在數組的上半部分繼續搜尋。
  4. 重複步驟2和步驟3,直到找到目標元素或者搜尋範圍縮小到只有一個元素為止。

下面是一個簡單的倍增法示例,用於查找數組中是否存在某個目標元素:

def binary_search(arr, target):
    low = 0
    high = len(arr) - 1

    while low <= high:
        mid = (low + high) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            low = mid + 1
        else:
            high = mid - 1
    return -1

# 使用示例
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
target = 5
index = binary_search(arr, target)
if index != -1:
    print(f"目標元素 {target} 位於數組中的位置是 {index}。")
else:
    print("目標元素不存在於數組中。")

在這個示例中,我們首先定義了一個函式binary_search,它接受一個數組和一個目標元素作為參數,並返回目標元素在數組中的位置(如果存在的話)。函式內部使用了一個循環來不斷縮小搜尋範圍,直到找到目標元素或者確定它不在數組中。

請注意,倍增法只有在數組已經排好序的情況下才能正常工作。如果數組不是排好序的,那麼倍增法可能會產生不正確的結果。在這種情況下,可以使用其他搜尋算法,如順序搜尋(linear search)或二分搜尋(binary search)。