100分求解 快速找到包围点的最小三角形。

maoning 2008-07-11 02:53:00
一张平面图上有一堆随机分布的点(10万个左右),都有x y坐标
任意给定一个点A ,在这10W个点中 快速地找出三个点,它们构成的三角形 正好包围这个点A。
这10W个点可以做预处理。
笨办法肯定能实现,只不过速度太慢了。各位大虾有什么好的思路吗?
...全文
364 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lisa22722934 2008-07-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 shanshuigulang 的回复:]
我想的是直接用A为圆心作圆,半径r为尽可能围住少的点,在这些点里面找你想要的。r 的步长应该可以很容易搞定的吧》?
[/Quote]
我觉得这个方法可行吧~~在一个随机的的小r为半径的圆中,用人工蚂蚁从A出发对圆内所有点只设置一步觅食(蚂蚁随机的只选择一个目标点进行移动),存储距离圆心最小的且没有重复路径的点,即假如此路径被走过,并且更新为当前最小值,就将这条路径上的信息素重新设置为0,后面的蚂蚁就不会再选择此路径。
不知道可行不~~~
八哥 2008-07-18
  • 打赏
  • 举报
回复
最小四边形或园都有方法

再多的点,只有构成凸多边形的顶点才是有效点,先遍历一次,找到凸多边形的顶点,

在顶点中找出距离最大的两个点AB,
求园的话 园心就是AB的中心点,半径为AB/2
求四边形的话,这两点就是四边形的对角线,然后分别从A点和B点延长多边形的四条边,相交后就得到一四边形。两边各组成一个三角形(共用AB边),

如果是三角形,下面是我的猜想: 找到边长最长的三条边延长后得到的三角形和最小三角形,只是猜想,没法证明
mathe 2008-07-14
  • 打赏
  • 举报
回复
而9楼中的算法,如果各个点的分布是足够随机的,从概率上来说,这个算法不会太慢(除非遇上很特殊的情况),很可能你算法的实现有问题.
但是需要说明的是9楼找到的不是面积最小的三角形
mathe 2008-07-14
  • 打赏
  • 举报
回复
可是你4楼说的不是求面积最小.
所以弄不清楚你最小的标准到底是什么?
maoning 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mathe 的回复:]
题目还是描述得不清楚。
假设LZ要找的是一个能够包含A点,而三个顶点到A点最大距离最小的三角形(有可能不唯一,这时可以依次要求次大距离的和最小距离的点的距离尽量小)。
我们可以讲所有点按照到A点的距离进行排序。
然后依次可以事先取出所有到A点距离最近的K个点(比如选择K=3,4,5,...),
连接第K近距离的点B和A,判断前面K-1个点关于这条连线的分布(计算向量叉乘可以判断方向),如果全部在直线一侧,那么说明不存在…
[/Quote]

能包住点A的面积最小的三角形。这个三角形的三个定点在这10W个点里。您说的这个方法就是我现在用的方法,可是实践中速度很慢。
wincar 2008-07-14
  • 打赏
  • 举报
回复

如果10w个点分布不够随机,有的地方很密,有的地方没有。 可能就要做成树形层次结构的划分了,总之把计算限到小局部,再穷举也不怕
wincar 2008-07-14
  • 打赏
  • 举报
回复
同意11楼, 先把10w点按平面空间hash(相当于划成很多小格子), 这样就只要在以该点所在格子为中心的9个格子里寻找了。
caimps 2008-07-12
  • 打赏
  • 举报
回复
错别字:预处理
caimps 2008-07-12
  • 打赏
  • 举报
回复
既然可以与处理,先将10w点用聚类的方法分成若干组,并且定位置关系
给出随机点后先在其所属组内找,没有结果再在相邻组里找,必然有解,也避免了狭长三角形的可能性
mathe 2008-07-12
  • 打赏
  • 举报
回复
题目还是描述得不清楚。
假设LZ要找的是一个能够包含A点,而三个顶点到A点最大距离最小的三角形(有可能不唯一,这时可以依次要求次大距离的和最小距离的点的距离尽量小)。
我们可以讲所有点按照到A点的距离进行排序。
然后依次可以事先取出所有到A点距离最近的K个点(比如选择K=3,4,5,...),
连接第K近距离的点B和A,判断前面K-1个点关于这条连线的分布(计算向量叉乘可以判断方向),如果全部在直线一侧,那么说明不存在以B为最大距离端点的三角形包含A.我们需要选择下一个K,不然我们只要在连线两边各选择一个点就可以了。
山水孤狼 2008-07-12
  • 打赏
  • 举报
回复
昨天的想法有错误,抱歉。考虑到如下情况:三角形面积为 S=0.5*l*h。包含A点的三角形,如果出现h很大的情况下那么不可能出现在A点的附近。因此,应该从 l 或者 h 入手。如果从s入手,即,寻找距离最短的两点,连成线,另外找一点,看它们组成的三角形能否包含A点。可惜贴图不方便,要不然的话直观点。
山水孤狼 2008-07-11
  • 打赏
  • 举报
回复
我想的是直接用A为圆心作圆,半径r为尽可能围住少的点,在这些点里面找你想要的。r 的步长应该可以很容易搞定的吧》?
  • 打赏
  • 举报
回复
离A最近的三个点构成的三角形不一定能把A包住,你还是都有一个衡量“最小”的标准。
qingyaoli 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 youxia000 的回复:]
我想要遍历1次,把 街区距离最小的三个存下来就是了

不知道这个算不算是笨办法

期待
[/Quote]
这个不行吧,万一三个点在一条直线上?
youxia000 2008-07-11
  • 打赏
  • 举报
回复
我想要遍历1次,把 街区距离最小的三个存下来就是了

不知道这个算不算是笨办法

期待
maoning 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dlyme 的回复:]
何谓最小?面积?
[/Quote]

就是离点A最近的三个点组成的三角形
hagangqiou 2008-07-11
  • 打赏
  • 举报
回复
10万个点最多能够作出C3-10的5次方个组合的三角形,但是有绝大部分三角形是在点A外面。可以先排除那些在点外面的三角形。缩小搜索范围
zhaolinger2 2008-07-11
  • 打赏
  • 举报
回复
更快的方法……好像一时想不到……因为三角形的面积和这个点到三个顶点的距离好像没有什么特定关系,所以很难保证不出现这样一个面积最小的三角形,它的一个顶点离A很近,但是另外两个顶点却在“千里之外”。
  • 打赏
  • 举报
回复
何谓最小?面积?

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