首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

分治法求最近问题

蛮力法 算法思想 蛮力法,顾名思义,即穷举所有点与之间的距离,两层循环暴力找出最近算法执行可视化如图1所示,word文档GIF静态显示,附件已含动图。...分治算法思想 先进行预处理按横坐标排序,然后每次将均分成左右两个子集,最短距离的两个要么都在左子集,要么都在右子集,要么一个点在左子集中,一个点在右子集中,对于前面两种情况,问题变成递归寻找子集的最短距离...,算法执行可视化如图3所示,word文档GIF静态显示,附件已含动图。...图4 如果存在最短距离,那么一定是一边一个,所以我们需要将两边的距离算一下,实际上,我们需要对于一边的,我们需要计算距离的最多不超过4个,因为同一边的之间的距离肯定大于等于minDistance...图10 分析: 由实验结果可知,在分治规模小于一定数量时采用暴力求解效率更快,特别是在数据规模大的时候,这种暴力分治相结合的方法相比原始分治法具有很大的优势。

15120

分治应用--最近问题 & POJ 3714

问题描述 二维平面上有n个,如何快速计算出两个距离最近? 2....解题思路 暴力做法是,每个与其他去计算距离,取最小的出来,复杂度O(n2) 采用分治算法 将数据点按照 x 坐标排序,找到中位,过中位划线 x = mid_x 将数据分成2部分,递归划分,直到两个半边只有...范围内的左右才有可能距离比 d 更小(好理解) 这个范围内的,再按照 y 坐标排序,查找两个的 y 差值小于 d 的(重点在这里,见下面分析),计算其距离是否比 d 更小 ?...假如在这个范围内的有1,2,3,4,5,6六个(按 y 坐标排序),寻找距离小于 d 的,如果暴力查找,复杂度还是 n2,我们可以看出点4只有可能在其上下y坐标 ± d 的范围内找到满足距离小于...实现代码 /** * @description: 2维平面寻找距离最近分治) * @author: michael ming * @date: 2019/7/4 23:16 * @modified

65010
您找到你想要的搜索结果了吗?
是的
没有找到

原 初学算法-分治法求平面上最近(Cl

本来这个算法在笔者电脑里无人问津过一段时间了,但今天正好做HDU 1007见到了这个问题,今天就来把代码分享出来吧!     ...那么最短距离一定在左半部分、右半部分、跨越左右的中的一个。      那么你可能会有疑问了:本来最近也一定在这三个区域内,这不还是相当于什么都没干吗?     还真不是。...我们可以假设通过递归得到了左边最小距离为d1,右边最小距离为d2,令δ = min(d1,d2)     如图所示,如果跨越左右的可能是最短距离,那么它也必然比δ小。...另外,可以证明对于每个矩形区域,最多尝试8个一定能找到最短距离(算法导论第33.4节有详细的证明,这里不再赘述)。     ...下面,通过这个算法,我们就可以写出一份代码来: /**  * Find closest distance in N points.

1.5K150

计算几何 平面最近 nlogn分治算法 求平面中距离最近的两

平面最近,即平面中距离最近的两 分治算法: int SOLVE(int left,int right)//求解集中区间[left,right]中的最近 { double ans...分析当前集合[left,right]中的最近,有两种可能: 1....当前集合中的最近的两同属于集合[left,mid]或同属于集合[mid,right] 则ans = min(集合1中所有点的最近距离, 集合2中所有点的最近距离...于是我们可以对temp以y为唯一关键字从小到大排序,进行枚举, 更新ans,然后在枚举时判断:一旦枚举到的与py值之差大于ans,停止枚举。最后就能得到该区间的最近。...return sqrt ( (double) ( (a.x - b.x ) * ( a.x - b.x ) + ( a.y - b.y ) * ( a.y - b.y ) ) ); } /*分治法求计算几何中平面点最近距离

2.4K20

每周算法练习——最近问题

一、最近问题的解释     看到算法书上有最近问题,简单来讲最近问题要求出一个包含 ? 个的集合中距离最近的两个。...抽象出来就是求解任意两个之间的距离,返回距离最小的的坐标,以及最小距离。这里会使用到欧式距离的求法: ? 以上是二维的情况,这其实和相似性的计算是类似的,所以便想去实现这样的一个问题。...二、最近问题的蛮力解法     蛮力法是最直接的方法,就是求解任意两个之间的距离,返回坐标和最小的距离 Java代码实现 package org.algorithm.closestpair; /*...三、最近问题分治解法     分治的思想是将一个问题划分成几个独立的子问题,分别对子问题的求解,最终将子问题的解组合成原始问题的解。...如何将原始问题划分成子问题成为分治的关键。     在最近问题中,首先通过一维坐标将整个空间分成坐标点个数相同的两个区间,如下图: ?

1.3K40

每周算法练习——最近问题

一、最近问题的解释     看到算法书上有最近问题,简单来讲最近问题要求出一个包含 个的集合中距离最近的两个。抽象出来就是求解任意两个之间的距离,返回距离最小的的坐标,以及最小距离。...二、最近问题的蛮力解法     蛮力法是最直接的方法,就是求解任意两个之间的距离,返回坐标和最小的距离 Java代码实现 package org.algorithm.closestpair; /*...((int) result[0] + "\t" + (int) result[1] + "\t" + Math.sqrt(result[2])); } } 最终的结果 三、最近问题分治解法...    分治的思想是将一个问题划分成几个独立的子问题,分别对子问题的求解,最终将子问题的解组合成原始问题的解。...如何将原始问题划分成子问题成为分治的关键。

1K60

hdu1007平面最近分治

题目大意:给你N,求这N点中两队的距离的一半,精确到小数点后两位 暴力显然O(n^2),不能过。 分治即可,N,求中间值,mid。...按照横坐标升序排列,递归求出0到mid以及mid+1到N-1的最小距离。 分治关键步骤在合并。 我们求出两个最小距离,但是没有考虑一个点在左边,一个点在右边的情况。  ...先求出两个最小距离中较小的一个,记为mdis   根据mid为分界【mid-mdis,mid+mdis】的闭区间筛选出可能取得最小距离的,因为平面上的还包含纵坐标,所以水平 距离不在这个范围内不可能是最短距离...同理再进入暂时数组(记为temp)的按纵坐标分类,再次筛选,并不断更新mdis 的值。

61410

《python算法教程》Day10 - 平面最近问题平面最小点问题介绍代码演示

今天是《python算法教程》的第10篇读书笔记。笔记的主要内容是使用python实现求最小点的时间复杂度为O(nlogn)的算法。...平面最小点问题介绍 在几何学中,有一个基本问题:在一个平面的n个点中,求距离最近的两个。 最直接的思路是遍历所有的,通过比较所有点的距离找出距离最近的两,即暴力算法。...显然,这种算法的时间复杂度是不能接受的。 因此,是否可以考虑通过分治法的思路,将上述问题的解法的时间复杂度控制在O(nlog2n)?答案是可以的。...具体的算法讲解可参考下述博文: https://blog.csdn.net/lishuhuakai/article/details/9133961 但运用分治法求解上述问题时,需要注意一,距离最小的两个可能不在于同一个分组的集中...#求出平面中距离最近(若存在多,仅需求出一) import random import math #计算两的距离 def calDis(seq): dis=math.sqrt((

2.8K120

分治算法(汉诺塔问题)

算法介绍: 分治算法,其实就是把一个大问题看成若干个小问题,解决了所有的小问题,那么大问题就解决了,原问题的解就是子问题解的合并,之前说的归并排序、快速排序,都用到了分治思想。 二....分治算法的基本步骤: 分解:将原问题分解成若干个相互独立的、规模较小的、容易求解的、与原问题形式相同的子问题; 解决:直接求解子问题或者递归求解子问题; 合并:将各个子问题的解合并为原问题的解。...分治算法经典应用:汉诺塔问题 1. 汉诺塔问题介绍: ? 汉诺塔 ? 汉诺塔问题介绍 2. 怎么玩? ? 玩法 3. 思路分析: 我们先给3根针标上号,左边的是A,中间的是B,右边的是C。...即把最下边的看成一个盘,其他所有的看成一个盘;当然这里其他所有的还可以按照这种方式再进行分治。 4....代码实现: public class HanoiTower { /** * 汉诺塔问题 * @param plateNum 盘子的数量 * @param

90320

Python ---- 算法入门(3)分治算法解决【汉诺塔】问题

汉诺塔问题起源 汉诺塔问题源自印度一个古老的传说,印度教的“创造之神”梵天创造世界时做了 3 根金刚石柱,其中的一根柱子上按照从小到大的顺序摞着 64 个黄金圆盘。...实际上,解决汉诺塔问题是有规律可循的: 当起始柱上只有 1 个圆盘时,我们可以很轻易地将它移动到目标柱上; 当起始柱上有 2 个圆盘时: 移动过程是: 先将起始柱上的 1 个圆盘移动到辅助柱上...由此,n 个圆盘的汉诺塔问题就简化成了 n-1 个圆盘的汉诺塔问题。按照同样的思路, n-1 个圆盘的汉诺塔问题还可以继续简化,直至简化为移动 3 个甚至更少圆盘的汉诺塔问题。 4....以3个圆盘代码运行流程分析 hanoi(3, ‘甲’, ‘乙’, ‘丙’)运行,甲起始柱三个圆盘,由于num = 3; 执行hanoi(num - 1 = 2, sou, aux, tar)

30410

离线Tarjan算法-最近公共祖先问题

转载自Tarjan算法 LCA问题(Least Common Ancestors,最近公共祖先问题),是指给定一棵有根树T,给出若干个查询LCA(u, v)(通常查询数量较大),每次求树T中两个顶点u和...LCA问题有很多解法:线段树、Tarjan算法、跳表、RMQ与LCA互相转化等。本文主要讲解Tarjan算法的原理及详细实现。...一 LCA问题 LCA问题的一般形式:给定一棵有根树,给出若干个查询,每个查询要求指定节点u和v的最近公共祖先。 LCA问题有两类解决思路: 在线算法,每次读入一个查询,处理这个查询,给出答案。...算法从根节点root开始搜索,每次递归搜索所有的子树,然后处理跟当前根节点相关的所有查询。 算法用集合表示一类节点,这些节点跟集合外的的LCA都一样,并把这个LCA设为这个集合的祖先。...:1 5和4的最近公共祖先为:1 5和7的最近公共祖先为:5 1和4的最近公共祖先为:1 6和1的最近公共祖先为:0 3和4的最近公共祖先为:0 0和5的最近公共祖先为:0 */ }

