Пусть это класс координат с евклидовым расстоянием,
case class coord(x: Double, y: Double) {
def dist(c: coord) = Math.sqrt( Math.pow(x-c.x, 2) + Math.pow(y-c.y, 2) )
}
и пусть сетка координат, например
val grid = (1 to 25).map {_ => coord(Math.random*5, Math.random*5) }
Тогда для любой заданной координаты
val x = coord(Math.random*5, Math.random*5)
ближайшие точки к x
находятся
val nearest = grid.sortWith( (p,q) => p.dist(x) < q.dist(x) )
поэтому первые три ближайших nearest.take(3)
.
Есть ли способ сделать эти вычисления более эффективными, особенно для случая сетки с миллионом точек?
val nearest = grid.minBy( p => p.dist(x) )
, а затем удалить этот элемент для списка и повторить попытку. Работает, если небольшое число 3. Это не заслуживает ответа. Подозреваю побитовую операцию где-то для ускорения - person Jatin   schedule 06.09.2014def distSquare(c: coord) = Math.pow(x-c.x, 2) + Math.pow(y-c.y, 2)
в качестве меры. (что в основном избавляет вас от вычисления.sqrt
каждый раз) - person artur grzesiak   schedule 06.09.2014top
, который делает то, что вы хотите. Может быть, вы можете переназначить источник для этого? spark.apache.org/ документы/0.8.1/api/core/org/apache/spark/rdd/ - person The Archetypal Paul   schedule 06.09.2014