一个dataTable里面的第一列为x坐标,第二列为y坐标,有若干条记录,计算每个点到其他点最小距离放在第三列,怎样让计算速度跟快?现在10000条数据7分多钟。要求控制在30秒内。

解决方案 »

  1.   

    可以参考下最短路径算法
    。Dijkstra算法
      

  2.   

    有几个想法,也许可以帮助提升搜索速度1.这些点一定是成对出现的,A点的最近点是B的话,B点的最近点也是A。 然后A和B就一定不是C点的最近点。
    可以利用这个特点排除掉已经配对的,这样数据就越来越少2.不需要遍历整个集合,首先将数据按第一顺序x坐标,第二顺序y坐标排序。
    对第一个点A点,从第二个点B点开始计算,由于A点到B点的距离是斜边,所以AB间的距离小于两点X坐标差和Y坐标差之和,AB < ∆x + ∆y. 同理,点C,AC之间的距离大于A点和C点X坐标差并且大于Y坐标差。AC > ∆x` and AC > ∆y` .如果AC之间的X坐标差大于已知最近点的X坐标差Y坐标差之和,即 ∆x` > ∆x + ∆y . 那么从C点之后就不用查找了,那些肯定不是。所以,由算法2找到第一个点的匹配点后,将这对点从数据源移除,然后继续
      

  3.   

    首先将数据排序,按X升序排序,X相同的按Y升序排序。计算的时候,先查找范围(X+/-Z,Y+/-Z)内是否有点,有的话,计算距离。如果距离D小于Z,那距离D就是最小的距离,如果距离D大于Z则将查找范围扩大一倍(X+/-2*Z,Y+/-2*Z)。范围Z根据这些无序值的范围合理设置。
      

  4.   

    难道你任务
    再多的线程也只是用到一个核。系统还得给你的线程分配单元片。你以为还真的快了。这个是指在一台机器上的。当然你的线程去调用其他的资源。比如sql,网络,串口等 结果你懂的。
      

  5.   

    什么是两点间的距离? 欧式距离吗?
    如果是,感觉是典型的floyd算法应用。
    速度很快。
    http://www.cnblogs.com/davidluo/articles/1799811.html