主定理.png
應用
二分搜索
- 每次問題規模減半,a=1,b=2,d=0
- 復雜度為n^0 log(n) = log(n)。
快速排序
- 隨機選擇待排序序列中的一個數字作為劃分字問題的標準,劃分是否平均影響算法復雜度
- 快速排序在每次平分的情況下,每次劃分的代價都是O(n)
- 每次問題規模減半,a=2,b=2,d=1
- 復雜度為n log(n)
- 最差情況下,復雜度為O(n^2)
歸并排序
- 數據列均分為兩部分,分別排序,之后以O(n)的復雜度進行合并,空間復雜度O(n)
- 每次問題規模減半,a=2,b=2,d=1
- 復雜度為n log(n)
順序統計量問題
T(n)=T(n/2)+O(n)
O(n):和快速排序的劃分過程一樣
期望復雜度:O(n)
基數排序(Radix sort)
- 對于待排序的整數序列,從最低位到最高位每次按照相應的位排序一次
- 每次遞歸問題規模變為原來的1/10,但需要求解10個子問題,額外運算為O(n)的,a=10,b=10,d=1
- 復雜度為n^1 log(n) = n log(n),近似為O(kN),k為整數的位數
快速傅里葉變換:FFT
- 每次問題規模減半,a=2,b=2,d=1
- 復雜度為n log(n)
Karatsuba快速乘法
- 正常兩個n位數乘法為n^2
- 算法把兩個乘數各分為高低位兩部分,如X*Y = (a+b) * (c+d) = ac+bd + (bc+ad) = ac+bd+(ac+bd - (a-b)(c-d)) 只需要ac,bd,(a-b)(c-d)三次乘法
- 每次問題規模減半,但需要解3個子問題,加法是O(n)的,a=3,b=2,d=1 復雜度為n^log2(3)