分治降低时间复杂度:
1.二分法查找:
T(n)=2*T(n/2)+a*n
=4*T(n/4)+2*a*n/2+a*n
=......
=n*log(n)
故.分治可以将一个O(n^2)问题变成一个O(n*log(n))的问题
2.输出前m大的数
引入操作arrangeRight(k):把数组前k大的都弄到最右边
1.设key=a[0],将key挪到适当位置,使得比key小的元素都在key左边,比key大的元素都在k右边
2.选择数组的前部或后部在进行arrangeRight操作
a=k done;
a>k 对右边个元素再进行arrangeRight(k),没必要在对左边做
a<k 对左边元素再进行arrangeRight(k-a)
T(n)=T(n/2)+a*n
=T(n/4)+a*n/2+a*n
=T(n/8)+a*n/4+a*n/2+a*n
=.........
=T(1)+...+a*n/8+a*n/4+a*n/2+a*n<2*a*n
即O(n)
2019.7.24