Scala的Vector如何工作?
我读了
this page关于Scala集合的时间复杂性。正如它所说,Vector的复杂性是eC的所有操作。
它让我想知道什么是矢量。我读了document,它说:
和其他关于Scala一样,它是相当模糊。 Vector如何实际工作? 解决方法
这里的关键字是Trie。
矢量被实现为Trie数据结构。 见 http://en.wikipedia.org/wiki/Trie。 更精确地,它是“位映射向量特里结构”。我刚刚发现一个consise足够描述的结构(以及一个实现 – 显然在Rust)在这里: https://bitbucket.org/astrieanna/bitmapped-vector-trie 最相关的节录是:
更新:回答赖玉韶关于复杂性的评论: 我将不得不假设你的意思是“深度”在这里:-D。 “eC”的图例说:“操作有效地持续时间,但这可能取决于一些假设,例如向量的最大长度或散列键的分布。 如果你愿意考虑最坏的情况,并且假设有一个向量的最大尺寸的上限,那么是的,我们可以说复杂性是恒定的。 但Vector是相反的,7操作更实用,这是我们如何能够考虑其实践中的复杂性常数。 另一种方式来看这个:我们不是说log(2,N),而是log(32,N)。如果你试图绘制,你会看到它实际上是一条水平线。所以务实地说,随着收集的增长,你永远不会看到处理时间的增加。是的,这仍然不是真正的恒定(这就是为什么它被标记为“eC”,而不只是“C”),你会看到短矢量的差异(但同样,一个非常小的差异,因为数字的操作增长非常慢)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |