有谁知道红宝石阵列中的移位和非移位效率如何?
从数组的开头删除并且必须移动内存中的每个元素可能变得非常低效.我认为红宝石会以其他方式做到这一点.
以下任何信息都会有所帮助:
- 算法运行时
- 实现
- 一般效率
- 移位/取消移位是否可以接受用于队列(在C++中这不会)
谢谢!
在Ruby的旧版本(〜2012之前)中,unshift
是O(n)操作。但是,此提交中添加了一个优化,并在Ruby 2.0.0中发布了该优化,该优化使unshift
摊销后的O(1)平均保证为O(1),但单个操作可能为O(n )。这与的运行时间相同shift
。
这篇CS Stack Exchange帖子很好地解释了它是如何工作的,以及如何以O(1)摊销运行时间(这与C ++差不多vector::push_back
,但它的工作方式相同)。