1.7K51

最近,我前端代码复用的一思考

哪怕是目前流行的前端框架,也无法完全解决这个问题。有人会说 比如 taro 或者 uni-app不就解决了一套代码解决了多端问题吗?...这些设计模式都是为了解决一些通用的问题,比如说,MVC 是为了解决数据和视图的分离问题,MVVM 是为了解决数据和视图的双向绑定问题,MVP 是为了解决视图和业务逻辑的分离问题,MVI 是为了解决视图和状态的分离问题...那么,具体,我们怎么去实施呢?假设我们现在有三个端:小程序H5PC我们如何打造这样的通用的M层和P层呢?...// 通用的数据验证逻辑 } handleError(error) { // 通用的错误处理逻辑 } log(message) { // 通用的日志记录逻辑 }// 有明显差一可以写一个抽象...总结感觉,这是最近关于前端代码复用性的一些思考,前端代码复用是一个很重要的话题,是一个不能回避的问题,也是一个很难的问题

20410

原创 | 平面内有N个,如何快速求出距离最近

大家好,我们今天来看一道非常非常经典的算法题——最近问题。 这个问题经常在各种面试当中出现,难度不低,很少有人能答上来。说实话,我也被问过,因为毫无准备,所以也没有答上来。...分治法 如果我们仔细思考一下,会发现这个问题和排序其实非常类似。因为我们在排序的时候,表面上来看每两个之间都存在大小关系,我们要排序似乎也要获得这些关系。...拆分结束之后,我们只需要分别统计左边部分的最近、右边部分的最近,以及一个点在左边一个点在右边的最近即可。对于前面两种情况都很好解决,我们只需要递归就可以搞定了,但对于第三种情况应该怎么办?...我们来分析一下问题,我们在左侧随便选择一个p,我们来想一个问题,对于p而言,SR一侧所有的都有可能与它构成最近吗?...我们可以利用二分法找到纵坐标大于 y - d的最小的,然后依次枚举之后的6个即可。 代码实现 在我们实现算法之前,我们需要先生成测试数据,否则如何验证我们的算法是否有问题呢?

