我想有一個快速執行海明距離二進制向量。 我在Array[Byte]
上測試它,而不是Array[Int]
,認爲它會更快,但事實並非如此。 如果有人能解釋我的這種行爲和/或建議我更好的實施。海明距離二進制向量在斯卡拉
def hammingDistanceI(v1:Array[Int], v2:Array[Int]) = {
v1.zip(v2).count{case(a,b) => a!=b}
}
def hammingDistanceB(v1:Array[Byte], v2:Array[Byte]) = {
v1.zip(v2).count{case(a,b) => a!=b}
}
def speedMeasureByte(v:Array[Byte], nbIte:Int) = {
val t0 = System.nanoTime
for(i<-0 to nbIte-1) hammingDistanceB(v,v)
val t1 = System.nanoTime
(t1-t0)/1000000
}
def speedMeasureInt(v:Array[Int], nbIte:Int) = {
val t0 = System.nanoTime
for(i<-0 to nbIte-1) hammingDistanceI(v,v)
val t1 = System.nanoTime
(t1-t0)/1000000
}
val v1Int = Array.fill(100)(Random.nextInt(2))
val v1Byte = v1Int.map(_.toByte)
val (tInt, tByte) = (speedMeasureInt(v1Int,1000000),
speedMeasureByte(v1Byte,1000000))
// tInt = 1636 ms
// tByte = 3307 ms
我看到它的方式......你在冷靜的jvm上運行你的測量。首先預熱jvm,然後查看數字。 –