求万能cd中的编程高手帮忙优化分群算法

来源:百度文库 编辑:超级军网 时间:2024/04/20 14:55:25


正在搞一个东西,自己不是计算机专业出身,属于自学的半吊子,偶尔编程解决一点问题,求真正专业人士指点

平面上点分群的问题:
1. 距离阈值:平面上很多点,如果两个点A、B之间距离少于t(dist(A,B)<t),则可以直接认为是一组,如果超过t,则不直接识别为一组;
2. 连接性:但是,A、B个点之间的距离即使大于t,只要它们中间存在一个点C,使得dist(A,C)和dist(B,C)都小于t,则A、B仍然认为是一组。
3. 扩展:A、B 之间存在一系列可以连接的点,而A、B可以与其中任意两个点相连,则A、B可以认为是同一组。

我的思路比较笨,先取出A点,与所有剩下所有点比较距离,小于t的先归入A群,然后再从A群中取出其他点,与剩下点继续对比,将距离小于t的也拉入A群,直到不能再拉。接着再从剩下的点中建立第二个群搜寻。

因为点很多几百万至千万级别,所以运算速度是个问题。求算法优化



正在搞一个东西,自己不是计算机专业出身,属于自学的半吊子,偶尔编程解决一点问题,求真正专业人士指点

平面上点分群的问题:
1. 距离阈值:平面上很多点,如果两个点A、B之间距离少于t(dist(A,B)<t),则可以直接认为是一组,如果超过t,则不直接识别为一组;
2. 连接性:但是,A、B个点之间的距离即使大于t,只要它们中间存在一个点C,使得dist(A,C)和dist(B,C)都小于t,则A、B仍然认为是一组。
3. 扩展:A、B 之间存在一系列可以连接的点,而A、B可以与其中任意两个点相连,则A、B可以认为是同一组。

我的思路比较笨,先取出A点,与所有剩下所有点比较距离,小于t的先归入A群,然后再从A群中取出其他点,与剩下点继续对比,将距离小于t的也拉入A群,直到不能再拉。接着再从剩下的点中建立第二个群搜寻。

因为点很多几百万至千万级别,所以运算速度是个问题。求算法优化

你这么搞是不行的, 计算量太大太大.

"A、B可以与其中任意两个点相连" 具体是啥意思, 比距离的话, 能不能预先自己设定几个值,当成参照物, 把所有点先划片切分一次, 可以考虑切成一万组.

一定得找到化大为小的方法, 必须切割.
netxiao1 发表于 2014-1-22 12:05
你这么搞是不行的, 计算量太大太大.

"A、B可以与其中任意两个点相连" 具体是啥意思, 比距离的话, 能不能 ...
加了个示意图,应该可以说明意思了。
这段程序的目的就是找出各种可能连接,并分组。经常的情况是,上百万个点,最后发现都能连到一起。

这个东西叫做聚类算法,资料多得要死。
自己去搜吧。
上学的时候弄过,现在全忘光了。
http://blog.sciencenet.cn/blog-711035-561649.html
聚类算法,人工智能常用的。