获取点集中的最短距离——scala,递归,函数式编程,时间复杂度NlogN

该博客介绍了如何在海量点集中利用递归和函数式编程,以NlogN的时间复杂度计算最近两点的距离。算法在聚类分析中有重要应用,避免了传统暴力算法的N^2时间复杂度,提高了大规模数据处理的效率。

说明:
这个算法是在海量点集中计算最近两点的距离。
也可以识别出最近点的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值