- 问题[描述算法问题,首选形式化方式(数学语言),其次才是非形式化方式(日常语言)]
设P1(x1, y1),P2(x2, y2),P3(x3, y3), P4(x4, y4) …,是平面上n个散列点构成的集合S,最近对问题就是找出集合S中距离最近的点对。 - 解析[问题的理解和推导,可用电子版直接在此编写,也可用纸笔推导,拍照嵌入本文档]
将集合S分成两个子集S1和S2,每个子集中有n/2个点。然后在每个子集中递归地求其最接近的点对,在求出每个子集的最接近点对后,有两种可能情况:1集合S 中最接近的两个点都在子集S1或S2中2这两个点分别在S1和S2中。⑵对于第一点递归求解,如果最近点对分别在集合S1和S2中,那就分别取s1s2中最靠近中线的点,与中位点两两比较,并与子集S1或S2的最小路径对比,得出答案。 - 设计[核心伪代码]
- 分析[算法复杂度推导]
假设n是2的幂
算法运行时间的递归式T(n)=2T(n/2)+f(n)
因此算法时间复杂度为O(nlogn) - 源码[github源码地址]
https://github.com/hackkkkkk/calculate
相关文章: