社区
数据结构与算法
帖子详情
各位高手,这个问题怎么解决?
ettng
2011-05-24 11:50:41
条件:在区域S1,S2......Sn 上
分散着点
A
1(x1,y1),
A
2(x2,y2),
A
3(x3,y3).....
A
n(xn,yn)
目的:将在同一区域Si上的点
A
i(xi,yi)....合并为同一点,合并后同一区域的点的坐标 可以
以这一区域任意一点的坐标代替
例如,图中
A
1(x1,y1),
A
2(x2,y2)在同一区域内,将点
A
1,
A
2合并,
即(x1=x2,y1=y2)
求一算法
由于点数很多(有十几万个点),合并的效率越高,越好!
...全文
115
5
打赏
收藏
各位高手,这个问题怎么解决?
条件:在区域S1,S2......Sn 上 分散着点A1(x1,y1),A2(x2,y2),A3(x3,y3).....An(xn,yn) 目的:将在同一区域Si上的点Ai(xi,yi)....合并为同一点,合并后同一区域的点的坐标 可以 以这一区域任意一点的坐标代替 例如,图中A1(x1,y1),A2(x2,y2)在同一区域内,将点A1,A2合并, 即(x1=x2,y1=y2) 求一算法 由于点数很多(有十几万个点),合并的效率越高,越好!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ljsspace
2011-05-26
打赏
举报
回复
用空间换时间的做法:可以将所有的点以及区域的边界值(做一个标记区分是边界还是点)按x和y轴方向分别排序,复杂度为O((n+m)log(n+m));然后沿x轴扫描所有按x方向排好序的点,扫描过程更新相应区域的x方向边界值,并判断每个点是否位于该区域的x边界范围,如果是,对该点做一个标记=区域号,这一过程复杂度为n+m;同样对y方向也作类似处理, 这一过程复杂度也为n+m。 最后一遍判断所有点,如果该点标记的x方向和y方向都是同一个区域,那么它们是重复点,在同一个等价类中, 这一过程复杂度也为n。 所以总的复杂度为O((n+m)log(n+m))。
cppgp
2011-05-26
打赏
举报
回复
1).如果区域是等分的矩形,实现可以比较简单。假设在x方向上有Nx个区域,y方向上有Ny个区域。
定义结构体
struct s { bool bhave[Nx*Ny]; int x1, x2, y1, y2; float idlex, idley; };
初始化 bhave 全部为 false
初始化 (x1,x2)为x方向起始终止值,(y1,y2)为y方向起始终止值
初始化 idlex为(x2-x1)/Nx,idley为(y2-y1)/Ny
上述操作时间复杂度为O(1) (Nx*Ny为常量)
从头到尾遍历A1(x1,y1)~An(xn,yn)。对于任意Ai,执行:
(A.xi-s.x1)*idlex得出x索引;
(A.yi-s.y1)*idley得出y索引。
设置 s.bhave[x + Nx*y] = true;
上述操作时间复杂度为O(n)
遍历检测s.bhave[Nx*Ny],若s.bhave[i]为true,则获得一个A点坐标。
时间复杂度为O(1)(因为Nx*Ny为常量)
2).如果区域不是等分,或者是复杂的图形,则在判定Ai时,需要做定位处理。比如对于大小不等的矩形,可以采用二分搜索达到lg(n)复杂度。最好的定位方式和Si的分割有关系了。
实现可以比较简单。假设在x方向上有Nx个区域,y方向上有Ny个区域。
方寸之间
2011-05-26
打赏
举报
回复
楼上正解,不过如果区域可以是不规则的就不能这样了。
反正就是根据区域建桶,把点扔进对应的桶了。输出每个非NULL桶的第一个元素即可。
算法时间复杂度O(nm),n为区域个数,m为点个数。如果区域是规则的,可以按楼上优化
pandm
2011-05-25
打赏
举报
回复
有个想法是,按照x坐标建立若干个桶,然后把每个点按照x坐标扔进相应的桶,然后按照y坐标建立若干个桶,将刚才x坐标的那些桶里的坐标拿出来扔进y桶里,扔的过程就可以知道哪些点是一个区域的了
C++课程-Unit1:基础语法
欢迎各位热爱编程的朋友们,我们现在所在的这个课程是C++Unit1语法入门课程。在这个课程中,我们将一起探索C++语言的奥秘,一起开启我们的编程之旅。首先,我要告诉你的是,这个课程并不仅仅是一个普通的编程课程,它更像是一把打开你思维大门的钥匙。在这里,你将有机会开发和锻炼自己的逻辑思维能力,提升你的编程头脑。我们将一起学习C++程序的入门语法,通过实例教学,让你更好地理解和掌握这门语言。我们的目标不仅仅是让你学会编程,更重要的是,我们希望通过这个课程,让你能够将所学的知识应用到实际生活中,
解决
生活中的实际
问题
。无论是在学习、工作还是生活中,我们都会遇到各种各样的
问题
,而编程,就是
解决
问题
的一种有效方式。通过学习C++,你将能够用编程的方式,
解决
一些实际
问题
,让自己的生活变得更加便捷。此外,编程不仅可以帮助我们
解决
问题
,还可以让我们的生活变得更加丰富。通过编程,我们可以创造出各种各样的程序,这些程序可以帮助我们完成各种任务,提高我们的工作效率,也可以帮助我们实现一些以前无法实现的想法,让我们的生活变得更加多彩。总的来说,这个C++Unit1语法入门课程,将帮助你开启编程之路,提升你的逻辑思维能力,
解决
实际
问题
,让你的生活变得更加丰富。让我们一起,开始这段美妙的编程之旅吧!
MySQL数据库如何
解决
大数据量存储
问题
利用MySQL数据库如何
解决
大数据量存储
问题
? 各位
高手
您们好,我最近接手公司里一个比较棘手的
问题
,关于如何利用MySQL存储大数据量的
问题
,主要是数据库中的两张历史数据表,一张模拟量历史数据和一张开关量历史数据表,这两张表字段设计的很简单(OrderNo,Value,DataTime)。基本上每张表每天可以增加几千万条数据,我想问如何存储数据才能不影响检索速度呢?需不需要换oracle数据
kafka
解决
了什么
问题
?
请
高手
指明一下kafka
解决
了什么
问题
,什么场景下使用?消息订阅和发布吗,好像redis也支持,功能是否有重叠? 作者:张琪 链接:https://www.zhihu.com/question/53331259/answer/139862117 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 假设你意气风发,要开发新一代的互联网应用,以期在互联网事业中一展...
揭秘笔记本电脑玩游戏为什么卡顿?
高手
教你如何
解决
笔记本电脑游戏卡顿
笔记本电脑玩游戏为什么卡顿?笔记本电脑玩游戏卡顿是指在正常情况下笔记本电脑明明可以流畅的运行该游戏,却在游戏时出现了游戏帧数突然降低,过一段时间又恢复正常的毛病。这就让我们很尴尬了,玩游戏进入高潮的时候卡顿是有分分钟想砸电脑的节奏啊。那么该如何
解决
笔记本玩游戏卡顿的
问题
呢?下面小编就详细的为大家为大家介绍
解决
笔记本电脑游戏卡顿的方法。 无论台式机还是笔记本玩游戏都存在相同的
问题
利用MySQL数据库如何
解决
大数据量存储
问题
?
各位
高手
您们好,我最近接手公司里一个比较棘手的
问题
,关于如何利用MySQL存储大数据量的
问题
,主要是数据库中的两张历史数据表,一张模拟量历史数据和一张开关量历史数据表,这两张表字段设计的很简单(OrderNo,Value,DataTime)。基本上每张表每天可以增加几千万条数据,我想问如何存储数据才能不影响检索速度呢?需不需要换oracle数据库呢?因为我是数据库方面的新手,希望可以说的详细一点,
数据结构与算法
33,007
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章