我有一个大数组,我想将数组的每个元素与给定的数字N相乘。我可以通过以下方式做到这一点
val arr = Array.fill(100000)(math.random)
val N = 5.0
val newArr = arr.map ( _ * N )
Run Code Online (Sandbox Code Playgroud)
所以这将返回我想要的新数组。另一种方式可能是
def demo (arr :Array [Double] , value : Double ) : Array[Double] ={
var res : Array[Double] = Array()
if ( arr.length == 1 )
res = Array ( arr.head + value )
else
res = demo ( arr.slice(0, arr.length/2) , value ) ++ demo ( arr.slice ( arr.length / 2 , arr.length ) , value )
res
}
Run Code Online (Sandbox Code Playgroud)
我的情况是我有更大的数组,我必须为数千次迭代执行此操作。我想问一下有没有更快的方法来获得相同的输出?将尾递归会提高速度?或者其他什么技术?
想必你的意思是arr.head * value。
从大 O 的角度来看,这些都不是“更快”;它们都是 O(N),这是有道理的,因为它就在描述中:您需要将“每个”数字乘以某个常数。
唯一的区别是,在第二种情况下,您需要花费大量时间对数组进行切片和连接。所以第一个可能会更快。尾递归不会帮助你,因为这不是一个递归问题。您需要做的就是在数组中循环一次。
如果数组中有大量数字,则可以使用arr.par.map.
| 归档时间: |
|
| 查看次数: |
863 次 |
| 最近记录: |