pairing_heap 0.3.0 → 2.0.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/.github/workflows/main.yml +12 -9
- data/.standard.yml +3 -0
- data/Gemfile.lock +43 -1
- data/README.md +328 -292
- data/Rakefile +2 -1
- data/lib/pairing_heap/version.rb +1 -1
- data/lib/pairing_heap.rb +169 -78
- data/pairing_heap.gemspec +15 -13
- metadata +32 -4
- data/.rubocop.yml +0 -17
data/README.md
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# PairingHeap
|
2
|
+
[](https://github.com/testdouble/standard)
|
2
3
|
|
3
4
|
PairingHeap is a pure Ruby priority queue implementation using a pairing heap as the underlying data structure. While a pairing heap is asymptotically less efficient than the Fibonacci heap, it is usually faster in practice. This makes it a popular choice for Prim's MST or Dijkstra's algorithm implementations.
|
4
5
|
|
5
|
-
|
6
|
+
PairingHeap is currently being used as the priority queue data structure in [RGL](https://github.com/monora/rgl/).
|
7
|
+
|
8
|
+
Also implementation without priority change support is provided(`SimplePairingHeap`), while the asymptotical complexity of the methods stay the same, bookkeeping of elements is not needed making, the constant smaller.
|
6
9
|
|
7
10
|
## Installation
|
8
11
|
|
@@ -34,8 +37,8 @@ simple_heap.push(:a, 1)
|
|
34
37
|
simple_heap.push(:b, 2)
|
35
38
|
simple_heap.push(:c, 3)
|
36
39
|
simple_heap.peek # => :a
|
37
|
-
simple_heap.peek_priority # =>
|
38
|
-
simple_heap.
|
40
|
+
simple_heap.peek_priority # => 1
|
41
|
+
simple_heap.pop_with_priority # => [:a, 1]
|
39
42
|
simple_heap.pop # => :b
|
40
43
|
|
41
44
|
# Min priority queue
|
@@ -104,7 +107,7 @@ This API is a drop-in replacement of [lazy_priority_queue](https://github.com/ma
|
|
104
107
|
## Benchmarks
|
105
108
|
I picked the three fastest pure Ruby priority queue implementations I was aware of for the comparison:
|
106
109
|
|
107
|
-
* [lazy_priority_queue](https://github.com/matiasbattocchia/lazy_priority_queue) that uses a lazy binomial heap. This is probably the most popular option
|
110
|
+
* [lazy_priority_queue](https://github.com/matiasbattocchia/lazy_priority_queue) that uses a lazy binomial heap. This is probably the most popular option. It was used in [RGL](https://github.com/monora/rgl/) until PairingHeap replaced it.
|
108
111
|
* Pure Ruby implementation of Fibonacci Heap from [priority-queue](https://github.com/supertinou/priority-queue) ([link to source](https://github.com/supertinou/priority-queue/blob/master/lib/priority_queue/ruby_priority_queue.rb))
|
109
112
|
* [rb_heap](https://github.com/florian/rb_heap) that uses a binary heap. Note however that this implementation does not support change_priority operation.
|
110
113
|
|
@@ -114,7 +117,7 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
|
|
114
117
|
> A stress test of 1,000,000 operations: starting with 1,000 pushes/0 pops, following 999 pushes/1 pop, and so on till 0 pushes/1000 pops.
|
115
118
|
<table>
|
116
119
|
<tr>
|
117
|
-
<th colspan="4">ruby 3.1.
|
120
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
|
118
121
|
</tr>
|
119
122
|
<tr>
|
120
123
|
<th>Library</th>
|
@@ -124,36 +127,36 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
|
|
124
127
|
</tr>
|
125
128
|
<tr>
|
126
129
|
<td>pairing_heap (SimplePairingHeap)</td>
|
127
|
-
<td>
|
128
|
-
<td>
|
129
|
-
<td>0.
|
130
|
+
<td>23</td>
|
131
|
+
<td>62.014773</td>
|
132
|
+
<td>0.371</td>
|
130
133
|
</tr>
|
131
134
|
<tr>
|
132
135
|
<td>pairing_heap (PairingHeap)</td>
|
133
|
-
<td>
|
134
|
-
<td>63.
|
135
|
-
<td>0.
|
136
|
+
<td>16</td>
|
137
|
+
<td>63.135240</td>
|
138
|
+
<td>0.253(1.46x slower)</td>
|
136
139
|
</tr>
|
137
140
|
<tr>
|
138
|
-
<td>
|
139
|
-
<td>
|
140
|
-
<td>
|
141
|
-
<td>0.
|
141
|
+
<td>rb_heap</td>
|
142
|
+
<td>14</td>
|
143
|
+
<td>61.123304</td>
|
144
|
+
<td>0.229(1.62x slower)</td>
|
142
145
|
</tr>
|
143
146
|
<tr>
|
144
|
-
<td>
|
145
|
-
<td>
|
146
|
-
<td>
|
147
|
-
<td>0.
|
147
|
+
<td>lazy_priority_queue</td>
|
148
|
+
<td>10</td>
|
149
|
+
<td>66.208647</td>
|
150
|
+
<td>0.151(2.46x slower)</td>
|
148
151
|
</tr>
|
149
152
|
<tr>
|
150
153
|
<td>Fibonacci</td>
|
151
154
|
<td>8</td>
|
152
|
-
<td>66.
|
153
|
-
<td>0.
|
155
|
+
<td>66.353147</td>
|
156
|
+
<td>0.121(3.08x slower)</td>
|
154
157
|
</tr>
|
155
158
|
<tr>
|
156
|
-
<th colspan="4">ruby 3.1.
|
159
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
|
157
160
|
</tr>
|
158
161
|
<tr>
|
159
162
|
<th>Library</th>
|
@@ -163,36 +166,36 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
|
|
163
166
|
</tr>
|
164
167
|
<tr>
|
165
168
|
<td>pairing_heap (SimplePairingHeap)</td>
|
166
|
-
<td>
|
167
|
-
<td>
|
168
|
-
<td>0.
|
169
|
+
<td>25</td>
|
170
|
+
<td>60.423579</td>
|
171
|
+
<td>0.414</td>
|
172
|
+
</tr>
|
173
|
+
<tr>
|
174
|
+
<td>rb_heap</td>
|
175
|
+
<td>19</td>
|
176
|
+
<td>60.869907</td>
|
177
|
+
<td>0.312(1.33x slower)</td>
|
169
178
|
</tr>
|
170
179
|
<tr>
|
171
180
|
<td>pairing_heap (PairingHeap)</td>
|
172
|
-
<td>
|
173
|
-
<td>61.
|
174
|
-
<td>0.
|
181
|
+
<td>17</td>
|
182
|
+
<td>61.389127</td>
|
183
|
+
<td>0.277(1.49x slower)</td>
|
175
184
|
</tr>
|
176
185
|
<tr>
|
177
186
|
<td>Fibonacci</td>
|
178
187
|
<td>14</td>
|
179
|
-
<td>64.
|
180
|
-
<td>0.217(1.
|
181
|
-
</tr>
|
182
|
-
<tr>
|
183
|
-
<td>rb_heap</td>
|
184
|
-
<td>12</td>
|
185
|
-
<td>60.975479</td>
|
186
|
-
<td>0.197(1.78x slower)</td>
|
188
|
+
<td>64.417807</td>
|
189
|
+
<td>0.217(1.90x slower)</td>
|
187
190
|
</tr>
|
188
191
|
<tr>
|
189
192
|
<td>lazy_priority_queue</td>
|
190
193
|
<td>11</td>
|
191
|
-
<td>
|
192
|
-
<td>0.
|
194
|
+
<td>63.151856</td>
|
195
|
+
<td>0.174(2.38x slower)</td>
|
193
196
|
</tr>
|
194
197
|
<tr>
|
195
|
-
<th colspan="4">jruby 9.3.
|
198
|
+
<th colspan="4">jruby 9.3.7.0 (2.6.8) 2022-08-16 c79ef237e0 OpenJDK 64-Bit Server VM 17.0.2+8-86 on 17.0.2+8-86 +indy +jit [x86_64-darwin]</th>
|
196
199
|
</tr>
|
197
200
|
<tr>
|
198
201
|
<th>Library</th>
|
@@ -202,36 +205,36 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
|
|
202
205
|
</tr>
|
203
206
|
<tr>
|
204
207
|
<td>pairing_heap (SimplePairingHeap)</td>
|
205
|
-
<td>
|
206
|
-
<td>60.
|
207
|
-
<td>0.
|
208
|
+
<td>47</td>
|
209
|
+
<td>60.391633</td>
|
210
|
+
<td>0.778</td>
|
208
211
|
</tr>
|
209
212
|
<tr>
|
210
|
-
<td>
|
211
|
-
<td>
|
212
|
-
<td>60.
|
213
|
-
<td>0.
|
213
|
+
<td>rb_heap</td>
|
214
|
+
<td>34</td>
|
215
|
+
<td>60.878639</td>
|
216
|
+
<td>0.559(1.39x slower)</td>
|
214
217
|
</tr>
|
215
218
|
<tr>
|
216
|
-
<td>
|
217
|
-
<td>
|
218
|
-
<td>61.
|
219
|
-
<td>0.
|
219
|
+
<td>pairing_heap (PairingHeap)</td>
|
220
|
+
<td>32</td>
|
221
|
+
<td>61.211985</td>
|
222
|
+
<td>0.523(1.49x slower)</td>
|
220
223
|
</tr>
|
221
224
|
<tr>
|
222
|
-
<td>
|
223
|
-
<td>
|
224
|
-
<td>
|
225
|
-
<td>0.
|
225
|
+
<td>Fibonacci</td>
|
226
|
+
<td>23</td>
|
227
|
+
<td>60.297670</td>
|
228
|
+
<td>0.382(2.04x slower)</td>
|
226
229
|
</tr>
|
227
230
|
<tr>
|
228
|
-
<td>
|
229
|
-
<td>
|
230
|
-
<td>
|
231
|
-
<td>0.
|
231
|
+
<td>lazy_priority_queue</td>
|
232
|
+
<td>23</td>
|
233
|
+
<td>61.973538</td>
|
234
|
+
<td>0.371(2.10x slower)</td>
|
232
235
|
</tr>
|
233
236
|
<tr>
|
234
|
-
<th colspan="4">
|
237
|
+
<th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
|
235
238
|
</tr>
|
236
239
|
<tr>
|
237
240
|
<th>Library</th>
|
@@ -241,33 +244,33 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
|
|
241
244
|
</tr>
|
242
245
|
<tr>
|
243
246
|
<td>pairing_heap (SimplePairingHeap)</td>
|
244
|
-
<td>
|
245
|
-
<td>60.
|
246
|
-
<td>
|
247
|
+
<td>206</td>
|
248
|
+
<td>60.191686</td>
|
249
|
+
<td>3.433</td>
|
247
250
|
</tr>
|
248
251
|
<tr>
|
249
|
-
<td>
|
250
|
-
<td>
|
251
|
-
<td>60.
|
252
|
-
<td>
|
252
|
+
<td>rb_heap</td>
|
253
|
+
<td>97</td>
|
254
|
+
<td>60.134011</td>
|
255
|
+
<td>1.614(1.93x slower)</td>
|
253
256
|
</tr>
|
254
257
|
<tr>
|
255
|
-
<td>
|
256
|
-
<td>
|
257
|
-
<td>
|
258
|
-
<td>
|
258
|
+
<td>pairing_heap (PairingHeap)</td>
|
259
|
+
<td>85</td>
|
260
|
+
<td>60.193608s</td>
|
261
|
+
<td>1.434(2.40x slower)</td>
|
259
262
|
</tr>
|
260
263
|
<tr>
|
261
|
-
<td>
|
262
|
-
<td>
|
263
|
-
<td>
|
264
|
-
<td>0.
|
264
|
+
<td>lazy_priority_queue</td>
|
265
|
+
<td>19</td>
|
266
|
+
<td>63.212429</td>
|
267
|
+
<td>0.301(11.45x slower)</td>
|
265
268
|
</tr>
|
266
269
|
<tr>
|
267
|
-
<td>
|
268
|
-
<td>
|
269
|
-
<td>
|
270
|
-
<td>0.
|
270
|
+
<td>Fibonacci</td>
|
271
|
+
<td>2</td>
|
272
|
+
<td>83.508571</td>
|
273
|
+
<td>0.024(143.70x slower)</td>
|
271
274
|
</tr>
|
272
275
|
</table>
|
273
276
|
|
@@ -275,7 +278,7 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
|
|
275
278
|
A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_priorities/0 pops, following 999 pushes/999 change_priorities/1 pop, and so on till 0 pushes/0 change_priorities/1000 pops.
|
276
279
|
<table>
|
277
280
|
<tr>
|
278
|
-
<th colspan="4">ruby 3.1.
|
281
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
|
279
282
|
</tr>
|
280
283
|
<tr>
|
281
284
|
<th>Library</th>
|
@@ -285,24 +288,24 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr
|
|
285
288
|
</tr>
|
286
289
|
<tr>
|
287
290
|
<td>pairing_heap</td>
|
288
|
-
<td>
|
289
|
-
<td>
|
290
|
-
<td>0.
|
291
|
+
<td>15</td>
|
292
|
+
<td>62.946988</td>
|
293
|
+
<td>0.238</td>
|
291
294
|
</tr>
|
292
295
|
<tr>
|
293
296
|
<td>lazy_priority_queue</td>
|
294
297
|
<td>9</td>
|
295
|
-
<td>
|
296
|
-
<td>0.
|
298
|
+
<td>61.876691</td>
|
299
|
+
<td>0.145(1.64x slower)</td>
|
297
300
|
</tr>
|
298
301
|
<tr>
|
299
302
|
<td>Fibonacci</td>
|
300
303
|
<td>8</td>
|
301
|
-
<td>67.
|
302
|
-
<td>0.
|
304
|
+
<td>67.809982</td>
|
305
|
+
<td>0.118(2.02x slower)</td>
|
303
306
|
</tr>
|
304
307
|
<tr>
|
305
|
-
<th colspan="4">ruby 3.1.
|
308
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
|
306
309
|
</tr>
|
307
310
|
<tr>
|
308
311
|
<th>Library</th>
|
@@ -312,24 +315,24 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr
|
|
312
315
|
</tr>
|
313
316
|
<tr>
|
314
317
|
<td>pairing_heap</td>
|
315
|
-
<td>
|
316
|
-
<td>62.
|
317
|
-
<td>0.
|
318
|
+
<td>16</td>
|
319
|
+
<td>62.576693</td>
|
320
|
+
<td>0.256</td>
|
318
321
|
</tr>
|
319
322
|
<tr>
|
320
323
|
<td>Fibonacci</td>
|
321
324
|
<td>13</td>
|
322
|
-
<td>63.
|
323
|
-
<td>0.206(1.
|
325
|
+
<td>63.164614</td>
|
326
|
+
<td>0.206(1.24x slower)</td>
|
324
327
|
</tr>
|
325
328
|
<tr>
|
326
329
|
<td>lazy_priority_queue</td>
|
327
330
|
<td>10</td>
|
328
|
-
<td>
|
329
|
-
<td>0.
|
331
|
+
<td>63.172995s</td>
|
332
|
+
<td>0.158(1.62x slower)</td>
|
330
333
|
</tr>
|
331
334
|
<tr>
|
332
|
-
<th colspan="4">jruby 9.3.
|
335
|
+
<th colspan="4">jruby 9.3.7.0 (2.6.8) 2022-08-16 c79ef237e0 OpenJDK 64-Bit Server VM 17.0.2+8-86 on 17.0.2+8-86 +indy +jit [x86_64-darwin]</th>
|
333
336
|
</tr>
|
334
337
|
<tr>
|
335
338
|
<th>Library</th>
|
@@ -339,24 +342,24 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr
|
|
339
342
|
</tr>
|
340
343
|
<tr>
|
341
344
|
<td>pairing_heap</td>
|
342
|
-
<td>
|
343
|
-
<td>
|
344
|
-
<td>0.
|
345
|
+
<td>28</td>
|
346
|
+
<td>60.280368</td>
|
347
|
+
<td>0.465</td>
|
345
348
|
</tr>
|
346
349
|
<tr>
|
347
|
-
<td>
|
348
|
-
<td>
|
349
|
-
<td>61.
|
350
|
-
<td>0.
|
350
|
+
<td>Fibonacci</td>
|
351
|
+
<td>22</td>
|
352
|
+
<td>61.405561</td>
|
353
|
+
<td>0.465(1.30x slower)</td>
|
351
354
|
</tr>
|
352
355
|
<tr>
|
353
|
-
<td>
|
354
|
-
<td>
|
355
|
-
<td>
|
356
|
-
<td>0.
|
356
|
+
<td>lazy_priority_queue</td>
|
357
|
+
<td>20</td>
|
358
|
+
<td>60.397535</td>
|
359
|
+
<td>0.331(1.40x slower)</td>
|
357
360
|
</tr>
|
358
361
|
<tr>
|
359
|
-
<th colspan="4">
|
362
|
+
<th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
|
360
363
|
</tr>
|
361
364
|
<tr>
|
362
365
|
<th>Library</th>
|
@@ -366,48 +369,58 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr
|
|
366
369
|
</tr>
|
367
370
|
<tr>
|
368
371
|
<td>pairing_heap</td>
|
369
|
-
<td>
|
370
|
-
<td>
|
371
|
-
<td>
|
372
|
+
<td>70</td>
|
373
|
+
<td>60.663184</td>
|
374
|
+
<td>1.160</td>
|
372
375
|
</tr>
|
373
376
|
<tr>
|
374
|
-
<td>
|
375
|
-
<td>
|
376
|
-
<td>60.
|
377
|
-
<td>0.
|
377
|
+
<td>lazy_priority_queue</td>
|
378
|
+
<td>23</td>
|
379
|
+
<td>60.474587</td>
|
380
|
+
<td>0.382(3.04x slower)</td>
|
378
381
|
</tr>
|
379
382
|
<tr>
|
380
|
-
<td>
|
381
|
-
<td>
|
382
|
-
<td>
|
383
|
-
<td>0.
|
383
|
+
<td>Fibonacci</td>
|
384
|
+
<td>2</td>
|
385
|
+
<td>74.873854</td>
|
386
|
+
<td>0.027(43.44x slower)</td>
|
384
387
|
</tr>
|
385
388
|
</table>
|
386
389
|
|
387
|
-
### Stress test with changing priority(
|
388
|
-
|
390
|
+
### Stress test with changing priority or push/pop(test ignored in summary) [source code](./test/performance_pop_versus_change_priority.rb)
|
391
|
+
Start with 500 pushes, then:
|
392
|
+
* If queue supports changing priority 500 change_priority calls, then 500 pops
|
393
|
+
* If does not support changing priority 500 push calls, then 1000 pops
|
389
394
|
<table>
|
390
395
|
<tr>
|
391
|
-
<th colspan="4">ruby 3.1.
|
396
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
|
392
397
|
</tr>
|
393
398
|
<tr>
|
394
399
|
<th>Library</th>
|
395
400
|
<th>Iterations per second</th>
|
396
401
|
</tr>
|
397
402
|
<tr>
|
398
|
-
<td>pairing_heap</td>
|
399
|
-
<td>
|
403
|
+
<td>pairing_heap (PairingHeap)</td>
|
404
|
+
<td>436.4</td>
|
400
405
|
</tr>
|
401
406
|
<tr>
|
402
407
|
<td>lazy_priority_queue</td>
|
403
|
-
<td>
|
408
|
+
<td>380.2(1.94x slower)</td>
|
409
|
+
</tr>
|
410
|
+
<tr>
|
411
|
+
<td>pairing_heap (SimplePairingHeap)</td>
|
412
|
+
<td>339.9.02(2.17x slower)</td>
|
404
413
|
</tr>
|
405
414
|
<tr>
|
406
415
|
<td>Fibonacci</td>
|
407
|
-
<td>
|
416
|
+
<td>313.9(2.35x slower)</td>
|
408
417
|
</tr>
|
409
418
|
<tr>
|
410
|
-
<
|
419
|
+
<td>rb_heap</td>
|
420
|
+
<td>194.7(3.78 slower)</td>
|
421
|
+
</tr>
|
422
|
+
<tr>
|
423
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
|
411
424
|
</tr>
|
412
425
|
<tr>
|
413
426
|
<th>Library</th>
|
@@ -415,60 +428,84 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
|
|
415
428
|
</tr>
|
416
429
|
<tr>
|
417
430
|
<td>pairing_heap</td>
|
418
|
-
<td>
|
431
|
+
<td>854.6</td>
|
419
432
|
</tr>
|
420
433
|
<tr>
|
421
434
|
<td>Fibonacci</td>
|
422
|
-
<td>
|
435
|
+
<td>651.3(1.31x slower)</td>
|
423
436
|
</tr>
|
424
437
|
<tr>
|
425
438
|
<td>lazy_priority_queue</td>
|
426
|
-
<td>
|
439
|
+
<td>453.6(1.88x slower)</td>
|
427
440
|
</tr>
|
428
441
|
<tr>
|
429
|
-
<
|
442
|
+
<td>pairing_heap(SimplePairingHeap)</td>
|
443
|
+
<td>390.9(2.19x slower)</td>
|
444
|
+
</tr>
|
445
|
+
<tr>
|
446
|
+
<td>rb_heap</td>
|
447
|
+
<td>268.8(3.18x slower)</td>
|
448
|
+
</tr>
|
449
|
+
<tr>
|
450
|
+
<th colspan="4">jruby 9.3.7.0 (2.6.8) 2022-08-16 c79ef237e0 OpenJDK 64-Bit Server VM 17.0.2+8-86 on 17.0.2+8-86 +indy +jit [x86_64-darwin]</th>
|
430
451
|
</tr>
|
431
452
|
<tr>
|
432
453
|
<th>Library</th>
|
433
454
|
<th>Iterations per second</th>
|
434
455
|
</tr>
|
435
456
|
<tr>
|
436
|
-
<td>pairing_heap</td>
|
437
|
-
<td>
|
457
|
+
<td>pairing_heap(PairingHeap)</td>
|
458
|
+
<td>1591</td>
|
459
|
+
</tr>
|
460
|
+
<tr>
|
461
|
+
<td>Fibonacci</td>
|
462
|
+
<td>1092(1.46x slower)</td>
|
438
463
|
</tr>
|
439
464
|
<tr>
|
440
465
|
<td>lazy_priority_queue</td>
|
441
|
-
<td>
|
466
|
+
<td>986(1.61x slower)</td>
|
442
467
|
</tr>
|
443
468
|
<tr>
|
444
|
-
<td>
|
445
|
-
<td>
|
469
|
+
<td>pairing_heap(SimplePairingHeap)</td>
|
470
|
+
<td>562(2.37x slower)</td>
|
471
|
+
</tr>
|
472
|
+
<tr>
|
473
|
+
<td>rb_heap</td>
|
474
|
+
<td>623(2.55x slower)</td>
|
446
475
|
</tr>
|
447
476
|
<tr>
|
448
|
-
<th colspan="4">
|
477
|
+
<th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
|
449
478
|
</tr>
|
450
479
|
<tr>
|
451
480
|
<th>Library</th>
|
452
481
|
<th>Iterations per second</th>
|
453
482
|
</tr>
|
454
483
|
<tr>
|
455
|
-
<td>pairing_heap</td>
|
456
|
-
<td>
|
484
|
+
<td>pairing_heap(PairingHeap)</td>
|
485
|
+
<td>7404</td>
|
486
|
+
</tr>
|
487
|
+
<tr>
|
488
|
+
<td>pairing_heap(SimplePairingHeap)</td>
|
489
|
+
<td>5104(1.45x slower)</td>
|
490
|
+
</tr>
|
491
|
+
<tr>
|
492
|
+
<td>rb_heap</td>
|
493
|
+
<td>1575(4.70x slower)</td>
|
457
494
|
</tr>
|
458
495
|
<tr>
|
459
496
|
<td>Fibonacci</td>
|
460
|
-
<td>
|
497
|
+
<td>1258(5.88x slower)</td>
|
461
498
|
</tr>
|
462
499
|
<tr>
|
463
500
|
<td>lazy_priority_queue</td>
|
464
|
-
<td>
|
501
|
+
<td>1004(7.38x slower)</td>
|
465
502
|
</tr>
|
466
503
|
</table>
|
467
504
|
|
468
505
|
### Dijkstra's algorithm with RGL [source code](./test/performance_rgl.rb)
|
469
506
|
<table>
|
470
507
|
<tr>
|
471
|
-
<th colspan="4">ruby 3.1.
|
508
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
|
472
509
|
</tr>
|
473
510
|
<tr>
|
474
511
|
<th>Library</th>
|
@@ -479,23 +516,23 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
|
|
479
516
|
<tr>
|
480
517
|
<td>pairing_heap</td>
|
481
518
|
<td>9</td>
|
482
|
-
<td>
|
483
|
-
<td>0.
|
519
|
+
<td>61.469343</td>
|
520
|
+
<td>0.116</td>
|
484
521
|
</tr>
|
485
522
|
<tr>
|
486
523
|
<td>lazy_priority_queue</td>
|
487
524
|
<td>8</td>
|
488
|
-
<td>
|
489
|
-
<td>0.125(1.
|
525
|
+
<td>64.312672</td>
|
526
|
+
<td>0.125(1.18x slower)</td>
|
490
527
|
</tr>
|
491
528
|
<tr>
|
492
529
|
<td>Fibonacci</td>
|
493
530
|
<td>7</td>
|
494
|
-
<td>
|
495
|
-
<td>0.
|
531
|
+
<td>60.555716</td>
|
532
|
+
<td>0.116(1.27x slower)</td>
|
496
533
|
</tr>
|
497
534
|
<tr>
|
498
|
-
<th colspan="4">ruby 3.1.
|
535
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
|
499
536
|
</tr>
|
500
537
|
<tr>
|
501
538
|
<th>Library</th>
|
@@ -505,24 +542,24 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
|
|
505
542
|
</tr>
|
506
543
|
<tr>
|
507
544
|
<td>pairing_heap</td>
|
508
|
-
<td>
|
509
|
-
<td>
|
510
|
-
<td>0.
|
545
|
+
<td>10</td>
|
546
|
+
<td>65.160945s</td>
|
547
|
+
<td>0.154</td>
|
511
548
|
</tr>
|
512
549
|
<tr>
|
513
550
|
<td>Fibonacci</td>
|
514
551
|
<td>9</td>
|
515
|
-
<td>
|
516
|
-
<td>0.
|
552
|
+
<td>61.950587</td>
|
553
|
+
<td>0.145(1.06x slower)</td>
|
517
554
|
</tr>
|
518
555
|
<tr>
|
519
556
|
<td>lazy_priority_queue</td>
|
520
|
-
<td>
|
521
|
-
<td>
|
522
|
-
<td>0.
|
557
|
+
<td>9</td>
|
558
|
+
<td>66.592123</td>
|
559
|
+
<td>0.135(1.14x slower)</td>
|
523
560
|
</tr>
|
524
561
|
<tr>
|
525
|
-
<th colspan="4">jruby 9.3.
|
562
|
+
<th colspan="4">jruby 9.3.7.0 (2.6.8) 2022-08-16 c79ef237e0 OpenJDK 64-Bit Server VM 17.0.2+8-86 on 17.0.2+8-86 +indy +jit [x86_64-darwin]</th>
|
526
563
|
</tr>
|
527
564
|
<tr>
|
528
565
|
<th>Library</th>
|
@@ -531,25 +568,25 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
|
|
531
568
|
<th>Iterations per second</th>
|
532
569
|
</tr>
|
533
570
|
<tr>
|
534
|
-
<td>
|
535
|
-
<td>
|
536
|
-
<td>
|
537
|
-
<td>0.
|
571
|
+
<td>lazy_priority_queue</td>
|
572
|
+
<td>20</td>
|
573
|
+
<td>61.149944</td>
|
574
|
+
<td>0.328</td>
|
538
575
|
</tr>
|
539
576
|
<tr>
|
540
|
-
<td>
|
541
|
-
<td>
|
542
|
-
<td>61.
|
543
|
-
<td>0.
|
577
|
+
<td>pairing_heap</td>
|
578
|
+
<td>20</td>
|
579
|
+
<td>61.210225s</td>
|
580
|
+
<td>0.328</td>
|
544
581
|
</tr>
|
545
582
|
<tr>
|
546
583
|
<td>Fibonacci</td>
|
547
|
-
<td>
|
548
|
-
<td>
|
549
|
-
<td>0.
|
584
|
+
<td>18</td>
|
585
|
+
<td>62.330882</td>
|
586
|
+
<td>0.292(1.12x slower)</td>
|
550
587
|
</tr>
|
551
588
|
<tr>
|
552
|
-
<th colspan="4">
|
589
|
+
<th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
|
553
590
|
</tr>
|
554
591
|
<tr>
|
555
592
|
<th>Library</th>
|
@@ -559,21 +596,21 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
|
|
559
596
|
</tr>
|
560
597
|
<tr>
|
561
598
|
<td>pairing_heap</td>
|
562
|
-
<td>
|
563
|
-
<td>
|
564
|
-
<td>0.
|
599
|
+
<td>59</td>
|
600
|
+
<td>60.053843</td>
|
601
|
+
<td>0.991</td>
|
565
602
|
</tr>
|
566
603
|
<tr>
|
567
|
-
<td>
|
568
|
-
<td>
|
569
|
-
<td>
|
570
|
-
<td>0.
|
604
|
+
<td>lazy_priority_queue</td>
|
605
|
+
<td>34</td>
|
606
|
+
<td>60.586461</td>
|
607
|
+
<td>0.563(1.76x slower)</td>
|
571
608
|
</tr>
|
572
609
|
<tr>
|
573
|
-
<td>
|
574
|
-
<td>
|
575
|
-
<td>60.
|
576
|
-
<td>0.
|
610
|
+
<td>Fibonacci</td>
|
611
|
+
<td>31</td>
|
612
|
+
<td>60.633711</td>
|
613
|
+
<td>0.520(1.90x slower)</td>
|
577
614
|
</tr>
|
578
615
|
</table>
|
579
616
|
|
@@ -581,7 +618,7 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
|
|
581
618
|
Heaps that support change_priority operation use it. Heaps that do not support it use dijkstra implementation that do not rely on change_priority instead and do additional pops and pushes instead(see Dijkstra-NoDec from [Priority Queues and Dijkstra’s Algorithm](https://www3.cs.stonybrook.edu/~rezaul/papers/TR-07-54.pdf)).
|
582
619
|
<table>
|
583
620
|
<tr>
|
584
|
-
<th colspan="4">ruby 3.1.
|
621
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
|
585
622
|
</tr>
|
586
623
|
<tr>
|
587
624
|
<th>Library</th>
|
@@ -591,36 +628,36 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
591
628
|
</tr>
|
592
629
|
<tr>
|
593
630
|
<td>pairing_heap (SimplePairingHeap)</td>
|
594
|
-
<td>
|
595
|
-
<td>
|
596
|
-
<td>0.
|
631
|
+
<td>28</td>
|
632
|
+
<td>62.100299</td>
|
633
|
+
<td>0.451</td>
|
597
634
|
</tr>
|
598
635
|
<tr>
|
599
636
|
<td>pairing_heap (PairingHeap)</td>
|
600
|
-
<td>
|
601
|
-
<td>
|
602
|
-
<td>0.
|
637
|
+
<td>23</td>
|
638
|
+
<td>60.633153</td>
|
639
|
+
<td>0.380(1.19x slower)</td>
|
603
640
|
</tr>
|
604
641
|
<tr>
|
605
642
|
<td>rb_heap</td>
|
606
|
-
<td>
|
607
|
-
<td>
|
608
|
-
<td>0.
|
643
|
+
<td>14</td>
|
644
|
+
<td>62.019763</td>
|
645
|
+
<td>0.226(2.00x slower)</td>
|
609
646
|
</tr>
|
610
647
|
<tr>
|
611
648
|
<td>lazy_priority_queue</td>
|
612
|
-
<td>
|
613
|
-
<td>
|
614
|
-
<td>0.
|
649
|
+
<td>11</td>
|
650
|
+
<td>63.105064s</td>
|
651
|
+
<td>0.174(2.58x slower)</td>
|
615
652
|
</tr>
|
616
653
|
<tr>
|
617
654
|
<td>Fibonacci</td>
|
618
655
|
<td>10</td>
|
619
|
-
<td>
|
620
|
-
<td>0.
|
656
|
+
<td>64.407187</td>
|
657
|
+
<td>0.155(2.90x slower)</td>
|
621
658
|
</tr>
|
622
659
|
<tr>
|
623
|
-
<th colspan="4">ruby 3.1.
|
660
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
|
624
661
|
</tr>
|
625
662
|
<tr>
|
626
663
|
<th>Library</th>
|
@@ -630,36 +667,36 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
630
667
|
</tr>
|
631
668
|
<tr>
|
632
669
|
<td>pairing_heap (SimplePairingHeap)</td>
|
633
|
-
<td>
|
634
|
-
<td>61.
|
635
|
-
<td>0.
|
670
|
+
<td>32</td>
|
671
|
+
<td>61.289321</td>
|
672
|
+
<td>0.522</td>
|
636
673
|
</tr>
|
637
674
|
<tr>
|
638
675
|
<td>pairing_heap (PairingHeap)</td>
|
639
|
-
<td>
|
640
|
-
<td>
|
641
|
-
<td>0.
|
676
|
+
<td>26</td>
|
677
|
+
<td>60.657625</td>
|
678
|
+
<td>0.429(1.22x slower)</td>
|
642
679
|
</tr>
|
643
680
|
<tr>
|
644
681
|
<td>rb_heap</td>
|
645
682
|
<td>19</td>
|
646
|
-
<td>
|
647
|
-
<td>0.
|
683
|
+
<td>60.710888s</td>
|
684
|
+
<td>0.313(1.67x slower)</td>
|
648
685
|
</tr>
|
649
686
|
<tr>
|
650
687
|
<td>Fibonacci</td>
|
651
|
-
<td>
|
652
|
-
<td>
|
653
|
-
<td>0.
|
688
|
+
<td>19</td>
|
689
|
+
<td>61.471203</td>
|
690
|
+
<td>0.310(1.69x slower)</td>
|
654
691
|
</tr>
|
655
692
|
<tr>
|
656
693
|
<td>lazy_priority_queue</td>
|
657
694
|
<td>12</td>
|
658
|
-
<td>60.
|
659
|
-
<td>0.
|
695
|
+
<td>60.125779</td>
|
696
|
+
<td>0.200(2.61x slower)</td>
|
660
697
|
</tr>
|
661
698
|
<tr>
|
662
|
-
<th colspan="4">jruby 9.3.
|
699
|
+
<th colspan="4">jruby 9.3.7.0 (2.6.8) 2022-08-16 c79ef237e0 OpenJDK 64-Bit Server VM 17.0.2+8-86 on 17.0.2+8-86 +indy +jit [x86_64-darwin]</th>
|
663
700
|
</tr>
|
664
701
|
<tr>
|
665
702
|
<th>Library</th>
|
@@ -669,36 +706,36 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
669
706
|
</tr>
|
670
707
|
<tr>
|
671
708
|
<td>pairing_heap (SimplePairingHeap)</td>
|
672
|
-
<td>
|
673
|
-
<td>61.
|
674
|
-
<td>0.
|
709
|
+
<td>46</td>
|
710
|
+
<td>61.226924</td>
|
711
|
+
<td>0.753</td>
|
675
712
|
</tr>
|
676
713
|
<tr>
|
677
|
-
<td>
|
678
|
-
<td>
|
679
|
-
<td>
|
680
|
-
<td>0.
|
714
|
+
<td>rb_heap</td>
|
715
|
+
<td>38</td>
|
716
|
+
<td>60.563995</td>
|
717
|
+
<td>0.628(1.20x slower)</td>
|
681
718
|
</tr>
|
682
719
|
<tr>
|
683
|
-
<td>
|
684
|
-
<td>
|
685
|
-
<td>
|
686
|
-
<td>0.
|
720
|
+
<td>pairing_heap (PairingHeap)</td>
|
721
|
+
<td>37</td>
|
722
|
+
<td>60.928350</td>
|
723
|
+
<td>0.608(1.24x slower)</td>
|
687
724
|
</tr>
|
688
725
|
<tr>
|
689
|
-
<td>
|
690
|
-
<td>
|
691
|
-
<td>
|
692
|
-
<td>0.
|
726
|
+
<td>Fibonacci</td>
|
727
|
+
<td>28</td>
|
728
|
+
<td>61.136970</td>
|
729
|
+
<td>0.461(1.63x slower)</td>
|
693
730
|
</tr>
|
694
731
|
<tr>
|
695
|
-
<td>
|
696
|
-
<td>
|
697
|
-
<td>62.
|
698
|
-
<td>0.
|
732
|
+
<td>lazy_priority_queue</td>
|
733
|
+
<td>22</td>
|
734
|
+
<td>62.214796</td>
|
735
|
+
<td>0.354(2.13x slower)</td>
|
699
736
|
</tr>
|
700
737
|
<tr>
|
701
|
-
<th colspan="4">
|
738
|
+
<th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
|
702
739
|
</tr>
|
703
740
|
<tr>
|
704
741
|
<th>Library</th>
|
@@ -708,33 +745,33 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
708
745
|
</tr>
|
709
746
|
<tr>
|
710
747
|
<td>pairing_heap (SimplePairingHeap)</td>
|
711
|
-
<td>
|
712
|
-
<td>
|
713
|
-
<td>
|
748
|
+
<td>176</td>
|
749
|
+
<td>60.029817</td>
|
750
|
+
<td>3.006</td>
|
714
751
|
</tr>
|
715
752
|
<tr>
|
716
|
-
<td>
|
717
|
-
<td>
|
718
|
-
<td>
|
719
|
-
<td>
|
753
|
+
<td>pairing_heap (PairingHeap)</td>
|
754
|
+
<td>124</td>
|
755
|
+
<td>60.366607</td>
|
756
|
+
<td>2.078(1.45x slower)</td>
|
720
757
|
</tr>
|
721
758
|
<tr>
|
722
|
-
<td>
|
723
|
-
<td>
|
724
|
-
<td>60.
|
725
|
-
<td>
|
759
|
+
<td>rb_heap</td>
|
760
|
+
<td>95</td>
|
761
|
+
<td>60.021043</td>
|
762
|
+
<td>1.585(1.90x slower)</td>
|
726
763
|
</tr>
|
727
764
|
<tr>
|
728
765
|
<td>Fibonacci</td>
|
729
|
-
<td>
|
730
|
-
<td>
|
731
|
-
<td>0.
|
766
|
+
<td>38</td>
|
767
|
+
<td>60.020976</td>
|
768
|
+
<td>0.636(4.72x slower)</td>
|
732
769
|
</tr>
|
733
770
|
<tr>
|
734
771
|
<td>lazy_priority_queue</td>
|
735
|
-
<td>
|
736
|
-
<td>
|
737
|
-
<td>0.
|
772
|
+
<td>27</td>
|
773
|
+
<td>61.349925</td>
|
774
|
+
<td>0.445(6.75x slower)</td>
|
738
775
|
</tr>
|
739
776
|
</table>
|
740
777
|
|
@@ -742,7 +779,7 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
742
779
|
#### Change priority required
|
743
780
|
<table>
|
744
781
|
<tr>
|
745
|
-
<th colspan="4">ruby 3.1.
|
782
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
|
746
783
|
</tr>
|
747
784
|
<tr>
|
748
785
|
<th>Library</th>
|
@@ -754,14 +791,14 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
754
791
|
</tr>
|
755
792
|
<tr>
|
756
793
|
<td>lazy_priority_queue</td>
|
757
|
-
<td>1.
|
794
|
+
<td>1.688x slower</td>
|
758
795
|
</tr>
|
759
796
|
<tr>
|
760
797
|
<td>Fibonacci</td>
|
761
|
-
<td>1.
|
798
|
+
<td>1.987x slower</td>
|
762
799
|
</tr>
|
763
800
|
<tr>
|
764
|
-
<th colspan="4">ruby 3.1.
|
801
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
|
765
802
|
</tr>
|
766
803
|
<tr>
|
767
804
|
<th>Library</th>
|
@@ -773,14 +810,14 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
773
810
|
</tr>
|
774
811
|
<tr>
|
775
812
|
<td>Fibonacci</td>
|
776
|
-
<td>1.
|
813
|
+
<td>1.256x slower</td>
|
777
814
|
</tr>
|
778
815
|
<tr>
|
779
816
|
<td>lazy_priority_queue</td>
|
780
|
-
<td>1.
|
817
|
+
<td>1.648x slower</td>
|
781
818
|
</tr>
|
782
819
|
<tr>
|
783
|
-
<th colspan="4">jruby 9.3.
|
820
|
+
<th colspan="4">jruby 9.3.7.0 (2.6.8) 2022-08-16 c79ef237e0 OpenJDK 64-Bit Server VM 17.0.2+8-86 on 17.0.2+8-86 +indy +jit [x86_64-darwin]</th>
|
784
821
|
</tr>
|
785
822
|
<tr>
|
786
823
|
<th>Library</th>
|
@@ -791,16 +828,15 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
791
828
|
<td>1</td>
|
792
829
|
</tr>
|
793
830
|
<tr>
|
794
|
-
<td>
|
795
|
-
<td>1.
|
796
|
-
|
831
|
+
<td>Fibonacci</td>
|
832
|
+
<td>1.327x slower</td>
|
797
833
|
</tr>
|
798
834
|
<tr>
|
799
|
-
<td>
|
800
|
-
<td>1.
|
835
|
+
<td>lazy_priority_queue</td>
|
836
|
+
<td>1.383x slower</td>
|
801
837
|
</tr>
|
802
838
|
<tr>
|
803
|
-
<th colspan="4">
|
839
|
+
<th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
|
804
840
|
</tr>
|
805
841
|
<tr>
|
806
842
|
<th>Library</th>
|
@@ -811,19 +847,19 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
811
847
|
<td>1</td>
|
812
848
|
</tr>
|
813
849
|
<tr>
|
814
|
-
<td>
|
815
|
-
<td>
|
850
|
+
<td>lazy_priority_queue</td>
|
851
|
+
<td>3.878x slower</td>
|
816
852
|
</tr>
|
817
853
|
<tr>
|
818
|
-
<td>
|
819
|
-
<td>
|
854
|
+
<td>Fibonacci</td>
|
855
|
+
<td>9.889x slower</td>
|
820
856
|
</tr>
|
821
857
|
</table>
|
822
858
|
|
823
859
|
#### Change priority not required
|
824
860
|
<table>
|
825
861
|
<tr>
|
826
|
-
<th colspan="4">ruby 3.1.
|
862
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
|
827
863
|
</tr>
|
828
864
|
<tr>
|
829
865
|
<th>Library</th>
|
@@ -835,22 +871,22 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
835
871
|
</tr>
|
836
872
|
<tr>
|
837
873
|
<td>pairing_heap (PairingHeap)</td>
|
838
|
-
<td>1.
|
874
|
+
<td>1.318x slower</td>
|
839
875
|
</tr>
|
840
876
|
<tr>
|
841
877
|
<td>rb_heap</td>
|
842
|
-
<td>1.
|
878
|
+
<td>1.8x slower</td>
|
843
879
|
</tr>
|
844
880
|
<tr>
|
845
881
|
<td>lazy_priority_queue</td>
|
846
|
-
<td>2.
|
882
|
+
<td>2.519x slower</td>
|
847
883
|
</tr>
|
848
884
|
<tr>
|
849
885
|
<td>Fibonacci</td>
|
850
|
-
<td>2.
|
886
|
+
<td>2.989x slower</td>
|
851
887
|
</tr>
|
852
888
|
<tr>
|
853
|
-
<th colspan="4">ruby 3.1.
|
889
|
+
<th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
|
854
890
|
</tr>
|
855
891
|
<tr>
|
856
892
|
<th>Library</th>
|
@@ -862,22 +898,22 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
862
898
|
</tr>
|
863
899
|
<tr>
|
864
900
|
<td>pairing_heap (PairingHeap)</td>
|
865
|
-
<td>1.
|
901
|
+
<td>1.348x slower</td>
|
866
902
|
</tr>
|
867
903
|
<tr>
|
868
|
-
<td>
|
869
|
-
<td>1.
|
904
|
+
<td>rb_heap</td>
|
905
|
+
<td>1.490x slower</td>
|
870
906
|
</tr>
|
871
907
|
<tr>
|
872
|
-
<td>
|
873
|
-
<td>1.
|
908
|
+
<td>Fibonacci</td>
|
909
|
+
<td>1.792x slower</td>
|
874
910
|
</tr>
|
875
911
|
<tr>
|
876
912
|
<td>lazy_priority_queue</td>
|
877
|
-
<td>2.
|
913
|
+
<td>2.492x slower</td>
|
878
914
|
</tr>
|
879
915
|
<tr>
|
880
|
-
<th colspan="4">jruby 9.3.
|
916
|
+
<th colspan="4">jruby 9.3.7.0 (2.6.8) 2022-08-16 c79ef237e0 OpenJDK 64-Bit Server VM 17.0.2+8-86 on 17.0.2+8-86 +indy +jit [x86_64-darwin]</th>
|
881
917
|
</tr>
|
882
918
|
<tr>
|
883
919
|
<th>Library</th>
|
@@ -888,23 +924,23 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
888
924
|
<td>1</td>
|
889
925
|
</tr>
|
890
926
|
<tr>
|
891
|
-
<td>
|
892
|
-
<td>1.
|
927
|
+
<td>rb_heap</td>
|
928
|
+
<td>1.292x slower</td>
|
893
929
|
</tr>
|
894
930
|
<tr>
|
895
|
-
<td>
|
896
|
-
<td>1.
|
931
|
+
<td>pairing_heap (PairingHeap)</td>
|
932
|
+
<td>1.359x slower</td>
|
897
933
|
</tr>
|
898
934
|
<tr>
|
899
|
-
<td>
|
900
|
-
<td>1.
|
935
|
+
<td>Fibonacci</td>
|
936
|
+
<td>1.824x slower</td>
|
901
937
|
</tr>
|
902
938
|
<tr>
|
903
|
-
<td>
|
904
|
-
<td>2.
|
939
|
+
<td>lazy_priority_queue</td>
|
940
|
+
<td>2.115x slower</td>
|
905
941
|
</tr>
|
906
942
|
<tr>
|
907
|
-
<th colspan="4">
|
943
|
+
<th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
|
908
944
|
</tr>
|
909
945
|
<tr>
|
910
946
|
<th>Library</th>
|
@@ -916,19 +952,19 @@ Heaps that support change_priority operation use it. Heaps that do not support i
|
|
916
952
|
</tr>
|
917
953
|
<tr>
|
918
954
|
<td>pairing_heap (PairingHeap)</td>
|
919
|
-
<td>1.
|
955
|
+
<td>1.865x slower</td>
|
920
956
|
</tr>
|
921
957
|
<tr>
|
922
958
|
<td>rb_heap</td>
|
923
|
-
<td>1.
|
959
|
+
<td>1.915x slower</td>
|
924
960
|
</tr>
|
925
961
|
<tr>
|
926
|
-
<td>
|
927
|
-
<td>
|
962
|
+
<td>lazy_priority_queue</td>
|
963
|
+
<td>8.791x slower</td>
|
928
964
|
</tr>
|
929
965
|
<tr>
|
930
|
-
<td>
|
931
|
-
<td>
|
966
|
+
<td>Fibonacci</td>
|
967
|
+
<td>26.044x slower</td>
|
932
968
|
</tr>
|
933
969
|
</table>
|
934
970
|
|