Ruby的Array#插入的复杂性是什么?

时间:2013-06-10 08:14:18

标签: ruby

Ruby#Array#插入的复杂性是什么?

是O(1)还是O(n)(内存被复制)?

1 个答案:

答案 0 :(得分:4)

简单基准测试显示插入是O(n)

Benchmark.bm do |x|
  arr = (1..10000).to_a
  x.report { 10000.times {arr.insert(1, 1)} }
  arr = (1..100000).to_a
  x.report { 10000.times {arr.insert(1, 1)} }
  arr = (1..1000000).to_a
  x.report { 10000.times {arr.insert(1, 1)} }
end

     user     system      total        real
 0.078000   0.000000   0.078000 (  0.077023)
 0.500000   0.000000   0.500000 (  0.522345)
 5.953000   0.000000   5.953000 (  5.967949)

只要你没有推到数组的末尾,当它变为O(1)时:

Benchmark.bm do |x|
  arr = (1..10000).to_a
  x.report { 10000.times {arr.push 1} }
  arr = (1..100000).to_a
  x.report { 10000.times {arr.push 1} }
  arr = (1..1000000).to_a
  x.report { 10000.times {arr.push 1} }
  arr = (1..10000000).to_a
  x.report { 10000.times {arr.push 1} }
end

   user     system      total        real
 0.000000   0.000000   0.000000 (  0.001002)
 0.000000   0.000000   0.000000 (  0.001000)
 0.000000   0.000000   0.000000 (  0.001001)
 0.000000   0.000000   0.000000 (  0.002001)