加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala的Vector如何工作?

发布时间:2020-12-16 09:47:43 所属栏目:安全 来源:网络整理
导读:我读了 this page关于Scala集合的时间复杂性。正如它所说,Vector的复杂性是eC的所有操作。 它让我想知道什么是矢量。我读了document,它说: Because vectors strike a good balance between fast random selections and fast random functional updates,th
我读了 this page关于Scala集合的时间复杂性。正如它所说,Vector的复杂性是eC的所有操作。

它让我想知道什么是矢量。我读了document,它说:

Because vectors strike a good balance between fast random selections and fast random functional updates,they are currently the
default implementation of immutable indexed sequences. It is backed by
a little endian bit-mapped vector trie with a branching factor of 32.
Locality is very good,but not contiguous,which is good for very
large sequences.

和其他关于Scala一样,它是相当模糊。 Vector如何实际工作?

解决方法

这里的关键字是Trie。
矢量被实现为Trie数据结构。
见 http://en.wikipedia.org/wiki/Trie。

更精确地,它是“位映射向量特里结构”。我刚刚发现一个consise足够描述的结构(以及一个实现 – 显然在Rust)在这里:

https://bitbucket.org/astrieanna/bitmapped-vector-trie

最相关的节录是:

A Bitmapped Vector Trie is basically a 32-tree. Level 1 is an array of size 32,of whatever data type. Level 2 is an array of 32 Level 1’s. and so on,until: Level 7 is an array of 2 Level 6’s.

更新:回答赖玉韶关于复杂性的评论:

我将不得不假设你的意思是“深度”在这里:-D。 “eC”的图例说:“操作有效地持续时间,但这可能取决于一些假设,例如向量的最大长度或散列键的分布。

如果你愿意考虑最坏的情况,并且假设有一个向量的最大尺寸的上限,那么是的,我们可以说复杂性是恒定的。
假设我们认为最大大小是2 ^ 32,那么这意味着最坏的情况是最多7个操作,在任何情况下。
再次,我们可以总是考虑任何类型的集合的最坏情况,找到一个上限,并说这是不变的复杂性,但对于一个列表的例子,这将意味着一个40亿的常数,这是不实用的。

但Vector是相反的,7操作更实用,这是我们如何能够考虑其实践中的复杂性常数。

另一种方式来看这个:我们不是说log(2,N),而是log(32,N)。如果你试图绘制,你会看到它实际上是一条水平线。所以务实地说,随着收集的增长,你永远不会看到处理时间的增加。是的,这仍然不是真正的恒定(这就是为什么它被标记为“eC”,而不只是“C”),你会看到短矢量的差异(但同样,一个非常小的差异,因为数字的操作增长非常慢)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读