Scala向量的分支因子为32,而不是其他数字,背后的理论基础是什么?较小的分支因子不是可以实现更多的结构共享吗?Clojure似乎使用了相同的分支因子。分支因子32有什么神奇之处吗?
发布于 2012-09-18 00:58:09
詹姆斯·布莱克的答案是正确的。选择32个项目的另一个理由可能是,在许多现代处理器中,高速缓存线的大小是64字节,因此两条线可以容纳32个整数,每个4个字节,或者在32位机器上可以容纳32个指针,或者在64位JVM上,由于指针压缩,堆大小可以达到32 to。
发布于 2012-09-18 00:47:59
这是更新的“有效持续时间”。有了这么大的分支因子,你永远不需要超过5个级别,即使是to级的向量。这是一段视频,Rich在9频道上谈论了这一点和Clojure的其他方面。http://channel9.msdn.com/Shows/Going+Deep/Expert-to-Expert-Rich-Hickey-and-Brian-Beckman-Inside-Clojure
发布于 2012-09-18 01:06:13
只是补充一下James的答案。
从算法分析的角度来看,
因为这两个函数的增长是对数的,所以它们以相同的方式缩放。
但是,在实际应用中,具有
跳数是比基数2小得多的跳数,足以使其更接近恒定时间,即使对于相当大的N值也是如此。
我敢肯定,由于某些内存块的大小,他们准确地选择了32个(而不是更高的数字),但主要原因是与较小的大小相比,跳数较少。
我还建议你在InfoQ上观看这个演示文稿,Daniel Spiewak在http://www.infoq.com/presentations/Functional-Data-Structures-in-Scala中讨论了大约30分钟开始的向量
https://stackoverflow.com/questions/12463547
复制相似问题