分割擊破法 (Divide and Conquer)

分而治之的經典演算法策略

基本步驟

分割擊破法包含三個步驟:

合併排序

def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left = merge_sort(arr[:mid]) right = merge_sort(arr[mid:]) return merge(left, right) def merge(left, right): result = [] i = j = 0 while i < len(left) and j < len(right): if left[i] <= right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 result.extend(left[i:]) result.extend(right[j:]) return result

快速排序

選 pivot 分區,左側都比 pivot 小,右側都比 pivot 大。平均 O(n log n),最壞 O(n²)。雖然最壞情況較差,但實際表現通常優於其他 O(n log n) 排序。

其他應用

二分搜尋、最近點對、Strassen 矩陣乘法、快速傅立葉轉換 (FFT)。分割擊破法也常用於平行計算,因為子問題可以獨立求解。

本課程範例

相關連結