3.3K10

《python算法教程》Day11 - 分治法求解平面凸包问题平面凸包问题简介分治法求解思路与直线的位置判断代码示例

这是《python算法教程》的第11篇读书笔记,笔记主要内容是使用分治法求解凸包。 平面凸包问题简介 在一个平面点集中,寻找点集最外层的,由这些所构成的凸多边形能将集中的所有点包围起来。...convexHull.png 分治法求解思路 按照暴力法的思路(求出所有由集任意两的直线,再获取使得点集剩余的点在该直线的一侧的直线)去求解凸包问题,显然算法复杂度达到了n^3,这并不是在时间复杂度上可以接受的算法...因此,可考虑使用分治法去求解凸包。大体思路如下: 1.找出由横坐标最大、最小的两个p1p2所组成的直线。用该直线将集分成上下两set1,set2部分。...plt.show() #---------------------------------------------------------------------- #下包的右包进一步划分...minSize=float('inf') minDot=() #med_x=(seq[len(seq)//2][0]+seq[-len(seq)//2-1][0])/2 #序列划分为直线

1.9K80

NP问题的一感想

对于这些变种问题不仅不知道线性算法,而且不存在保证以多项式时间运行的已知算法。这些问题的一些熟知算法对于某些情况可能要花费指数时间。...这些NP-完全问题精确的复杂度仍然需要确定并且在计算机理论科学方面仍然是最重要的开放性问题。或者这些问题都有多项式时间算法,或者都没有多项式时间算法。 二.难与易 给问题分类时,第一步要考虑分界。...第一个被证明的NP-完全问题是可满足性(satisfiability)问题。这个问题把一个布尔表达式作为输入并提问该表达式各变量的一次赋值取值true。...为此,他用到了NP中每一个问题都已知的事实:NP中的每一个问题都可以用一台非确定性计算机在多项式时间内求解。计算机的这种形式化模型就是图灵机(Turing machine)。...该布尔公式为真,当且仅当在由图灵机运行的程序其输入得到一个“是”的答案。 一旦可满足性问题被证明NP-完全,则一大批新的NP-完全问题,包括某些经典的问题,也被证明是NP-完全的。

