转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove
二维平面中有一些点,两点之间的距离为曼哈顿距离,求最小生成树。
朴素的n个点,只能做到O(n^3)或者O(n^2 lgn)。
但是针对这种曼哈顿距离的MST。
其中有个性质是:对于某个点,以他为中心的区域分为8个象限,对于每一个象限,只会取距离最近的一个点连边。
这样的话,由于边是双向的,所以对于每个点只需要考虑4个方向,边的数目最多为O(4*n),再使用kruskal就可以做到O(nlgn)了。
至于证明:
这个结论可以证明如下:假设我们以点A为原点建系,考虑在y轴向右45度区域内的任意两点B(x1,y1)和C(x2,y2),不妨设|AB|≤|AC|(这里的距离为曼哈顿距离),如下图: