求:在不规则空间点集(比较大,300多万个点)中寻找距离某点最近的八个点

作者&投稿:宠燕 (若有异议请与网页底部的电邮联系)
C++实现一组点中找出两两距离大于某个值的一个点集~

通过检查所有的n(n- 1 ) / 2对点,并计算每一对点的距离,可以找出距离最近的一对点。这
种方法所需要的时间为 O(n^2 )。
该算法对于小的问题采用直接方法求解,而对于大的问题则首先把它划分为两个较小的问
题,其中一个问题(称为A)的大小为[n /2],另一个问题(称为B)的大小为[n /2]。初始时,
最近的点对可能属于如下三种情形之一:
1) 两点都在A中(即最近的点对落在A中);
2) 两点都在B中;
3) 一点在A,一点在B。
假定根据这三种情况来确定最近点对,则最近点对是所有三
种情况中距离最小的一对点。在第一种情况下可对 A进行递归求解,而在第二种情况下可对 B
进行递归求解。算法思路如下:

if (n较小)
{
用直接法寻找最近点对
R e t u r n ;
}
// n较大
将点集分成大致相等的两个部分A和B
确定A和B中的最近点对
确定一点在A中、另一点在B中的最近点对
从上面得到的三对点中,找出距离最小的一对点

为了确定第三种情况下的最近点对,需要采用一种不同的方法。这种方法取决于点集是如
何被划分成A、B的。一个合理的划分方法是从xi(中间值)处划一条垂线,线左边的点属于 A,
线右边的点属于B。位于垂线上的点可在A和B之间分配,以便满足A、B的大小。

center的点是要算出来么,还是自己手动输入?
如果是要程序来计算的话,就有点复杂了,就是先定义一个点是中间点,计算下所有的x相差和y的相差的平方和,是不是都相差最小的那个。


计算出来后
把这些所有的点与center的点都计算距离,就是(x1-x2)(x1-x2) + (y1 - y2) (y1-y2)的长度保存起来,放在一个数组里,全部算完后然后判断这个值前三个最大的值。

首先,我们可以把整个城市的咖啡馆做一次“预处理”。比如,把一个城市分成若干个“格子(grid)”,然后根据用户所在的位置把他放到某一个格子里,只对格子里的咖啡馆进行距离排序。

问题又来了,如果格子大小一样,那么绝大多数结果都可能出现在市中心的一个格子里,而郊区的格子里只有极少的结果。在这种情况下,我们应该把市中心多分出几个格子。更进一步,格子应该是一个“树结构”,最顶层是一个大格——整个城市,然后逐层下降,格子越来越小,这样有利于用户进行精确搜索——如果在最底层的格子里搜索结果不多,用户可以逐级上升,放大搜索范围。

摘自于李开复的文章 算法的力量

因为肯定要算出所有点到指定点的距离,所以时间复杂度不可能低于O(n)这个量级.我觉得成都小P孩的方法不错,空间复杂度只有8,是O(1)级别,可以一试,

我来试试,说一下思路。

构造一个链表。

遍历点集,如果链表长度没有达到8个,或者当前点与指定点的距离小于链表未节点值(即连表中存储的点中与指定点距离最最大者),则将链表末节点删掉,再按从小到大的顺序(距离),将当前点插入连表中。

从链表头到链表未,按距离的由小至大存储 点。

遍历点集完成后,即得到答案。

貌似时间复杂度为O(n),空间复杂度为O(1)

贪心呗

高手啊 再给我俩年让我研究研究


求:在不规则空间点集(比较大,300多万个点)中寻找距离某点最近的八个点...
首先,我们可以把整个城市的咖啡馆做一次“预处理”。比如,把一个城市分成若干个“格子(grid)”,然后根据用户所在的位置把他放到某一个格子里,只对格子里的咖啡馆进行距离排序。问题又来了,如果格子大小一样,那么绝大多数结果都可能出现在市中心的一个格子里,而郊区的格子里只有极少的结果。在这种...

奇异信号之间的关系
长期以来,傅里叶变换是研究函数奇异性的主要工具,其方法是研究函数在傅氏变换域的衰减速度以推断此函数是否具有奇异性及奇异性大小。但是由于傅里叶变换缺乏空间局部性,它只能确定一个函数奇异性的整体性质,而难以确定奇异点在空间的位置及情况。小波变换 小波变换(wavelettransform,WT)是[3] 一种新...

不规则三角网简介
这是一种由Peuker及其团队于1978年开发的系统,其核心原理是通过区域内有限数量的点集,构建出一个均匀的三角面网络,每个数字高程由相邻的连续三角形构成。这些三角形的形状和大小由分布不规则的测点密度和位置决定。这种设计巧妙地解决了地形平坦区域的数据冗余问题,同时又能精确地反映出地形特征点的高程...

数学难题
正方形矩阵是什么,我读高中的时候怎么没听过这个概念,可能是教材改编了,楼主再补充说明一下吧

喷泉定理和山路引理的区别
喷泉定理和山路引理都是计算几何中的基本定理,但是它们的应用场景和解决问题的方法有所不同。简单来说,喷泉定理用于计算一个喷泉喷出的水柱所覆盖的面积,而山路引理则用于计算通过一个连续曲线的路径所覆盖的面积。喷泉定理是指一个喷泉喷出的水柱所覆盖的面积等于水柱的高度乘以水柱底部的周长。这个定理...

高维积分中值定理
1、函数逼近和插值:高维积分中值定理可以用于函数逼近和插值。例如,我们可以利用该定理找到一个多项式,使其在给定的点集上逼近某个函数。这在实际应用中很有用,例如在数值分析、计算机图形学和机器学习等领域。2、积分计算:高维积分中值定理对于积分计算也很有用。它提供了一种在不规则区域上计算积分...

康托三分集
图2.1 在康托尔三分集的构造过程中,如果每一步都用掷骰子的方法来决定去掉被分成的三段中的哪一段,或来选择子区间的长度,就会得到很不规则的随机康托尔集(图9-(a)、图9-(b)),它被当时在美国IBM公司供职的曼德尔布罗特用作描述通讯线路中噪声分布的数学模型,如今在现代非线性动力学的...

Tin不规则三角网
TIN,全称为Triangulated Irregular Network,它在地理信息系统领域中扮演着重要角色。这个概念由Peuker及其团队在1978年提出,主要用于对区域内的有限点集进行处理,通过这些点构建出不规则的三角面网络。这些三角面的形状和大小依据点的不规则分布和密度确定,既能有效避免地形平坦区域的冗余数据,又能精确表示...

分形理论简述
文学艺术等极广泛的学科领域提供了一般的科学方法和思考方式.就目前所知,它有很高程度的应用普遍性.这是因为,具有标度不变性的分形结构是现实世界普遍存在的一大类结构,该结构的含义十分丰富,它不仅指研究对象的空间几何形态,而是一般地指其拓扑维(几何维数)小于其测量维数的点集,如事件点的分布,能量点的分布,时间点...

哲学小径第四十二站:分形理论
从分形理论看空间本质:维度的连续性与非线性<\/ 分形理论用分数维的概念,挑战了传统空间维度的界限。豪斯道夫维数的连续变化,让我们重新审视罗马花椰菜和鹦鹉螺的结构,它们在不同尺度下展现的自相似性,揭示了客体的真实面貌。哲学小径在此引导我们思考,宇宙的奥秘是否如同谢尔宾斯基海绵般,体积微小却充满...

昂仁县17581981512: 求:在不规则空间点集(比较大,300多万个点)中寻找距离某点最近的八个点 -
姬沾肝达: 首先,我们可以把整个城市的咖啡馆做一次“预处理”.比如,把一个城市分成若干个“格子(grid)”,然后根据用户所在的位置把他放到某一个格子里,只对格子里的咖啡馆进行距离排序.问题又来了,如果格子大小一样,那么绝大多数结果都可能出现在市中心的一个格子里,而郊区的格子里只有极少的结果.在这种情况下,我们应该把市中心多分出几个格子.更进一步,格子应该是一个“树结构”,最顶层是一个大格——整个城市,然后逐层下降,格子越来越小,这样有利于用户进行精确搜索——如果在最底层的格子里搜索结果不多,用户可以逐级上升,放大搜索范围.摘自于李开复的文章 算法的力量

昂仁县17581981512: - 个不规则物体放在水里,水面上升3cm,不规则物体的体积怎么求 -
姬沾肝达: 如果水池的底面积为S cm² 那么不规则物体的体积=3S cm³

昂仁县17581981512: 二分查找法,要求使用二分查找查处一个数在数组中的索引,如果不存在打印该数组的最后一个元素的下标,如果出现多次,打印下表最大的一个数
姬沾肝达: int a[10001]; // 所在有序数组 int k; // 所找的数 int l,h,m; l=1, h=len; while(l<=h){ m=(l+h)/2; // 二分查找 if(a[m]==k){ // 找到,则往后找看是否还有与之相同的的.int i;for(i=m+1;i<=h;i++)if(a[i]!=k)break;cout<<i-1<<endl; // 输出最后一个return ;}elseif(a[m]<k) h=m-1; // 向前找else l=m+1; // 向后找 } cout<<len<<endl; // 没有找到,输出最后一个元素下标 return;

昂仁县17581981512: 请问如何在matlab中证明一个点在一个点阵中 -
姬沾肝达: 一楼正解 这个和二维空间的类似 一个点在直线的上面还是在直线的下面 把点 代入函数式子就可以了 --------------------------------------------- 做成向量 方向一样 就对了 点成符号一样 有几个点 就比较几次

昂仁县17581981512: C语言用for和数组求5 个数字的最大值和最大值的下标,要求在给出的代码内添加,不允许添加变量 -
姬沾肝达: #include int main( void ) { int data[ 5 ]; int maxi; int i; for ( i = 0; i { printf( "data[%d]=", i ); scanf( "%d", &data[ i ] ); } //在下方输入求最大值和其下标的代码 for(i=0,maxi=0;i<5;++i) { if(data[maxi] maxi=i; } printf( "最大值的下标为%d,值为%d \n", maxi, data[ maxi ] ); return 0; }

昂仁县17581981512: 在一次抢答比赛中,规定答对1题得10分,答错得 - 5分,不答得0分. -
姬沾肝达: 设答对X道 10X+(10-X)*(-5)=55 得X=7 答对7道

昂仁县17581981512: 距离之差最大问题 -
姬沾肝达: 转化成求另一点到该平面的距离、直角三角形、平面解析几何 (一)直线与圆知识要点 1.直线的倾斜角与斜率k=tgα.(6)平面的平行直线与平面之间的距离、角度,依据是两条异面直线的距离是分别在两条异面直线上两点间距离中最小的.会判断...

昂仁县17581981512: 《C语言》试卷B - -----智力猜字游戏 游戏规则简介: 由计算机在0 - 9,这10个数字中,选取4 -
姬沾肝达: //合法性判断不全,楼主自己加一下吧#include<time.h>#include<stdlib.h>#include<stdio.h>#define N 4 int a1[N]; int b1[N]; int X,Y; void rand_array() { int i=0,j; srand((int)time(0)); while(i<N) { b1[i] = rand()%10; j = 0; while(j<i) { if(b1[i]==b1[j]) { break; } ...

昂仁县17581981512: 一次数学竞赛共有30道题,规则规定答对一道题得4分,答错或不答每道题得 - 分,小明在这 -
姬沾肝达: (30*4-90)/(4-10=30/3=10 30-10=20

昂仁县17581981512: 想在excel中作一个曲线图,只有不规则的x轴数据和其对应的y轴数据,但是要求是根据这些点作图,x轴数据等差 -
姬沾肝达: 选中数据,插入图表,图表类型选xy散点图,确定.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网