Я реализовал список смежности, как Array[List[Int]]
и основные подпрограммы создания графа идет как этотGraph как производительность списка смежности
val edges : List[(Int, Int)] = ...
val adj = Array.fill(v)(List.empty[Int])
edges foreach { case(t, h) => adj(t) = h::adj(t) }
Эта реализация работает примерно в четыре раза медленнее (протестировано с 5 миллионов ребер), чем реализация Java на основе на ArrayList<Integer>[]
. В ребрах Java изначально хранятся как ArrayList<int[]>
. Любые идеи о том, как быстрее сделать версию Scala?
Если производительность является основным фактором, используйте два массива. Эти пары формируются записями в каждом из массивов по заданному индексу. –
Не могли бы вы предоставить как программы Java, так и Scala, которые можно запустить? –