Scala快速生成上三角矩阵坐标

时间:2014-03-25 09:53:18

标签: performance scala matrix parallel-processing

首次尝试考虑

for (a <- 1 to 5; b <- 1 to 5; if a < b) yield (a,b)

给出了

Vector((1,2), (1,3), (1,4), (1,5), 
              (2,3), (2,4), (2,5), 
                     (3,4), (3,5), 
                            (4,5))

b只有一半的值有效,因此

for (a <- 1 to 5; b <- a+1 to 5) yield (a,b)

也提供相同的上三角矩阵坐标。

要问更快的方法来生成这个坐标向量。

非常感谢。

1 个答案:

答案 0 :(得分:3)

您可以做的最好的事情就是将所有内容都放在Array中,然后在while循环中创建元素(或递归),以避免for的通用机制产生任何开销。 (实际上,使用两个数组,每个索引一个数组会更快。)

val a = {
  val temp = new Array[(Int, Int)](5*4/2)
  var k = 0
  var i = 1
  while (i <= 5) {
    var j = i+1
    while (j <= 5) {
      temp(k) = (i,j)
       j += 1
       k += 1
    }
    i += 1
  }
  temp
}

但除非你有充分的理由相信你的其他方法不能充分发挥作用,否则你不应该解决所有这些问题。

你的标题是“并行处理”,但你可能会对你的内存子系统征税太大,以至于并行化对你没什么帮助。但是,当然你总是可以将一些线分成不同的处理器。你需要一些方法,大于5的方式,这是一个好主意。