d_heap 0.3.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/d_heap.gemspec CHANGED
@@ -8,28 +8,40 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["nicholas a. evans"]
9
9
  spec.email = ["nicholas.evans@gmail.com"]
10
10
 
11
- spec.summary = "A d-ary heap implementation, for priority queues"
11
+ spec.summary = "very fast min-heap priority queue"
12
12
  spec.description = <<~DESC
13
13
  A C extension implementation of a d-ary heap data structure, suitable for
14
14
  use in e.g. priority queues or Djikstra's algorithm.
15
15
  DESC
16
16
  spec.homepage = "https://github.com/nevans/#{spec.name}"
17
17
  spec.license = "MIT"
18
- spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
18
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
19
19
 
20
20
  spec.metadata["homepage_uri"] = spec.homepage
21
21
  spec.metadata["source_code_uri"] = spec.homepage
22
- spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/Changelog.md"
22
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
23
23
 
24
- # Specify which files should be added to the gem when it is released.
25
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
26
- spec.files = Dir.chdir(File.expand_path(__dir__)) {
27
- `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^(test|spec|features)/}) }
24
+ # Specify which files should be added to the gem when it is released. The
25
+ # `git ls-files -z` loads the files in the gem that have been added into git.
26
+ git_ls_files = Dir.chdir(File.expand_path(__dir__)) {
27
+ `git ls-files -z`.split("\x0")
28
28
  }
29
+ exclude_paths_re = %r{
30
+ \A(
31
+ \.rspec|
32
+ Rakefile|
33
+ Gemfile|
34
+ N\z|
35
+ (benchmarks|bin|spec)/|
36
+ lib/d_heap/benchmarks
37
+ )
38
+ }x
39
+ spec.files = git_ls_files.reject {|f| f.match(exclude_paths_re) }
29
40
  spec.bindir = "exe"
30
41
  spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
31
42
  spec.require_paths = ["lib"]
32
43
  spec.extensions = ["ext/d_heap/extconf.rb"]
33
44
 
34
- spec.add_development_dependency "rspec-benchmark"
45
+ spec.add_development_dependency "benchmark_driver"
46
+ spec.add_development_dependency "ruby-prof"
35
47
  end
@@ -0,0 +1,93 @@
1
+ Benchmarking run at 2021-01-25 23:31:48 -0500
2
+ ruby v2.7.2, DHeap v0.6.1
3
+
4
+ Warming up --------------------------------------
5
+ push + pop (findmin) 135.463 i/s - 686.000 times in 5.064119s (7.38ms/i)
6
+ push + pop (bsearch) 5.453k i/s - 27.489k times in 5.040925s (183.38μs/i)
7
+ push + pop (rb_heap) 647.863k i/s - 3.270M times in 5.048030s (1.54μs/i)
8
+ push + pop (c++ stl) 3.923M i/s - 19.658M times in 5.011369s (254.93ns/i, 587clocks/i)
9
+ push + pop (c_dheap) 5.613M i/s - 28.125M times in 5.010621s (178.16ns/i, 450clocks/i)
10
+ Calculating -------------------------------------
11
+ N 1000000 N 10000000 N 3162278 N 316228 N 100000 N 31623 N 10000 N 3162 N 1000 N 316 N 100 N 32 N 10
12
+ push + pop (findmin) 135.943 12.869 41.182 343.249 1.097k 3.587k 12.631k 50.336k 224.814k 948.877k 2.595M 4.202M 5.480M i/s - 2.031k times in 14.940053s 157.815976s 49.317074s 5.916981s 1.850898s 0.566265s 0.160799s 0.040349s 0.009034s 0.002140s 0.000783s 0.000483s 0.000371s
13
+ push + pop (bsearch) 5.356k 281.895 971.955 26.362k 81.121k 412.392k 1.210M 1.829M 2.203M 2.396M 2.904M 3.214M 3.931M i/s - 81.797k times in 15.271966s 290.167837s 84.157151s 3.102831s 1.008328s 0.198348s 0.067624s 0.044714s 0.037127s 0.034134s 0.028165s 0.025451s 0.020806s
14
+ push + pop (rb_heap) 673.578k 467.512k 465.936k 718.419k 732.549k 943.118k 950.389k 1.062M 1.263M 1.356M 1.604M 1.857M 2.326M i/s - 9.718M times in 14.427345s 20.786487s 20.856821s 13.526848s 13.265927s 10.304049s 10.225219s 9.152454s 7.697285s 7.165792s 6.060302s 5.233045s 4.178291s
15
+ push + pop (c++ stl) 4.171M 2.737M 3.458M 4.402M 4.842M 5.503M 5.731M 6.319M 6.899M 7.084M 7.393M 7.772M 7.707M i/s - 58.839M times in 14.106950s 21.496544s 17.014548s 13.366627s 12.150850s 10.692853s 10.266595s 9.311420s 8.528926s 8.305938s 7.958634s 7.570905s 7.634693s
16
+ push + pop (c_dheap) 6.490M 3.735M 5.231M 7.280M 7.150M 7.670M 8.045M 8.704M 9.340M 9.688M 9.669M 9.921M 10.196M i/s - 84.195M times in 12.972480s 22.542978s 16.096451s 11.564531s 11.775039s 10.976519s 10.465346s 9.673356s 9.014859s 8.690250s 8.707992s 8.486921s 8.257262s
17
+
18
+ Comparison:
19
+ push + pop (findmin)
20
+ N 10: 5480288.0 i/s
21
+ N 32: 4202409.8 i/s - 1.30x slower
22
+ N 100: 2595178.8 i/s - 2.11x slower
23
+ N 316: 948876.5 i/s - 5.78x slower
24
+ N 1000: 224813.9 i/s - 24.38x slower
25
+ N 3162: 50336.4 i/s - 108.87x slower
26
+ N 10000: 12630.7 i/s - 433.89x slower
27
+ N 31623: 3586.7 i/s - 1527.96x slower
28
+ N 100000: 1097.3 i/s - 4994.31x slower
29
+ N 316228: 343.2 i/s - 15965.91x slower
30
+ N 1000000: 135.9 i/s - 40313.05x slower
31
+ N 3162278: 41.2 i/s - 133073.25x slower
32
+ N 10000000: 12.9 i/s - 425838.01x slower
33
+
34
+ push + pop (bsearch)
35
+ N 10: 3931408.4 i/s
36
+ N 32: 3213952.9 i/s - 1.22x slower
37
+ N 100: 2904181.8 i/s - 1.35x slower
38
+ N 316: 2396374.2 i/s - 1.64x slower
39
+ N 1000: 2203157.1 i/s - 1.78x slower
40
+ N 3162: 1829352.1 i/s - 2.15x slower
41
+ N 10000: 1209584.9 i/s - 3.25x slower
42
+ N 31623: 412392.2 i/s - 9.53x slower
43
+ N 100000: 81121.4 i/s - 48.46x slower
44
+ N 316228: 26362.1 i/s - 149.13x slower
45
+ N 1000000: 5356.0 i/s - 734.02x slower
46
+ N 3162278: 972.0 i/s - 4044.84x slower
47
+ N 10000000: 281.9 i/s - 13946.33x slower
48
+
49
+ push + pop (rb_heap)
50
+ N 10: 2325816.5 i/s
51
+ N 32: 1857033.5 i/s - 1.25x slower
52
+ N 100: 1603540.3 i/s - 1.45x slower
53
+ N 316: 1356156.9 i/s - 1.72x slower
54
+ N 1000: 1262515.2 i/s - 1.84x slower
55
+ N 3162: 1061785.1 i/s - 2.19x slower
56
+ N 10000: 950389.3 i/s - 2.45x slower
57
+ N 31623: 943118.5 i/s - 2.47x slower
58
+ N 100000: 732548.8 i/s - 3.17x slower
59
+ N 316228: 718418.6 i/s - 3.24x slower
60
+ N 1000000: 673577.8 i/s - 3.45x slower
61
+ N 10000000: 467512.3 i/s - 4.97x slower
62
+ N 3162278: 465935.8 i/s - 4.99x slower
63
+
64
+ push + pop (c++ stl)
65
+ N 32: 7771751.1 i/s
66
+ N 10: 7706818.6 i/s - 1.01x slower
67
+ N 100: 7393127.3 i/s - 1.05x slower
68
+ N 316: 7083991.6 i/s - 1.10x slower
69
+ N 1000: 6898781.3 i/s - 1.13x slower
70
+ N 3162: 6319035.6 i/s - 1.23x slower
71
+ N 10000: 5731130.5 i/s - 1.36x slower
72
+ N 31623: 5502665.3 i/s - 1.41x slower
73
+ N 100000: 4842393.2 i/s - 1.60x slower
74
+ N 316228: 4401947.6 i/s - 1.77x slower
75
+ N 1000000: 4170936.4 i/s - 1.86x slower
76
+ N 3162278: 3458169.7 i/s - 2.25x slower
77
+ N 10000000: 2737146.6 i/s - 2.84x slower
78
+
79
+ push + pop (c_dheap)
80
+ N 10: 10196454.1 i/s
81
+ N 32: 9920533.6 i/s - 1.03x slower
82
+ N 316: 9688419.5 i/s - 1.05x slower
83
+ N 100: 9668679.8 i/s - 1.05x slower
84
+ N 1000: 9339557.0 i/s - 1.09x slower
85
+ N 3162: 8703782.7 i/s - 1.17x slower
86
+ N 10000: 8045103.0 i/s - 1.27x slower
87
+ N 31623: 7670445.6 i/s - 1.33x slower
88
+ N 316228: 7280432.6 i/s - 1.40x slower
89
+ N 100000: 7150276.7 i/s - 1.43x slower
90
+ N 1000000: 6490261.6 i/s - 1.57x slower
91
+ N 3162278: 5230642.9 i/s - 1.95x slower
92
+ N 10000000: 3734856.5 i/s - 2.73x slower
93
+
@@ -0,0 +1,39 @@
1
+ Calculating -------------------------------------
2
+ bin/bench_n 10000 bin/bench_n 100000 bin/bench_n 1000000 bin/bench_n 10000000
3
+ push + pop (findmin) 40.280M 42.236M 58.956M 204.536M bytes - 1.000 times
4
+ push + pop (bsearch) 40.212M 42.036M 59.012M 204.536M bytes - 1.000 times
5
+ push + pop (rb_heap) 40.264M 41.780M 58.940M 204.364M bytes - 1.000 times
6
+ push + pop (c++ stl) 40.416M 42.268M 56.624M 302.152M bytes - 1.000 times
7
+ push + pop (c_dheap) 40.848M 43.968M 72.888M 568.828M bytes - 1.000 times
8
+
9
+ Comparison:
10
+ push + pop (findmin)
11
+ bin/bench_n 10000: 40280000.0 bytes
12
+ bin/bench_n 100000: 42236000.0 bytes - 1.05x larger
13
+ bin/bench_n 1000000: 58956000.0 bytes - 1.46x larger
14
+ bin/bench_n 10000000: 204536000.0 bytes - 5.08x larger
15
+
16
+ push + pop (bsearch)
17
+ bin/bench_n 10000: 40212000.0 bytes
18
+ bin/bench_n 100000: 42036000.0 bytes - 1.05x larger
19
+ bin/bench_n 1000000: 59012000.0 bytes - 1.47x larger
20
+ bin/bench_n 10000000: 204536000.0 bytes - 5.09x larger
21
+
22
+ push + pop (rb_heap)
23
+ bin/bench_n 10000: 40264000.0 bytes
24
+ bin/bench_n 100000: 41780000.0 bytes - 1.04x larger
25
+ bin/bench_n 1000000: 58940000.0 bytes - 1.46x larger
26
+ bin/bench_n 10000000: 204364000.0 bytes - 5.08x larger
27
+
28
+ push + pop (c++ stl)
29
+ bin/bench_n 10000: 40416000.0 bytes
30
+ bin/bench_n 100000: 42268000.0 bytes - 1.05x larger
31
+ bin/bench_n 1000000: 56624000.0 bytes - 1.40x larger
32
+ bin/bench_n 10000000: 302152000.0 bytes - 7.48x larger
33
+
34
+ push + pop (c_dheap)
35
+ bin/bench_n 10000: 40848000.0 bytes
36
+ bin/bench_n 100000: 43968000.0 bytes - 1.08x larger
37
+ bin/bench_n 1000000: 72888000.0 bytes - 1.78x larger
38
+ bin/bench_n 10000000: 568828000.0 bytes - 13.93x larger
39
+
@@ -0,0 +1,686 @@
1
+ Benchmarking run at 2021-01-31 08:31:50 -0500
2
+ ruby v2.7.2, DHeap v0.6.1
3
+
4
+ ################################################################################
5
+ # Benchmarks with N=10
6
+ ################################################################################
7
+
8
+ == push N (N=10) ==============================================================
9
+ Calculating -------------------------------------
10
+ push N (findmin) 9.717M i/s - 30.000M times in 3.087359s (102.91ns/i, 254clocks/i)
11
+ push N (bsearch) 4.320M i/s - 600.000k times in 0.138891s (231.49ns/i, 496clocks/i)
12
+ push N (rb_heap) 5.404M i/s - 12.000M times in 2.220663s (185.06ns/i, 422clocks/i)
13
+ push N (c++ stl) 6.378M i/s - 18.000M times in 2.822057s (156.78ns/i, 395clocks/i)
14
+ push N (c_dheap) 10.371M i/s - 30.000M times in 2.892808s (96.43ns/i, 273clocks/i)
15
+
16
+ Comparison:
17
+ push N (c_dheap): 10370547.5 i/s
18
+ push N (findmin): 9717043.7 i/s - 1.07x slower
19
+ push N (c++ stl): 6378325.6 i/s - 1.63x slower
20
+ push N (rb_heap): 5403792.2 i/s - 1.92x slower
21
+ push N (bsearch): 4319927.8 i/s - 2.40x slower
22
+
23
+ == push N then pop N (N=10) ====================================================
24
+ Calculating -------------------------------------
25
+ push N + pop N (findmin) 7.721M i/s - 300.000k times in 0.038854s (129.51ns/i, 377clocks/i)
26
+ push N + pop N (bsearch) 6.780M i/s - 1.200M times in 0.177001s (147.50ns/i, 401clocks/i)
27
+ push N + pop N (rb_heap) 4.231M i/s - 6.000M times in 1.418156s (236.36ns/i, 517clocks/i)
28
+ push N + pop N (c++ stl) 10.608M i/s - 18.000M times in 1.696896s (94.27ns/i, 214clocks/i)
29
+ push N + pop N (c_dheap) 12.916M i/s - 18.000M times in 1.393570s (77.42ns/i, 136clocks/i)
30
+
31
+ Comparison:
32
+ push N + pop N (c_dheap): 12916469.1 i/s
33
+ push N + pop N (c++ stl): 10607602.3 i/s - 1.22x slower
34
+ push N + pop N (findmin): 7721268.8 i/s - 1.67x slower
35
+ push N + pop N (bsearch): 6779608.4 i/s - 1.91x slower
36
+ push N + pop N (rb_heap): 4230845.4 i/s - 3.05x slower
37
+
38
+ == Push/pop with pre-filled queue (size=N) (N=10) ==============================
39
+ Warming up --------------------------------------
40
+ push + pop (findmin) 5.119M i/s - 5.238M times in 1.023417s (195.37ns/i, 458clocks/i)
41
+ push + pop (bsearch) 3.791M i/s - 3.940M times in 1.039431s (263.79ns/i, 510clocks/i)
42
+ push + pop (rb_heap) 2.312M i/s - 2.376M times in 1.027837s (432.61ns/i)
43
+ push + pop (c++ stl) 7.247M i/s - 7.344M times in 1.013381s (137.99ns/i, 366clocks/i)
44
+ push + pop (c_dheap) 8.918M i/s - 9.151M times in 1.026085s (112.13ns/i, 223clocks/i)
45
+ Calculating -------------------------------------
46
+ push + pop (findmin) 5.413M i/s - 15.356M times in 2.837024s (184.75ns/i, 534clocks/i)
47
+ push + pop (bsearch) 3.971M i/s - 11.373M times in 2.863579s (251.80ns/i, 604clocks/i)
48
+ push + pop (rb_heap) 2.296M i/s - 6.935M times in 3.020761s (435.61ns/i, 951clocks/i)
49
+ push + pop (c++ stl) 7.823M i/s - 21.741M times in 2.778978s (127.82ns/i, 282clocks/i)
50
+ push + pop (c_dheap) 9.854M i/s - 26.755M times in 2.715009s (101.48ns/i, 243clocks/i)
51
+
52
+ Comparison:
53
+ push + pop (c_dheap): 9854472.6 i/s
54
+ push + pop (c++ stl): 7823282.4 i/s - 1.26x slower
55
+ push + pop (findmin): 5412632.1 i/s - 1.82x slower
56
+ push + pop (bsearch): 3971475.8 i/s - 2.48x slower
57
+ push + pop (rb_heap): 2295653.2 i/s - 4.29x slower
58
+
59
+ ################################################################################
60
+ # Benchmarks with N=30
61
+ ################################################################################
62
+
63
+ == push N (N=30) ==============================================================
64
+ Calculating -------------------------------------
65
+ push N (findmin) 10.040M i/s - 30.000M times in 2.987977s (99.60ns/i, 198clocks/i)
66
+ push N (bsearch) 3.544M i/s - 600.000k times in 0.169307s (282.18ns/i, 757clocks/i)
67
+ push N (rb_heap) 5.017M i/s - 12.000M times in 2.391690s (199.31ns/i, 471clocks/i)
68
+ push N (c++ stl) 7.401M i/s - 18.000M times in 2.432254s (135.13ns/i, 282clocks/i)
69
+ push N (c_dheap) 10.496M i/s - 30.000M times in 2.858330s (95.28ns/i, 207clocks/i)
70
+
71
+ Comparison:
72
+ push N (c_dheap): 10495639.7 i/s
73
+ push N (findmin): 10040237.6 i/s - 1.05x slower
74
+ push N (c++ stl): 7400542.2 i/s - 1.42x slower
75
+ push N (rb_heap): 5017372.7 i/s - 2.09x slower
76
+ push N (bsearch): 3543867.6 i/s - 2.96x slower
77
+
78
+ == push N then pop N (N=30) ====================================================
79
+ Calculating -------------------------------------
80
+ push N + pop N (findmin) 6.343M i/s - 300.000k times in 0.047296s (157.65ns/i, 353clocks/i)
81
+ push N + pop N (bsearch) 5.591M i/s - 1.200M times in 0.214624s (178.85ns/i, 332clocks/i)
82
+ push N + pop N (rb_heap) 3.162M i/s - 6.000M times in 1.897529s (316.25ns/i, 812clocks/i)
83
+ push N + pop N (c++ stl) 10.068M i/s - 18.000M times in 1.787868s (99.33ns/i, 203clocks/i)
84
+ push N + pop N (c_dheap) 11.903M i/s - 18.000M times in 1.512286s (84.02ns/i, 238clocks/i)
85
+
86
+ Comparison:
87
+ push N + pop N (c_dheap): 11902512.2 i/s
88
+ push N + pop N (c++ stl): 10067858.5 i/s - 1.18x slower
89
+ push N + pop N (findmin): 6343031.3 i/s - 1.88x slower
90
+ push N + pop N (bsearch): 5591174.8 i/s - 2.13x slower
91
+ push N + pop N (rb_heap): 3162007.3 i/s - 3.76x slower
92
+
93
+ ################################################################################
94
+ # Benchmarks with N=32
95
+ ################################################################################
96
+
97
+ == Push/pop with pre-filled queue (size=N) (N=32) ==============================
98
+ Warming up --------------------------------------
99
+ push + pop (findmin) 4.146M i/s - 4.168M times in 1.005262s (241.19ns/i, 574clocks/i)
100
+ push + pop (bsearch) 3.067M i/s - 3.218M times in 1.049417s (326.09ns/i, 940clocks/i)
101
+ push + pop (rb_heap) 1.849M i/s - 1.915M times in 1.036008s (540.96ns/i)
102
+ push + pop (c++ stl) 6.561M i/s - 6.661M times in 1.015169s (152.40ns/i, 278clocks/i)
103
+ push + pop (c_dheap) 8.786M i/s - 9.051M times in 1.030185s (113.82ns/i, 258clocks/i)
104
+ Calculating -------------------------------------
105
+ push + pop (findmin) 4.478M i/s - 12.438M times in 2.777667s (223.31ns/i, 487clocks/i)
106
+ push + pop (bsearch) 3.196M i/s - 9.200M times in 2.878768s (312.91ns/i, 813clocks/i)
107
+ push + pop (rb_heap) 1.796M i/s - 5.546M times in 3.087197s (556.68ns/i)
108
+ push + pop (c++ stl) 7.578M i/s - 19.684M times in 2.597487s (131.96ns/i, 282clocks/i)
109
+ push + pop (c_dheap) 9.929M i/s - 26.357M times in 2.654479s (100.71ns/i, 239clocks/i)
110
+
111
+ Comparison:
112
+ push + pop (c_dheap): 9929261.3 i/s
113
+ push + pop (c++ stl): 7578283.3 i/s - 1.31x slower
114
+ push + pop (findmin): 4477993.9 i/s - 2.22x slower
115
+ push + pop (bsearch): 3195760.4 i/s - 3.11x slower
116
+ push + pop (rb_heap): 1796358.4 i/s - 5.53x slower
117
+
118
+ ################################################################################
119
+ # Benchmarks with N=100
120
+ ################################################################################
121
+
122
+ == push N (N=100) ==============================================================
123
+ Calculating -------------------------------------
124
+ push N (findmin) 9.981M i/s - 30.000M times in 3.005825s (100.19ns/i, 288clocks/i)
125
+ push N (bsearch) 2.769M i/s - 600.000k times in 0.216676s (361.13ns/i, 855clocks/i)
126
+ push N (rb_heap) 4.608M i/s - 12.000M times in 2.604252s (217.02ns/i, 522clocks/i)
127
+ push N (c++ stl) 7.992M i/s - 18.000M times in 2.252363s (125.13ns/i, 314clocks/i)
128
+ push N (c_dheap) 10.523M i/s - 30.000M times in 2.850989s (95.03ns/i, 246clocks/i)
129
+
130
+ Comparison:
131
+ push N (c_dheap): 10522662.6 i/s
132
+ push N (findmin): 9980622.3 i/s - 1.05x slower
133
+ push N (c++ stl): 7991608.3 i/s - 1.32x slower
134
+ push N (rb_heap): 4607849.4 i/s - 2.28x slower
135
+ push N (bsearch): 2769106.2 i/s - 3.80x slower
136
+
137
+ == push N then pop N (N=100) ==================================================
138
+ Calculating -------------------------------------
139
+ push N + pop N (findmin) 4.321M i/s - 300.000k times in 0.069422s (231.41ns/i, 481clocks/i)
140
+ push N + pop N (bsearch) 4.809M i/s - 1.200M times in 0.249544s (207.95ns/i, 525clocks/i)
141
+ push N + pop N (rb_heap) 2.467M i/s - 6.000M times in 2.431693s (405.28ns/i)
142
+ push N + pop N (c++ stl) 9.317M i/s - 18.000M times in 1.931923s (107.33ns/i, 258clocks/i)
143
+ push N + pop N (c_dheap) 10.954M i/s - 18.000M times in 1.643165s (91.29ns/i, 262clocks/i)
144
+
145
+ Comparison:
146
+ push N + pop N (c_dheap): 10954469.2 i/s
147
+ push N + pop N (c++ stl): 9317140.2 i/s - 1.18x slower
148
+ push N + pop N (bsearch): 4808770.2 i/s - 2.28x slower
149
+ push N + pop N (findmin): 4321411.9 i/s - 2.53x slower
150
+ push N + pop N (rb_heap): 2467417.0 i/s - 4.44x slower
151
+
152
+ == Push/pop with pre-filled queue (size=N) (N=100) ============================
153
+ Warming up --------------------------------------
154
+ push + pop (findmin) 3.032M i/s - 3.085M times in 1.017682s (329.84ns/i, 793clocks/i)
155
+ push + pop (bsearch) 2.602M i/s - 2.672M times in 1.026732s (384.28ns/i, 759clocks/i)
156
+ push + pop (rb_heap) 1.551M i/s - 1.609M times in 1.038011s (644.94ns/i)
157
+ push + pop (c++ stl) 6.826M i/s - 6.861M times in 1.005153s (146.49ns/i, 427clocks/i)
158
+ push + pop (c_dheap) 8.588M i/s - 8.702M times in 1.013307s (116.44ns/i, 247clocks/i)
159
+ Calculating -------------------------------------
160
+ push + pop (findmin) 3.149M i/s - 9.095M times in 2.887963s (317.52ns/i, 768clocks/i)
161
+ push + pop (bsearch) 2.854M i/s - 7.807M times in 2.735737s (350.43ns/i, 720clocks/i)
162
+ push + pop (rb_heap) 1.571M i/s - 4.652M times in 2.960926s (636.54ns/i)
163
+ push + pop (c++ stl) 7.579M i/s - 20.479M times in 2.702015s (131.94ns/i, 331clocks/i)
164
+ push + pop (c_dheap) 9.567M i/s - 25.765M times in 2.693102s (104.53ns/i, 210clocks/i)
165
+
166
+ Comparison:
167
+ push + pop (c_dheap): 9566872.5 i/s
168
+ push + pop (c++ stl): 7579103.1 i/s - 1.26x slower
169
+ push + pop (findmin): 3149419.4 i/s - 3.04x slower
170
+ push + pop (bsearch): 2853617.8 i/s - 3.35x slower
171
+ push + pop (rb_heap): 1570998.7 i/s - 6.09x slower
172
+
173
+ ################################################################################
174
+ # Benchmarks with N=300
175
+ ################################################################################
176
+
177
+ == push N (N=300) ==============================================================
178
+ Calculating -------------------------------------
179
+ push N (findmin) 10.204M i/s - 30.000M times in 2.940004s (98.00ns/i, 159clocks/i)
180
+ push N (bsearch) 2.360M i/s - 600.000k times in 0.254221s (423.70ns/i, 935clocks/i)
181
+ push N (rb_heap) 4.463M i/s - 12.000M times in 2.689036s (224.09ns/i, 530clocks/i)
182
+ push N (c++ stl) 8.204M i/s - 18.000M times in 2.193957s (121.89ns/i, 356clocks/i)
183
+ push N (c_dheap) 10.554M i/s - 30.000M times in 2.842477s (94.75ns/i, 276clocks/i)
184
+
185
+ Comparison:
186
+ push N (c_dheap): 10554176.5 i/s
187
+ push N (findmin): 10204068.1 i/s - 1.03x slower
188
+ push N (c++ stl): 8204354.5 i/s - 1.29x slower
189
+ push N (rb_heap): 4462566.4 i/s - 2.37x slower
190
+ push N (bsearch): 2360150.2 i/s - 4.47x slower
191
+
192
+ == push N then pop N (N=300) ==================================================
193
+ Calculating -------------------------------------
194
+ push N + pop N (findmin) 2.307M i/s - 300.000k times in 0.130056s (433.52ns/i, 903clocks/i)
195
+ push N + pop N (bsearch) 4.125M i/s - 1.200M times in 0.290889s (242.41ns/i, 593clocks/i)
196
+ push N + pop N (rb_heap) 2.101M i/s - 6.000M times in 2.855417s (475.90ns/i, 844clocks/i)
197
+ push N + pop N (c++ stl) 8.707M i/s - 18.000M times in 2.067240s (114.85ns/i, 318clocks/i)
198
+ push N + pop N (c_dheap) 10.261M i/s - 18.000M times in 1.754140s (97.45ns/i, 277clocks/i)
199
+
200
+ Comparison:
201
+ push N + pop N (c_dheap): 10261436.2 i/s
202
+ push N + pop N (c++ stl): 8707262.9 i/s - 1.18x slower
203
+ push N + pop N (bsearch): 4125279.4 i/s - 2.49x slower
204
+ push N + pop N (findmin): 2306706.5 i/s - 4.45x slower
205
+ push N + pop N (rb_heap): 2101269.3 i/s - 4.88x slower
206
+
207
+ ################################################################################
208
+ # Benchmarks with N=316
209
+ ################################################################################
210
+
211
+ == Push/pop with pre-filled queue (size=N) (N=316) ============================
212
+ Warming up --------------------------------------
213
+ push + pop (findmin) 1.627M i/s - 1.651M times in 1.014236s (614.50ns/i)
214
+ push + pop (bsearch) 2.260M i/s - 2.313M times in 1.023385s (442.46ns/i)
215
+ push + pop (rb_heap) 1.288M i/s - 1.347M times in 1.045779s (776.16ns/i)
216
+ push + pop (c++ stl) 6.086M i/s - 6.295M times in 1.034346s (164.31ns/i, 427clocks/i)
217
+ push + pop (c_dheap) 8.076M i/s - 8.226M times in 1.018582s (123.83ns/i, 324clocks/i)
218
+ Calculating -------------------------------------
219
+ push + pop (findmin) 1.668M i/s - 4.882M times in 2.926147s (599.37ns/i)
220
+ push + pop (bsearch) 2.345M i/s - 6.780M times in 2.891943s (426.52ns/i)
221
+ push + pop (rb_heap) 1.269M i/s - 3.865M times in 3.045697s (787.98ns/i)
222
+ push + pop (c++ stl) 6.870M i/s - 18.258M times in 2.657550s (145.55ns/i, 289clocks/i)
223
+ push + pop (c_dheap) 9.665M i/s - 24.227M times in 2.506716s (103.47ns/i, 221clocks/i)
224
+
225
+ Comparison:
226
+ push + pop (c_dheap): 9664758.0 i/s
227
+ push + pop (c++ stl): 6870377.3 i/s - 1.41x slower
228
+ push + pop (bsearch): 2344530.3 i/s - 4.12x slower
229
+ push + pop (findmin): 1668416.3 i/s - 5.79x slower
230
+ push + pop (rb_heap): 1269060.0 i/s - 7.62x slower
231
+
232
+ ################################################################################
233
+ # Benchmarks with N=1,000
234
+ ################################################################################
235
+
236
+ == push N (N=1000) ============================================================
237
+ Calculating -------------------------------------
238
+ push N (findmin) 10.267M i/s - 30.000M times in 2.921868s (97.40ns/i, 243clocks/i)
239
+ push N (bsearch) 2.000M i/s - 600.000k times in 0.300058s (500.10ns/i)
240
+ push N (rb_heap) 4.408M i/s - 12.000M times in 2.722517s (226.88ns/i, 488clocks/i)
241
+ push N (c++ stl) 8.171M i/s - 18.000M times in 2.202936s (122.39ns/i, 254clocks/i)
242
+ push N (c_dheap) 10.455M i/s - 30.000M times in 2.869530s (95.65ns/i, 224clocks/i)
243
+
244
+ Comparison:
245
+ push N (c_dheap): 10454672.5 i/s
246
+ push N (findmin): 10267402.5 i/s - 1.02x slower
247
+ push N (c++ stl): 8170912.6 i/s - 1.28x slower
248
+ push N (rb_heap): 4407685.6 i/s - 2.37x slower
249
+ push N (bsearch): 1999614.9 i/s - 5.23x slower
250
+
251
+ == push N then pop N (N=1000) ==================================================
252
+ Calculating -------------------------------------
253
+ push N + pop N (findmin) 735.090k i/s - 300.000k times in 0.408113s (1.36μs/i)
254
+ push N + pop N (bsearch) 3.587M i/s - 1.200M times in 0.334586s (278.82ns/i, 742clocks/i)
255
+ push N + pop N (rb_heap) 1.799M i/s - 6.000M times in 3.336039s (556.01ns/i)
256
+ push N + pop N (c++ stl) 8.115M i/s - 18.000M times in 2.218185s (123.23ns/i, 292clocks/i)
257
+ push N + pop N (c_dheap) 9.283M i/s - 18.000M times in 1.939036s (107.72ns/i, 253clocks/i)
258
+
259
+ Comparison:
260
+ push N + pop N (c_dheap): 9282962.9 i/s
261
+ push N + pop N (c++ stl): 8114741.7 i/s - 1.14x slower
262
+ push N + pop N (bsearch): 3586521.9 i/s - 2.59x slower
263
+ push N + pop N (rb_heap): 1798540.1 i/s - 5.16x slower
264
+ push N + pop N (findmin): 735090.3 i/s - 12.63x slower
265
+
266
+ == Push/pop with pre-filled queue (size=N) (N=1000) ============================
267
+ Warming up --------------------------------------
268
+ push + pop (findmin) 657.093k i/s - 672.360k times in 1.023235s (1.52μs/i)
269
+ push + pop (bsearch) 2.094M i/s - 2.182M times in 1.041939s (477.56ns/i)
270
+ push + pop (rb_heap) 1.228M i/s - 1.278M times in 1.040514s (814.00ns/i)
271
+ push + pop (c++ stl) 6.181M i/s - 6.238M times in 1.009224s (161.78ns/i, 375clocks/i)
272
+ push + pop (c_dheap) 6.881M i/s - 6.986M times in 1.015318s (145.33ns/i, 347clocks/i)
273
+ Calculating -------------------------------------
274
+ push + pop (findmin) 656.982k i/s - 1.971M times in 3.000502s (1.52μs/i)
275
+ push + pop (bsearch) 2.159M i/s - 6.282M times in 2.909771s (463.19ns/i, 907clocks/i)
276
+ push + pop (rb_heap) 1.214M i/s - 3.685M times in 3.035461s (823.62ns/i)
277
+ push + pop (c++ stl) 6.866M i/s - 18.543M times in 2.700613s (145.64ns/i, 347clocks/i)
278
+ push + pop (c_dheap) 9.168M i/s - 20.643M times in 2.251669s (109.08ns/i, 223clocks/i)
279
+
280
+ Comparison:
281
+ push + pop (c_dheap): 9167926.8 i/s
282
+ push + pop (c++ stl): 6866291.1 i/s - 1.34x slower
283
+ push + pop (bsearch): 2158927.2 i/s - 4.25x slower
284
+ push + pop (rb_heap): 1214146.7 i/s - 7.55x slower
285
+ push + pop (findmin): 656982.4 i/s - 13.95x slower
286
+
287
+ ################################################################################
288
+ # Benchmarks with N=3,000
289
+ ################################################################################
290
+
291
+ == push N (N=3000) ============================================================
292
+ Calculating -------------------------------------
293
+ push N (findmin) 10.260M i/s - 30.000M times in 2.923922s (97.46ns/i, 237clocks/i)
294
+ push N (bsearch) 1.694M i/s - 600.000k times in 0.354106s (590.18ns/i)
295
+ push N (rb_heap) 4.415M i/s - 12.000M times in 2.717734s (226.48ns/i, 545clocks/i)
296
+ push N (c++ stl) 7.991M i/s - 18.000M times in 2.252536s (125.14ns/i, 309clocks/i)
297
+ push N (c_dheap) 10.524M i/s - 30.000M times in 2.850733s (95.02ns/i, 205clocks/i)
298
+
299
+ Comparison:
300
+ push N (c_dheap): 10523609.1 i/s
301
+ push N (findmin): 10260193.1 i/s - 1.03x slower
302
+ push N (c++ stl): 7990992.5 i/s - 1.32x slower
303
+ push N (rb_heap): 4415442.7 i/s - 2.38x slower
304
+ push N (bsearch): 1694409.5 i/s - 6.21x slower
305
+
306
+ == push N then pop N (N=3000) ==================================================
307
+ Calculating -------------------------------------
308
+ push N + pop N (bsearch) 3.095M i/s - 1.200M times in 0.387763s (323.14ns/i, 873clocks/i)
309
+ push N + pop N (rb_heap) 1.617M i/s - 6.000M times in 3.709670s (618.28ns/i)
310
+ push N + pop N (c++ stl) 7.892M i/s - 18.000M times in 2.280843s (126.71ns/i, 307clocks/i)
311
+ push N + pop N (c_dheap) 8.742M i/s - 18.000M times in 2.059004s (114.39ns/i, 337clocks/i)
312
+
313
+ Comparison:
314
+ push N + pop N (c_dheap): 8742091.2 i/s
315
+ push N + pop N (c++ stl): 7891817.5 i/s - 1.11x slower
316
+ push N + pop N (bsearch): 3094677.1 i/s - 2.82x slower
317
+ push N + pop N (rb_heap): 1617394.7 i/s - 5.41x slower
318
+
319
+ ################################################################################
320
+ # Benchmarks with N=3,162
321
+ ################################################################################
322
+
323
+ == Push/pop with pre-filled queue (size=N) (N=3162) ============================
324
+ Warming up --------------------------------------
325
+ push + pop (findmin) 218.524k i/s - 225.030k times in 1.029772s (4.58μs/i)
326
+ push + pop (bsearch) 1.784M i/s - 1.818M times in 1.018826s (560.50ns/i)
327
+ push + pop (rb_heap) 906.303k i/s - 906.848k times in 1.000601s (1.10μs/i)
328
+ push + pop (c++ stl) 5.662M i/s - 5.788M times in 1.022279s (176.61ns/i, 397clocks/i)
329
+ push + pop (c_dheap) 7.653M i/s - 7.799M times in 1.019106s (130.67ns/i, 268clocks/i)
330
+ Calculating -------------------------------------
331
+ push + pop (findmin) 213.811k i/s - 655.572k times in 3.066131s (4.68μs/i)
332
+ push + pop (bsearch) 1.942M i/s - 5.352M times in 2.755670s (514.86ns/i)
333
+ push + pop (rb_heap) 945.426k i/s - 2.719M times in 2.875855s (1.06μs/i)
334
+ push + pop (c++ stl) 6.251M i/s - 16.987M times in 2.717417s (159.97ns/i, 371clocks/i)
335
+ push + pop (c_dheap) 8.645M i/s - 22.958M times in 2.655715s (115.68ns/i, 266clocks/i)
336
+
337
+ Comparison:
338
+ push + pop (c_dheap): 8644863.6 i/s
339
+ push + pop (c++ stl): 6251071.8 i/s - 1.38x slower
340
+ push + pop (bsearch): 1942294.3 i/s - 4.45x slower
341
+ push + pop (rb_heap): 945426.2 i/s - 9.14x slower
342
+ push + pop (findmin): 213810.8 i/s - 40.43x slower
343
+
344
+ ################################################################################
345
+ # Benchmarks with N=10,000
346
+ ################################################################################
347
+
348
+ == push N (N=10000) ============================================================
349
+ Calculating -------------------------------------
350
+ push N (findmin) 10.192M i/s - 30.000M times in 2.943544s (98.12ns/i, 210clocks/i)
351
+ push N (bsearch) 1.214M i/s - 600.000k times in 0.494405s (824.01ns/i)
352
+ push N (rb_heap) 4.369M i/s - 12.000M times in 2.746465s (228.87ns/i, 494clocks/i)
353
+ push N (c++ stl) 8.211M i/s - 18.000M times in 2.192209s (121.79ns/i, 258clocks/i)
354
+ push N (c_dheap) 10.445M i/s - 30.000M times in 2.872301s (95.74ns/i, 230clocks/i)
355
+
356
+ Comparison:
357
+ push N (c_dheap): 10444588.3 i/s
358
+ push N (findmin): 10191797.4 i/s - 1.02x slower
359
+ push N (c++ stl): 8210895.4 i/s - 1.27x slower
360
+ push N (rb_heap): 4369252.9 i/s - 2.39x slower
361
+ push N (bsearch): 1213580.4 i/s - 8.61x slower
362
+
363
+ == push N then pop N (N=10000) ================================================
364
+ Calculating -------------------------------------
365
+ push N + pop N (bsearch) 2.257M i/s - 1.200M times in 0.531668s (443.06ns/i)
366
+ push N + pop N (rb_heap) 1.439M i/s - 6.000M times in 4.168970s (694.83ns/i)
367
+ push N + pop N (c++ stl) 7.366M i/s - 18.000M times in 2.443772s (135.77ns/i, 353clocks/i)
368
+ push N + pop N (c_dheap) 8.084M i/s - 18.000M times in 2.226631s (123.70ns/i, 269clocks/i)
369
+
370
+ Comparison:
371
+ push N + pop N (c_dheap): 8083962.7 i/s
372
+ push N + pop N (c++ stl): 7365661.8 i/s - 1.10x slower
373
+ push N + pop N (bsearch): 2257047.9 i/s - 3.58x slower
374
+ push N + pop N (rb_heap): 1439204.3 i/s - 5.62x slower
375
+
376
+ == Push/pop with pre-filled queue (size=N) (N=10000) ==========================
377
+ Warming up --------------------------------------
378
+ push + pop (findmin) 38.436k i/s - 38.985k times in 1.014294s (26.02μs/i)
379
+ push + pop (bsearch) 1.701M i/s - 1.806M times in 1.061608s (587.89ns/i)
380
+ push + pop (rb_heap) 829.401k i/s - 851.418k times in 1.026545s (1.21μs/i)
381
+ push + pop (c++ stl) 4.996M i/s - 5.179M times in 1.036658s (200.16ns/i, 533clocks/i)
382
+ push + pop (c_dheap) 6.884M i/s - 6.916M times in 1.004562s (145.26ns/i, 320clocks/i)
383
+ Calculating -------------------------------------
384
+ push + pop (findmin) 42.033k i/s - 115.306k times in 2.743242s (23.79μs/i)
385
+ push + pop (bsearch) 1.699M i/s - 5.103M times in 3.003166s (588.51ns/i)
386
+ push + pop (rb_heap) 844.004k i/s - 2.488M times in 2.948094s (1.18μs/i)
387
+ push + pop (c++ stl) 5.720M i/s - 14.988M times in 2.620286s (174.83ns/i, 439clocks/i)
388
+ push + pop (c_dheap) 8.029M i/s - 20.653M times in 2.572341s (124.55ns/i, 239clocks/i)
389
+
390
+ Comparison:
391
+ push + pop (c_dheap): 8028814.5 i/s
392
+ push + pop (c++ stl): 5719855.1 i/s - 1.40x slower
393
+ push + pop (bsearch): 1699219.0 i/s - 4.73x slower
394
+ push + pop (rb_heap): 844004.1 i/s - 9.51x slower
395
+ push + pop (findmin): 42032.8 i/s - 191.01x slower
396
+
397
+ ################################################################################
398
+ # Benchmarks with N=30,000
399
+ ################################################################################
400
+
401
+ == push N (N=30000) ============================================================
402
+ Calculating -------------------------------------
403
+ push N (findmin) 10.286M i/s - 30.000M times in 2.916695s (97.22ns/i, 246clocks/i)
404
+ push N (bsearch) 626.769k i/s - 600.000k times in 0.957290s (1.60μs/i)
405
+ push N (rb_heap) 4.372M i/s - 12.000M times in 2.744993s (228.75ns/i, 586clocks/i)
406
+ push N (c++ stl) 7.925M i/s - 18.000M times in 2.271289s (126.18ns/i, 363clocks/i)
407
+ push N (c_dheap) 10.471M i/s - 30.000M times in 2.865042s (95.50ns/i, 209clocks/i)
408
+
409
+ Comparison:
410
+ push N (c_dheap): 10471051.5 i/s
411
+ push N (findmin): 10285616.0 i/s - 1.02x slower
412
+ push N (c++ stl): 7925015.4 i/s - 1.32x slower
413
+ push N (rb_heap): 4371595.7 i/s - 2.40x slower
414
+ push N (bsearch): 626769.1 i/s - 16.71x slower
415
+
416
+ == push N then pop N (N=30000) ================================================
417
+ Calculating -------------------------------------
418
+ push N + pop N (bsearch) 1.223M i/s - 1.200M times in 0.981407s (817.84ns/i)
419
+ push N + pop N (rb_heap) 1.305M i/s - 6.000M times in 4.596226s (766.04ns/i)
420
+ push N + pop N (c++ stl) 6.965M i/s - 18.000M times in 2.584494s (143.58ns/i, 379clocks/i)
421
+ push N + pop N (c_dheap) 7.438M i/s - 18.000M times in 2.419970s (134.44ns/i, 271clocks/i)
422
+
423
+ Comparison:
424
+ push N + pop N (c_dheap): 7438108.8 i/s
425
+ push N + pop N (c++ stl): 6964611.7 i/s - 1.07x slower
426
+ push N + pop N (rb_heap): 1305418.8 i/s - 5.70x slower
427
+ push N + pop N (bsearch): 1222734.6 i/s - 6.08x slower
428
+
429
+ ################################################################################
430
+ # Benchmarks with N=31,623
431
+ ################################################################################
432
+
433
+ == Push/pop with pre-filled queue (size=N) (N=31623) ==========================
434
+ Warming up --------------------------------------
435
+ push + pop (findmin) 4.101k i/s - 4.296k times in 1.047474s (243.83μs/i)
436
+ push + pop (bsearch) 1.422M i/s - 1.433M times in 1.007735s (703.26ns/i)
437
+ push + pop (rb_heap) 808.387k i/s - 842.904k times in 1.042698s (1.24μs/i)
438
+ push + pop (c++ stl) 4.707M i/s - 4.894M times in 1.039760s (212.47ns/i, 498clocks/i)
439
+ push + pop (c_dheap) 6.838M i/s - 6.889M times in 1.007490s (146.25ns/i, 383clocks/i)
440
+ Calculating -------------------------------------
441
+ push + pop (findmin) 4.386k i/s - 12.303k times in 2.805010s (227.99μs/i)
442
+ push + pop (bsearch) 1.416M i/s - 4.266M times in 3.012567s (706.20ns/i)
443
+ push + pop (rb_heap) 824.220k i/s - 2.425M times in 2.942372s (1.21μs/i)
444
+ push + pop (c++ stl) 5.005M i/s - 14.120M times in 2.821127s (199.80ns/i, 408clocks/i)
445
+ push + pop (c_dheap) 7.584M i/s - 20.513M times in 2.704950s (131.87ns/i, 319clocks/i)
446
+
447
+ Comparison:
448
+ push + pop (c_dheap): 7583504.1 i/s
449
+ push + pop (c++ stl): 5005005.3 i/s - 1.52x slower
450
+ push + pop (bsearch): 1416019.5 i/s - 5.36x slower
451
+ push + pop (rb_heap): 824219.7 i/s - 9.20x slower
452
+ push + pop (findmin): 4386.1 i/s - 1728.99x slower
453
+
454
+ ################################################################################
455
+ # Benchmarks with N=100,000
456
+ ################################################################################
457
+
458
+ == push N (N=100000) ==========================================================
459
+ Calculating -------------------------------------
460
+ push N (findmin) 10.279M i/s - 30.000M times in 2.918590s (97.29ns/i, 244clocks/i)
461
+ push N (bsearch) 220.832k i/s - 600.000k times in 2.717000s (4.53μs/i)
462
+ push N (rb_heap) 4.384M i/s - 12.000M times in 2.736961s (228.08ns/i, 561clocks/i)
463
+ push N (c++ stl) 7.739M i/s - 18.000M times in 2.325853s (129.21ns/i, 317clocks/i)
464
+ push N (c_dheap) 10.446M i/s - 30.000M times in 2.872022s (95.73ns/i, 170clocks/i)
465
+
466
+ Comparison:
467
+ push N (c_dheap): 10445603.0 i/s
468
+ push N (findmin): 10278935.5 i/s - 1.02x slower
469
+ push N (c++ stl): 7739095.9 i/s - 1.35x slower
470
+ push N (rb_heap): 4384424.4 i/s - 2.38x slower
471
+ push N (bsearch): 220831.8 i/s - 47.30x slower
472
+
473
+ == push N then pop N (N=100000) ================================================
474
+ Calculating -------------------------------------
475
+ push N + pop N (bsearch) 443.386k i/s - 1.200M times in 2.706446s (2.26μs/i)
476
+ push N + pop N (rb_heap) 1.174M i/s - 6.000M times in 5.112169s (852.03ns/i)
477
+ push N + pop N (c++ stl) 6.467M i/s - 18.000M times in 2.783322s (154.63ns/i, 423clocks/i)
478
+ push N + pop N (c_dheap) 6.772M i/s - 18.000M times in 2.658145s (147.67ns/i, 380clocks/i)
479
+
480
+ Comparison:
481
+ push N + pop N (c_dheap): 6771640.7 i/s
482
+ push N + pop N (c++ stl): 6467092.5 i/s - 1.05x slower
483
+ push N + pop N (rb_heap): 1173670.1 i/s - 5.77x slower
484
+ push N + pop N (bsearch): 443385.9 i/s - 15.27x slower
485
+
486
+ == Push/pop with pre-filled queue (size=N) (N=100000) ==========================
487
+ Warming up --------------------------------------
488
+ push + pop (findmin) 1.081k i/s - 1.090k times in 1.008121s (924.88μs/i)
489
+ push + pop (bsearch) 93.746k i/s - 94.380k times in 1.006760s (10.67μs/i)
490
+ push + pop (rb_heap) 614.413k i/s - 617.988k times in 1.005818s (1.63μs/i)
491
+ push + pop (c++ stl) 4.384M i/s - 4.526M times in 1.032424s (228.10ns/i, 367clocks/i)
492
+ push + pop (c_dheap) 6.357M i/s - 6.395M times in 1.006052s (157.31ns/i, 351clocks/i)
493
+ Calculating -------------------------------------
494
+ push + pop (findmin) 1.118k i/s - 3.243k times in 2.901718s (894.76μs/i)
495
+ push + pop (bsearch) 126.592k i/s - 281.238k times in 2.221611s (7.90μs/i)
496
+ push + pop (rb_heap) 640.816k i/s - 1.843M times in 2.876396s (1.56μs/i)
497
+ push + pop (c++ stl) 4.598M i/s - 13.152M times in 2.860115s (217.47ns/i, 548clocks/i)
498
+ push + pop (c_dheap) 7.040M i/s - 19.070M times in 2.708918s (142.05ns/i, 402clocks/i)
499
+
500
+ Comparison:
501
+ push + pop (c_dheap): 7039813.2 i/s
502
+ push + pop (c++ stl): 4598367.9 i/s - 1.53x slower
503
+ push + pop (rb_heap): 640815.8 i/s - 10.99x slower
504
+ push + pop (bsearch): 126591.9 i/s - 55.61x slower
505
+ push + pop (findmin): 1117.6 i/s - 6298.97x slower
506
+
507
+ ################################################################################
508
+ # Benchmarks with N=300,000
509
+ ################################################################################
510
+
511
+ == push N (N=300000) ==========================================================
512
+ Calculating -------------------------------------
513
+ push N (findmin) 10.292M i/s - 30.000M times in 2.914849s (97.16ns/i, 216clocks/i)
514
+ push N (rb_heap) 4.366M i/s - 12.000M times in 2.748236s (229.02ns/i, 508clocks/i)
515
+ push N (c++ stl) 7.606M i/s - 18.000M times in 2.366608s (131.48ns/i, 237clocks/i)
516
+ push N (c_dheap) 10.406M i/s - 30.000M times in 2.882976s (96.10ns/i, 239clocks/i)
517
+
518
+ Comparison:
519
+ push N (c_dheap): 10405915.1 i/s
520
+ push N (findmin): 10292126.6 i/s - 1.01x slower
521
+ push N (c++ stl): 7605822.4 i/s - 1.37x slower
522
+ push N (rb_heap): 4366436.9 i/s - 2.38x slower
523
+
524
+ == push N then pop N (N=300000) ================================================
525
+ Calculating -------------------------------------
526
+ push N + pop N (rb_heap) 1.090M i/s - 6.000M times in 5.503067s (917.18ns/i)
527
+ push N + pop N (c++ stl) 6.194M i/s - 18.000M times in 2.906249s (161.46ns/i, 397clocks/i)
528
+ push N + pop N (c_dheap) 5.898M i/s - 18.000M times in 3.051953s (169.55ns/i, 380clocks/i)
529
+
530
+ Comparison:
531
+ push N + pop N (c++ stl): 6193550.8 i/s
532
+ push N + pop N (c_dheap): 5897862.5 i/s - 1.05x slower
533
+ push N + pop N (rb_heap): 1090301.2 i/s - 5.68x slower
534
+
535
+ ################################################################################
536
+ # Benchmarks with N=316,228
537
+ ################################################################################
538
+
539
+ == Push/pop with pre-filled queue (size=N) (N=316228) ==========================
540
+ Warming up --------------------------------------
541
+ push + pop (findmin) 329.363 i/s - 340.000 times in 1.032295s (3.04ms/i)
542
+ push + pop (bsearch) 26.855k i/s - 27.870k times in 1.037803s (37.24μs/i)
543
+ push + pop (rb_heap) 510.061k i/s - 516.120k times in 1.011878s (1.96μs/i)
544
+ push + pop (c++ stl) 3.662M i/s - 3.787M times in 1.034233s (273.07ns/i, 485clocks/i)
545
+ push + pop (c_dheap) 5.829M i/s - 5.952M times in 1.021078s (171.56ns/i, 409clocks/i)
546
+ Calculating -------------------------------------
547
+ push + pop (findmin) 336.903 i/s - 988.000 times in 2.932592s (2.97ms/i)
548
+ push + pop (bsearch) 26.374k i/s - 80.564k times in 3.054645s (37.92μs/i)
549
+ push + pop (rb_heap) 586.229k i/s - 1.530M times in 2.610215s (1.71μs/i)
550
+ push + pop (c++ stl) 4.199M i/s - 10.986M times in 2.616590s (238.17ns/i, 562clocks/i)
551
+ push + pop (c_dheap) 6.651M i/s - 17.486M times in 2.628997s (150.35ns/i, 320clocks/i)
552
+
553
+ Comparison:
554
+ push + pop (c_dheap): 6651247.1 i/s
555
+ push + pop (c++ stl): 4198720.4 i/s - 1.58x slower
556
+ push + pop (rb_heap): 586229.1 i/s - 11.35x slower
557
+ push + pop (bsearch): 26374.3 i/s - 252.19x slower
558
+ push + pop (findmin): 336.9 i/s - 19742.30x slower
559
+
560
+ ################################################################################
561
+ # Benchmarks with N=1,000,000
562
+ ################################################################################
563
+
564
+ == push N (N=1000000) ==========================================================
565
+ Calculating -------------------------------------
566
+ push N (findmin) 9.964M i/s - 30.000M times in 3.010870s (100.36ns/i, 238clocks/i)
567
+ push N (rb_heap) 4.350M i/s - 12.000M times in 2.758547s (229.88ns/i, 403clocks/i)
568
+ push N (c++ stl) 7.892M i/s - 18.000M times in 2.280812s (126.71ns/i, 234clocks/i)
569
+ push N (c_dheap) 10.342M i/s - 30.000M times in 2.900741s (96.69ns/i, 217clocks/i)
570
+
571
+ Comparison:
572
+ push N (c_dheap): 10342183.7 i/s
573
+ push N (findmin): 9963898.8 i/s - 1.04x slower
574
+ push N (c++ stl): 7891924.8 i/s - 1.31x slower
575
+ push N (rb_heap): 4350116.0 i/s - 2.38x slower
576
+
577
+ == push N then pop N (N=1000000) ==============================================
578
+ Calculating -------------------------------------
579
+ push N + pop N (rb_heap) 976.689k i/s - 6.000M times in 6.143207s (1.02μs/i)
580
+ push N + pop N (c++ stl) 5.275M i/s - 18.000M times in 3.412544s (189.59ns/i, 371clocks/i)
581
+ push N + pop N (c_dheap) 4.731M i/s - 18.000M times in 3.804598s (211.37ns/i, 510clocks/i)
582
+
583
+ Comparison:
584
+ push N + pop N (c++ stl): 5274657.5 i/s
585
+ push N + pop N (c_dheap): 4731117.9 i/s - 1.11x slower
586
+ push N + pop N (rb_heap): 976688.6 i/s - 5.40x slower
587
+
588
+ == Push/pop with pre-filled queue (size=N) (N=1000000) ========================
589
+ Warming up --------------------------------------
590
+ push + pop (findmin) 133.958 i/s - 140.000 times in 1.045105s (7.47ms/i)
591
+ push + pop (bsearch) 5.157k i/s - 5.170k times in 1.002466s (193.90μs/i)
592
+ push + pop (rb_heap) 530.099k i/s - 553.995k times in 1.045078s (1.89μs/i)
593
+ push + pop (c++ stl) 3.008M i/s - 3.068M times in 1.019941s (332.45ns/i, 961clocks/i)
594
+ push + pop (c_dheap) 3.792M i/s - 3.850M times in 1.015408s (263.74ns/i, 606clocks/i)
595
+ Calculating -------------------------------------
596
+ push + pop (findmin) 133.988 i/s - 401.000 times in 2.992798s (7.46ms/i)
597
+ push + pop (bsearch) 5.009k i/s - 15.471k times in 3.088774s (199.65μs/i)
598
+ push + pop (rb_heap) 542.219k i/s - 1.590M times in 2.932944s (1.84μs/i)
599
+ push + pop (c++ stl) 3.504M i/s - 9.024M times in 2.575239s (285.38ns/i, 601clocks/i)
600
+ push + pop (c_dheap) 4.702M i/s - 11.375M times in 2.419358s (212.70ns/i, 603clocks/i)
601
+
602
+ Comparison:
603
+ push + pop (c_dheap): 4701505.8 i/s
604
+ push + pop (c++ stl): 3504115.7 i/s - 1.34x slower
605
+ push + pop (rb_heap): 542219.0 i/s - 8.67x slower
606
+ push + pop (bsearch): 5008.8 i/s - 938.65x slower
607
+ push + pop (findmin): 134.0 i/s - 35088.93x slower
608
+
609
+ ################################################################################
610
+ # Benchmarks with N=3,000,000
611
+ ################################################################################
612
+
613
+ == push N (N=3000000) ==========================================================
614
+ Calculating -------------------------------------
615
+ push N (findmin) 10.061M i/s - 30.000M times in 2.981862s (99.40ns/i, 291clocks/i)
616
+ push N (rb_heap) 4.332M i/s - 12.000M times in 2.769993s (230.83ns/i, 666clocks/i)
617
+ push N (c++ stl) 7.700M i/s - 18.000M times in 2.337763s (129.88ns/i, 272clocks/i)
618
+ push N (c_dheap) 10.306M i/s - 30.000M times in 2.910863s (97.03ns/i, 231clocks/i)
619
+
620
+ Comparison:
621
+ push N (c_dheap): 10306222.6 i/s
622
+ push N (findmin): 10060827.1 i/s - 1.02x slower
623
+ push N (c++ stl): 7699668.9 i/s - 1.34x slower
624
+ push N (rb_heap): 4332141.2 i/s - 2.38x slower
625
+
626
+ == push N then pop N (N=3000000) ==============================================
627
+ Calculating -------------------------------------
628
+ push N + pop N (rb_heap) 844.839k i/s - 6.000M times in 7.101946s (1.18μs/i)
629
+ push N + pop N (c++ stl) 4.417M i/s - 18.000M times in 4.075439s (226.41ns/i, 576clocks/i)
630
+ push N + pop N (c_dheap) 4.006M i/s - 18.000M times in 4.493805s (249.66ns/i, 359clocks/i)
631
+
632
+ Comparison:
633
+ push N + pop N (c++ stl): 4416702.3 i/s
634
+ push N + pop N (c_dheap): 4005514.5 i/s - 1.10x slower
635
+ push N + pop N (rb_heap): 844838.9 i/s - 5.23x slower
636
+
637
+ ################################################################################
638
+ # Benchmarks with N=3,162,278
639
+ ################################################################################
640
+
641
+ == Push/pop with pre-filled queue (size=N) (N=3162278) ========================
642
+ Warming up --------------------------------------
643
+ push + pop (findmin) 40.806 i/s - 45.000 times in 1.102775s (24.51ms/i)
644
+ push + pop (bsearch) 959.453 i/s - 968.000 times in 1.008908s (1.04ms/i)
645
+ push + pop (rb_heap) 465.404k i/s - 502.801k times in 1.080353s (2.15μs/i)
646
+ push + pop (c++ stl) 2.153M i/s - 2.167M times in 1.006608s (464.52ns/i)
647
+ push + pop (c_dheap) 2.301M i/s - 2.320M times in 1.007969s (434.52ns/i, 912clocks/i)
648
+ Calculating -------------------------------------
649
+ push + pop (findmin) 41.611 i/s - 122.000 times in 2.931911s (24.03ms/i)
650
+ push + pop (bsearch) 984.072 i/s - 2.878k times in 2.924583s (1.02ms/i)
651
+ push + pop (rb_heap) 463.971k i/s - 1.396M times in 3.009265s (2.16μs/i)
652
+ push + pop (c++ stl) 2.514M i/s - 6.458M times in 2.569153s (397.81ns/i, 749clocks/i)
653
+ push + pop (c_dheap) 2.845M i/s - 6.904M times in 2.426969s (351.52ns/i)
654
+
655
+ Comparison:
656
+ push + pop (c_dheap): 2844751.4 i/s
657
+ push + pop (c++ stl): 2513767.5 i/s - 1.13x slower
658
+ push + pop (rb_heap): 463971.4 i/s - 6.13x slower
659
+ push + pop (bsearch): 984.1 i/s - 2890.80x slower
660
+ push + pop (findmin): 41.6 i/s - 68365.22x slower
661
+
662
+ ################################################################################
663
+ # Benchmarks with N=10,000,000
664
+ ################################################################################
665
+
666
+ == Push/pop with pre-filled queue (size=N) (N=10000000) ========================
667
+ Warming up --------------------------------------
668
+ push + pop (findmin) 12.805 i/s - 14.000 times in 1.093356s (78.10ms/i)
669
+ push + pop (bsearch) 286.818 i/s - 308.000 times in 1.073852s (3.49ms/i)
670
+ push + pop (rb_heap) 450.346k i/s - 452.478k times in 1.004734s (2.22μs/i)
671
+ push + pop (c++ stl) 1.816M i/s - 1.816M times in 0.999712s (550.55ns/i)
672
+ push + pop (c_dheap) 1.720M i/s - 1.725M times in 1.002939s (581.52ns/i)
673
+ Calculating -------------------------------------
674
+ push + pop (findmin) 12.962 i/s - 38.000 times in 2.931734s (77.15ms/i)
675
+ push + pop (bsearch) 315.781 i/s - 860.000 times in 2.723405s (3.17ms/i)
676
+ push + pop (rb_heap) 445.131k i/s - 1.351M times in 3.035144s (2.25μs/i)
677
+ push + pop (c++ stl) 1.962M i/s - 5.449M times in 2.777382s (509.70ns/i)
678
+ push + pop (c_dheap) 1.916M i/s - 5.159M times in 2.692582s (521.93ns/i)
679
+
680
+ Comparison:
681
+ push + pop (c++ stl): 1961952.2 i/s
682
+ push + pop (c_dheap): 1915981.2 i/s - 1.02x slower
683
+ push + pop (rb_heap): 445131.4 i/s - 4.41x slower
684
+ push + pop (bsearch): 315.8 i/s - 6213.01x slower
685
+ push + pop (findmin): 13.0 i/s - 151366.37x slower
686
+