我有一个分配比较2个不同算法的问题 . 这是问题所在:
假设我有一系列像这样的xy坐标:
A(2,3),B(5,6),C(7,8),D(6,2),E(5,5)等 .
我想找到两条距离最短的坐标 . 其中一个解决方案是使用蛮力(逐个匹配),但还有另一种使用“分而治之”方法的解决方案 .
你能帮我解决“分而治之”的方法吗?
递归分而治之的方法如下工作:
1)根据x坐标对点进行排序 . 2)通过垂直线x = xmid将点集分成两个相等大小的子集 . 3)在左右子集中递归地解决问题 . 这分别产生左侧和右侧最小距离dLmin和dRmin . 4)找到一对点中的最小距离dLRmin,其中一个点位于分割垂直的左侧,第二个点位于右侧 . 5)最终答案是dLmin,dRmin和dLRmin中的最小值 . (资源)
它的复杂度为O(n log n) . 您还有一个伪代码实现here以及方法here的可视化描述 .
想想“鸿沟”和“合并”部分的意思 . 显然,“分裂”意味着将问题分成两个较小的单独的问题 . 怎么样?那么,鉴于你解决了2个较小的问题,你如何将它们合并在一起?两种方法的时间复杂度是多少?如果您需要更多说明,请发表评论 .
2 回答
递归分而治之的方法如下工作:
它的复杂度为O(n log n) . 您还有一个伪代码实现here以及方法here的可视化描述 .
想想“鸿沟”和“合并”部分的意思 . 显然,“分裂”意味着将问题分成两个较小的单独的问题 . 怎么样?那么,鉴于你解决了2个较小的问题,你如何将它们合并在一起?两种方法的时间复杂度是多少?如果您需要更多说明,请发表评论 .