66430

平面几何算法:求点到直线和圆的最近

今天我们来学习平面几何算法,求点到直线和圆的最近。 这个方法还挺常用的。 比如精细的图形拾取(尤其是一些没有填充只有描边的图形)。如果光标点到最近的距离小于某个阈值,计算图形就算被选中。...还比如图形编辑器的实体吸附、极轴还有正交,当靠近某条直线时,绘制会吸附到这条直线的最近上。 求最近,起名通常为 getClosestPoint(最近),或者 project(投影)。...在介绍投影算法之前,我们先学习一个前置知识:线性插值。...线性插值在数学、计算机图形学领域被广泛使用,比如贝塞尔曲线,线性贝塞尔曲线就是线性插值,还有就是本文后面会讲的最近算法。...当然在平面几何上就会表现为超出线段的范围,但它仍然符合它是在一条直线上的特征,如下图: 点到直线的最近 已知直线的两 p0、p1 组成的直线上,距离 p 最近最近

14610

jvm可达性分析算法_网络

1, 物理网卡不支持GRO时, 使用LRO在驱动处合并了多个skb一次性通过网络栈,CPU负荷的减轻是显然的。...2, 物理网卡不支持LRO时,使用GRO在从驱动接收数据那一刻合并了多个skb一次性通过网络栈,CPU负荷的减轻是显然的。...TCP来说,在CPU资源充足的情况下,TSO/GSO 能带来的效果不大,但是在CPU资源不足的情况下,其带来的改观还是很大的。 UDP来说,其改进效果一般,改进效果不超过20%。...所以在VxLAN环境中,其实是可以把GSO关闭,从而避免它带来的一些潜在问题。...Offloading 带来的潜在问题 分段offloading可能会带来潜在的问题,比如网络传输的延迟latency,因为packets的大小的增加,大大增加了driver queue的容量(capacity

1.7K30
领券