社区
数据结构与算法
帖子详情
怎样计算来自两个集合的最近点对?
eijnim
2011-05-28 07:16:20
RT。就是有两个点集A和B,求最近点对,其中一个点来自A,另一个来自B。哪位大牛有比较好的算法?
...全文
417
9
打赏
收藏
怎样计算来自两个集合的最近点对?
RT。就是有两个点集A和B,求最近点对,其中一个点来自A,另一个来自B。哪位大牛有比较好的算法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
showjim
2011-05-30
打赏
举报
回复
[Quote=引用 1 楼 pandm 的回复:]
合并,然后求最近点对。
这个问题如果有比“合并A和B,然后求最近点对。”更好的解法的话,那我就能在求一般的最近点对问题里将点数组分成两部分a[1..N/2]和a[n/2 + 1..N]来加速了。。。
[/Quote]
这样是可以的啊,区别就是要抛弃来自同一集合的相邻点对
超级大笨狼
2011-05-29
打赏
举报
回复
求完凸包,就可以连接凸包中心点做个线段,最靠近线段中点作为坐标轴原点的话,
两个凸包上的各取最靠近原点的上下两个点,这四个候选点,求两个欧式距离,最近的那个就是。
这几天在研究凸包,所以啥都往凸包上扯,错了别介意哈:)
超级大笨狼
2011-05-29
打赏
举报
回复
哦,好像无法分半,直接求凸包吧,复杂度不受影响。
eijnim
2011-05-29
打赏
举报
回复
对了,POJ上还有个
裸题3714
,大家有兴趣可以看一下,代码需要的给我发邮件jie414341055#gmail.com
eijnim
2011-05-29
打赏
举报
回复
谢谢大家了,这个问题已经解决了,其实很简单,和普通一个集合的最近点对一样,分治,复杂度O(n*logn),只不过在合并的时候只有两个点属于不同的集合才会更新。这么做已经证明是对的,因为递归到2个点的时候最近的点对一定是合并的时候产生的,所以其实在整个算法过程中不断更新的答案一定是在合并的时候产生的,因此只需在合并的时候注意两个点属于不同集合就好了。真囧,其实只需要加一个标记域和一行代码就OK了。
超级大笨狼
2011-05-29
打赏
举报
回复
好象应该这样:
1,把AB都分成两半,去掉AB靠外侧的点,比如去除A的左半,B的右半,因为肯定形成不了最近。
2,分别求凸包ab,graham法复杂度为n*logn,利用叉积的技巧来进行犄角排序。
3,对ab的极点,求最近,复杂度m*logm忽略不计。
总体复杂度
A+B+(A*logA+B*logB-A-B)/2+m*logm
忽略小的和常数,大概是
A*logA+B*logB
lovekelly20
2011-05-28
打赏
举报
回复
我觉得复杂度要求是O(nlogn)的话可以按2楼说的当成是所有的点的小值。只不过每次求出当前最小值的时候 判断一下两个点是否在一个集合。。但是作了这么多没必要的比较总感觉怪怪的。。坐等大牛 犀利算法。
pandm
2011-05-28
打赏
举报
回复
抱歉。。。我理解错题目了。。。。面壁去。。
pandm
2011-05-28
打赏
举报
回复
合并,然后求最近点对。
这个问题如果有比“合并A和B,然后求最近点对。”更好的解法的话,那我就能在求一般的最近点对问题里将点数组分成两部分a[1..N/2]和a[n/2 + 1..N]来加速了。。。
判断
两个
集合
中是否存在相同元素的4种常用方法(
两个
集合
是否存在交集)
比较
两个
集合
是否存在交集就可以了:于是我们马上就能能想到的方法:通过for循环逐个元素比较,遇到相同返回有相同的结果;我们也可以通过小名在之前文章提到的lambda表达式提高性能,等。今天小名想分享给大家的是来自“万能的Collections”中的一个静态方法顾名思义,它是用来判断
两个
集合
"不相交的”的结果,但我们只要对返回结果取反,就可以高效获得我们想要的结果。
1.Java
集合
框架是什么?说出一些
集合
框架的优
点
?
1.Java
集合
框架是什么?说出一些
集合
框架的优
点
? 每种编程语言中都有
集合
,最初的Java版本包含几种
集合
类:Vector、Stack、HashTable和Array。随着
集合
的广泛使用,Java1.2提出了囊括所有
集合
接口、实现和算法的
集合
框架。在保证线程安全的情况下使用泛型和并发
集合
类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。
集合
框架的部分优
点
如下: ...
Java
集合
框架是什么?说出一些
集合
框架的优
点
?
干货太重,且文字比较多。需要花费时间与耐心细细咀嚼,但是真的能收获到很多。 每种编程语言中都有
集合
,最初的Java版本包含几种
集合
类:Vector、Stack、HashTable和Array。随着
集合
的广泛使用,Java1.2提出了囊括所有
集合
接口、实现和算法的
集合
框架。在保证线程安全的情况下使用泛型和并发
集合
类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。 1...
两个
集合
相等的例题_拆分
集合
为相等的子
集合
(第1届第1题)
题目要求问题描述:将1到N的连续整数组成的
集合
划分为
两个
子
集合
,且保证每个
集合
的数字和相等。例如,对于N=4,对应的
集合
{1,2,3,4},能被划分为{1,4}、{2,3}
两个
集合
,使得1+4=2+3,且划分方案只有此一种。编程实现给定任一正整数N(1<=N<=39),输出其符合题意的划分方案数。样例输入1:3样例输出1:1 (可划分为{1,2}、{3})样例输入2:4样例输出2...
两个
整数
集合
最快算法求交集
这是来自腾讯2014年软件开发笔试题: A,B
两个
整数
集合
,设计一个算法求他们的交集,尽可能的高效。 一、第一种算法,暴力求解,直接采用遍历或者枚举的方法,这种办法最简单易想,但是时间复杂度比较高,为 O(n^2),这是最复杂的情况。 二、预处理。其实思想和C语言中的预处理一样,对数据记性归一化处理。说白了,就是对数组先进行排序。数组排序的算法时间复杂度最低是O(nl...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章