说明:
这个算法是在海量点集中计算最近两点的距离。
也可以识别出最近点的id,这个会在以后慢慢完善。
求最近点算法具有很大的实际意义,比如说聚类算法。通过不断识别最近点并归类,可以实现对点集的分类。
这类算法最大的难点在于效率,如果只是暴力的计算任意两点的距离然后找出最小的,时间复杂度在N^2。
计算效率低下的算法往往在实际应用中因为时间成本过高,而毫无用处,尤其面对海量数据的时候。
下面通过递归,实现了NlogN的时间复杂度。
同时在数据读取上才采用了scala推荐的方法和函数式编程,可以作为这类问题的通用模板。
package pers.machi.minDistance
import scala.collection.mutable
import scala.io.Source
import scala.collection.mutable.ArrayBuffer
import util.control.Breaks._
case class Point(id: String, x: Double, y: Double)
object GetMinDistance {
def main(args: Array[String]): Unit = {
val r = io.Source.fromFile("E:/0/datas.csv")
val pArr = {
loadData[Point](r)(f)
}
val len = pArr.length
val pArrSortByX = pArr.sortBy(_.x)
pArrSortByX.foreach(println