1.divide and conqer
(1) divide into smaller subproblems
(2) conquer via recursive calls
(3)combine solution of subproblems into one for the original problem。
example: (1,3,5,2,4,6)
inversion: (3,2), (5,2), (5,4)
2. 计算array中的inversion数字
2.1 Brute--force:Quardric 时间
2.2 数列 A, n 长度
call an inversion(i < j) :
(1) left: if i,j <= n / 2;
right : if i ,j > n / 2;
split: if i <= n/2 < j
pseudocode:
if n = 1 return 0
else
x = count(lst half of A, n/2)
y = count(2en half of A ,n/2)
z = count Split Inv (A,n)
return x + y + z
3.master method
If :
T(n) <= aT(n/b) + O(n^d);
其中: a:是递归调用的次数(>=1),b:初始值的因子。d:.。
The Master Method:
T(n) = O((n^d)logn) , if a = b^d(case1)
T(n) = O(n^d) , if a < b^d(case2)
T(n) = O(n^(logb(a))), if a > b^d(case3)
https://github.com/Shinered/inversions