归并排序
- 分解:将要排序的n个元素的序列分解成两个具有n/2个元素的子序列;
- 解决:使用归并排序分别递归地排序两个子序列;
- 合并:合并两个已排序的子序列,产生原问题的解。
无序数组的中位数(TopK)
任意挑一个元素,以该元素为支点,将数组分成两部分,左部分是小于等于支点的,右部分是大于支点的。如果你的运气爆棚,左部分正好是(n-1)/2个元素,那么支点的那个数就是中位数。否则的话则对两侧重复寻找该点
平面最近点对问题
给点平面上的一些点,求距离最近的两个点的距离是多少?
已知一个点的集合S,将S拆分成左右两部分求最近点对。首先对点集S进行排序,一般对点的X坐标从小到大排。算法每次选取一条直线(垂线)L,将S拆分成左右两部分Sl,Sr。L一般取点集S中所有点的中间点的x坐标来划分,这样可以保证SL和SR中的点数目各为n/2。
依次找到Sl,Sr中的最短距离dl,dr。记录最短距离d=min(dl,dr);
对于Sl虚框范围内的某点P,在Sr虚框中与P点距离小于d的点顶多只有六个,就是图二右图中的2个正方形的6的顶点。