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.
- checksums.yaml +4 -4
- data/.clang-format +21 -0
- data/.github/workflows/main.yml +18 -3
- data/.gitignore +1 -0
- data/.rubocop.yml +32 -2
- data/.yardopts +10 -0
- data/CHANGELOG.md +93 -0
- data/D +7 -0
- data/README.md +416 -154
- data/d_heap.gemspec +20 -8
- data/docs/benchmarks-2.txt +93 -0
- data/docs/benchmarks-mem.txt +39 -0
- data/docs/benchmarks.txt +686 -0
- data/docs/profile.txt +358 -0
- data/ext/d_heap/.rubocop.yml +7 -0
- data/ext/d_heap/d_heap.c +917 -295
- data/ext/d_heap/extconf.rb +45 -3
- data/images/push_n.png +0 -0
- data/images/push_n_pop_n.png +0 -0
- data/images/push_pop.png +0 -0
- data/images/wikipedia-min-heap.png +0 -0
- data/lib/d_heap.rb +116 -3
- data/lib/d_heap/version.rb +1 -1
- metadata +33 -17
- data/.rspec +0 -3
- data/.travis.yml +0 -6
- data/Gemfile +0 -11
- data/Gemfile.lock +0 -67
- data/Rakefile +0 -20
- data/bin/console +0 -15
- data/bin/rake +0 -29
- data/bin/rspec +0 -29
- data/bin/rubocop +0 -29
- data/bin/setup +0 -8
- data/ext/d_heap/d_heap.h +0 -41
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 = "
|
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.
|
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/
|
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
|
-
#
|
26
|
-
|
27
|
-
`git ls-files -z`.split("\x0")
|
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 "
|
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
|
+
|
data/docs/benchmarks.txt
ADDED
@@ -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
|
+
|