Scala - 是线性时间内的映射和过滤操作吗?

时间:2013-11-01 21:48:43

标签: scala big-o

Scala是否在线性时间内映射和过滤操作,或者数据库之类的数据结构是否存在一些并行性?

2 个答案:

答案 0 :(得分:15)

独立于并行性,mapfilter操作始终必须至少执行O(n)工作,其中n是集合中元素的数量。 如果收集是例如ArrayListArrayBufferHashMapHashSet,然后filtermap执行O(n)。 对于像平衡树这样的特定集合 - 例如mutable.TreeSetimmutable.TreeMapimmutable.HashSetimmutable.Vectorfiltermap花费O(n logn)时间,因为更新它们以添加所有内容随着集合的增长,元素的作用也越来越多。

无论遍历所有元素需要多少工作,许多Scala集合(通常基于树,地图,尝试和数组的集合)都支持并行filtermap,因此总量每个处理器完成的工作是O(n / p),其中p是您的机器具有的处理器数量。要使用它们,请在调用parfilter之前致电该集合上的map

详细了解parallel collections here

答案 1 :(得分:8)

不,根本就没有并行性,除非你正在做parallel collections,这有点明确。即使有并行性,地图和过滤器也是线性时间操作(但在许多工人之间传播)