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

分治法求最近问题

蛮力法 算法思想 蛮力法,顾名思义,即穷举所有点与之间的距离,两层循环暴力找出最近算法执行可视化如图1所示,word文档GIF静态显示,附件已含动图。...分治算法思想 先进行预处理按横坐标排序,然后每次将均分成左右两个子集,最短距离的两个要么都在左子集,要么都在右子集,要么一个点在左子集中,一个点在右子集中,对于前面两种情况,问题变成递归寻找子集的最短距离...,算法执行可视化如图3所示,word文档GIF静态显示,附件已含动图。...图4 如果存在最短距离,那么一定是一边一个,所以我们需要将两边的距离算一下,实际上,我们需要对于一边的,我们需要计算距离的最多不超过4个,因为同一边的之间的距离肯定大于等于minDistance...实验结果 先在小规模数据上跑,环境为MATLAB,数据规模为1w到5w,运行结果如图6所示。 图6 具体数据如表2所示。 表2 数据规模为10w到100w,运行结果如图7所示。

20920

分治应用--最近问题 & 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

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

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

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

    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,停止枚举。最后就能得到该区间的最近。...由鸽巢原理,代码中第四步的枚举实际上最多只会枚举6,效率极高(一种蒟蒻的证明请看下方的评论) 本算法时间复杂度为O(n log n) 代码: #include <stdio.h

    2.6K20

    hdu1007平面最近分治

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

    64010

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

    一、最近问题的解释     看到算法书上有最近的问题,简单来讲最近问题要求出一个包含 ? 个的集合中距离最近的两个。...二、最近问题的蛮力解法     蛮力法是最直接的方法,就是求解任意两个之间的距离,返回坐标和最小的距离 Java代码实现 package org.algorithm.closestpair; /*...三、最近问题的分治解法     分治的思想是将一个问题划分成几个独立的子问题,分别对子问题的求解,最终将子问题的解组合成原始问题的解。...如何将原始问题划分成子问题成为分治的关键。     在最近问题中,首先通过一维坐标将整个空间分成坐标点个数相同的两个区间,如下图: ?...,此时,取中间的部分,因为在我们将坐标点分开的过程中,中间的可能距离比区域 ? 和 ? 上的最小值还要小, ? 。最终返回所有可能解的最小值。

    1.3K40

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

    一、最近问题的解释     看到算法书上有最近的问题,简单来讲最近问题要求出一个包含 个的集合中距离最近的两个。抽象出来就是求解任意两个之间的距离,返回距离最小的的坐标,以及最小距离。...二、最近问题的蛮力解法     蛮力法是最直接的方法,就是求解任意两个之间的距离,返回坐标和最小的距离 Java代码实现 package org.algorithm.closestpair; /*...i < length; i++) { System.out.println(i + "\t" + p[i].getX() + "\t" + p[i].getY()); } // 计算出最近...double result[] = Util.closestPair(p, length); System.out.println("最近为:"); System.out.println...((int) result[0] + "\t" + (int) result[1] + "\t" + Math.sqrt(result[2])); } } 最终的结果 三、最近问题的分治解法

    1.1K60

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

    今天是《python算法教程》的第10篇读书笔记。笔记的主要内容是使用python实现求最小点的时间复杂度为O(nlogn)的算法。...平面最小点问题介绍 在几何学中,有一个基本问题:在一个平面的n个点中,求距离最近的两个。 最直接的思路是遍历所有的,通过比较所有点的距离找出距离最近的两,即暴力算法。...具体的算法讲解可参考下述博文: https://blog.csdn.net/lishuhuakai/article/details/9133961 但运用分治法求解上述问题时,需要注意一,距离最小的两个可能不在于同一个分组的集中...#求出平面中距离最近(若存在多,仅需求出一) import random import math #计算两的距离 def calDis(seq): dis=math.sqrt((...集的的纵坐标必定大于u的纵坐标,故只需检查纵坐标是否大于u[1]+dis,且只需最多检查right集中纵坐标最小的6 def candidateDot(u,right,dis): cnt

    2.9K120

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

    大家好,我们今天来看一道非常非常经典的算法题——最近问题。 这个问题经常在各种面试当中出现,难度不低,很少有人能答上来。说实话,我也被问过,因为毫无准备,所以也没有答上来。...拆分结束之后,我们只需要分别统计左边部分的最近、右边部分的最近,以及一个点在左边一个点在右边的最近即可。对于前面两种情况都很好解决,我们只需要递归就可以搞定了,但对于第三种情况应该怎么办?...也就是说对于SL侧的p,我们在SR侧最多只能找出6个点来可能构成最短,这样我们需要筛查的对数量就大大减小。...我们可以利用二分法找到纵坐标大于 y - d的最小的,然后依次枚举之后的6即可。 代码实现 在我们实现算法之前,我们需要先生成测试数据,否则如何验证我们的算法是否有问题呢?...l = m else: r = m idx = r # 在范围内最多只有6能够构成最近

    3.7K10

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

    MVI 模式的目的是实现一种动态的程序设计,使后续程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。MVI 模式的核心是模型、视图、意图三个部分之间的交互。...那么,具体,我们怎么去实施呢?假设我们现在有三个端:小程序H5PC我们如何打造这样的通用的M层和P层呢?...这就比较考验我们业务的抽象能力了,我们需要将业务逻辑进行抽象,然后将这些抽象的业务逻辑进行封装,然后在不同的页面中引用这些抽象的业务逻辑。...// 通用的数据验证逻辑 } handleError(error) { // 通用的错误处理逻辑 } log(message) { // 通用的日志记录逻辑 }// 有明显差一可以写一个抽象...总结感觉,这是最近关于前端代码复用性的一些思考,前端代码复用是一个很重要的话题,是一个不能回避的问题,也是一个很难的问题。

    54210

    算法的理解

    估算也称PERT法,在计算每项活动的工期时都要考虑三种可能性,计算最悲观的工期、最可能的工期、最乐观的工期,然后再计算出该活动的期望工期,PERT法计算的是期望工期....用PERT法计算工期,我们必须记住下面三个公式(P代表最悲观工期;M代表最可能工期;O代表最乐观工期) PERT公式 标准差公式:(a+4m+b)/6 方差公式:(b-a)/6 用PERT...知识1:三算法 常规考法1:完成活动A悲观估计36天,最可能估计21天,乐观估计6天,求该活动的期望完成时间。 点评:最早考核的形式,最简单,死记公式即可。...这个算法是PERT估算 最终估算结果=(悲观工期+乐观工期+4×最可能工期)/6 标准差=(悲观-乐观)/6 带入公司计划PERT估算结果为:(36+21*4+6)/6=21 带入公式计算标准差为...:(36-6)/6=5 所以根据正太分布:16(21-5)~26(21+5)这个区间范围内的概率都是68.26%。

    1.4K20

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

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

    24610

    jvm可达性分析算法_网络

    1, 物理网卡不支持GRO时, 使用LRO在驱动处合并了多个skb一次性通过网络栈,CPU负荷的减轻是显然的。...2, 物理网卡不支持LRO时,使用GRO在从驱动接收数据那一刻合并了多个skb一次性通过网络栈,CPU负荷的减轻是显然的。...TCP来说,在CPU资源充足的情况下,TSO/GSO 能带来的效果不大,但是在CPU资源不足的情况下,其带来的改观还是很大的。 UDP来说,其改进效果一般,改进效果不超过20%。...故不想linux bridge有防火墙功能的话应该设置: net.bridge.bridge-nf-call-arptables = 0 net.bridge.bridge-nf-call-ip6tables...https://patchwork.ozlabs.org/patch/415791/ [5] http://www.ibm.com/developerworks/cn/linux/l-virtio/ [6]

    1.8K30

    服装关键点检测算法(CNNSTN)含(46以及8)

    人工智能大数据与深度学习 公众号:datayx 最近几年服饰关键点检测分析引起了人们的广泛关注。以前的具有代表性的工作是服装关键的检测或人体关节。...1、 背景介绍 最近几年人们对于视觉时尚分析兴趣不断增加,主要体现在服装属性的预测,衣服的检索 ,关键的检测。视觉时尚分析给行业会带来巨大的价值。...对于以上两个数据集,我们均采用先分开训练4检测,6检测,8检测的模型,然后再尝试4,6,8点检测统一训练。我们在各自的数据集上都采用了相应的对比实验以便测试评估最优模型。...,然后使用一个空间变换网络STN在之后并联四个STN用来消除背景的干扰,之后使用全连接层进行关键的 可见性以及关键的位置进行预测。...以下为Fashion Landmark Detection Benchmark数据集4、 6和8个的部分图片预测效果展示。 ?

    2.2K30

    字符串匹配算法的一理解

    无论是单模还是多模,精确抑或模糊,都是由最简单的暴力匹配算法作为基础,通过一微小进步,缓慢的优化拓展出来的,一系列基于特定数据结构的算法集合。...除了作为字符串匹配算法之源头的暴力匹配算法外,其余的字符串匹配算法,都要经历两个步骤,第一是元数据预处理,生成特定数据结构,第二是基于此特定数据结构做匹配运算。...这就是KMP暴力匹配算法的优化。 KMP是一种从左到右式的前缀匹配算法,在单模式匹配里面,还有从右到左式的后缀匹配算法BM等其优化。按下不表。 但是如果有多个模式串需要匹配呢?  ...我们想把它往多模去扩展,是不是可以考虑把数据结构扩展到二维,用树作为基础,实现一种多模匹配算法呢? 这就是字典树。 字典树与AC自动机 字典树前缀构词树。KMP是一一匹配的时候常用的算法。...一一匹配的问题解决了,而一多的问题,又扩展出了字典树,之于字典树,又优化出了后缀树和压缩字典树等等字符串匹配算法。 3. 表情推荐算法怎么选的?

    2K52

    基于改进的特征的6D位姿估计

    摘要:特征是基于模型的6D位姿估计方法中最成功的一种,作为传统的局部和全局管道的一种高效、综合和折衷的替代方法。在过去的几年里,已经提出了几种不同的算法。...本文提出了该方法的一种新的改进方法,并针对最近在ICCV 2017第三届恢复6D对象位姿国际研讨会上组织的2017年第六次挑战[3]上提出的具有挑战性的数据集测试了其性能。...二 特征方法 本文提出的方法遵循Drost et al.[1]定义的特征(PPF)方法的基本结构,由两个阶段组成:全局建模和局部匹配。...四 实验数据 2017年的第六次挑战[3]提出了一套数据集,用于评估单一象的单一实例的6D本地化任务。...六 结论 本工作提出了PPF方法的一个新的改进方法,并根据最近发布的6D挑战2017引入的数据集测试其性能[3]包括68个对象模型和60475个测试图像。

    44320

    基于改进的特征的6D位姿估计

    摘要:特征是基于模型的6D位姿估计方法中最成功的一种,作为传统的局部和全局管道的一种高效、综合和折衷的替代方法。在过去的几年里,已经提出了几种不同的算法。...本文提出了该方法的一种新的改进方法,并针对最近在ICCV 2017第三届恢复6D对象位姿国际研讨会上组织的2017年第六次挑战[3]上提出的具有挑战性的数据集测试了其性能。...二 特征方法 本文提出的方法遵循Drost et al.[1]定义的特征(PPF)方法的基本结构,由两个阶段组成:全局建模和局部匹配。...四 实验数据 2017年的第六次挑战[3]提出了一套数据集,用于评估单一象的单一实例的6D本地化任务。...六 结论 本工作提出了PPF方法的一个新的改进方法,并根据最近发布的6D挑战2017引入的数据集测试其性能[3]包括68个对象模型和60475个测试图像。

    92010
    领券