Я не понимаю, почему следующий код слишком медленный. Цель этого кода довольно проста: у меня есть набор точек, которые я хочу разбить на 6 ведер (так что 100000 очков за ведро). Код:Простая петля слишком медленная
import scala.collection.mutable.{Map, ListBuffer}
object Main {
def main(args : Array[String]) = {
val m : Map[String, ListBuffer[Double]] = Map()
val labels = Array("1","2","3","4","5","6")
val points = Array.fill(600000){0.0}
var it = 0
val t1 = System.currentTimeMillis
for (i <- 0 until points.length) {
if(it == labels.length-1) it = 0
val point = points(i)
val currentLabel = labels(it)
val values = m.getOrElse(currentLabel, ListBuffer())
m += (currentLabel -> (values :+ point))
it += 1
println("it -> = " + it)
}
val t2 = System.currentTimeMillis
println("fill values in = " + (t2-t1) + " msecs")
}
}
Доступ карты и добавить в буфере списка занять постоянное время так что для меня сложность этого кода O (п), где п числа точек, чтобы разделить. Могу ли я получить некоторые советы, чтобы сделать этот код намного быстрее?
Вставка и поиск в неизменяемой карте - это «O (log n)», какой из них вы используете? – Lee
рабочий код, который необходимо оптимизировать, принадлежит http://codereview.stackexchange.com/ –
Извините, я добавляю импорт, но я использую измененную карту. – alifirat