pairing_heap 0.3.0 → 1.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.
data/README.md CHANGED
@@ -2,7 +2,9 @@
2
2
 
3
3
  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
4
 
5
- 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.
5
+ PairingHeap is currently being used as the priority queue data structure in [RGL](https://github.com/monora/rgl/).
6
+
7
+ 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
8
 
7
9
  ## Installation
8
10
 
@@ -104,7 +106,7 @@ This API is a drop-in replacement of [lazy_priority_queue](https://github.com/ma
104
106
  ## Benchmarks
105
107
  I picked the three fastest pure Ruby priority queue implementations I was aware of for the comparison:
106
108
 
107
- * [lazy_priority_queue](https://github.com/matiasbattocchia/lazy_priority_queue) that uses a lazy binomial heap. This is probably the most popular option, used for example in [RGL](https://github.com/monora/rgl/)
109
+ * [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
110
  * 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
111
  * [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
112
 
@@ -114,7 +116,7 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
114
116
  > 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
117
  <table>
116
118
  <tr>
117
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-darwin21]</th>
119
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
118
120
  </tr>
119
121
  <tr>
120
122
  <th>Library</th>
@@ -124,36 +126,36 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
124
126
  </tr>
125
127
  <tr>
126
128
  <td>pairing_heap (SimplePairingHeap)</td>
127
- <td>18</td>
128
- <td>60.232046</td>
129
- <td>0.299</td>
129
+ <td>23</td>
130
+ <td>62.014773</td>
131
+ <td>0.371</td>
130
132
  </tr>
131
133
  <tr>
132
134
  <td>pairing_heap (PairingHeap)</td>
133
- <td>15</td>
134
- <td>63.978031</td>
135
- <td>0.234(1.27x slower)</td>
135
+ <td>16</td>
136
+ <td>63.135240</td>
137
+ <td>0.253(1.46x slower)</td>
136
138
  </tr>
137
139
  <tr>
138
- <td>lazy_priority_queue</td>
139
- <td>9</td>
140
- <td>60.031283</td>
141
- <td>0.150(1.99x slower)</td>
140
+ <td>rb_heap</td>
141
+ <td>14</td>
142
+ <td>61.123304</td>
143
+ <td>0.229(1.62x slower)</td>
142
144
  </tr>
143
145
  <tr>
144
- <td>rb_heap</td>
145
- <td>9</td>
146
- <td>60.497355</td>
147
- <td>0.149(2.01x slower)</td>
146
+ <td>lazy_priority_queue</td>
147
+ <td>10</td>
148
+ <td>66.208647</td>
149
+ <td>0.151(2.46x slower)</td>
148
150
  </tr>
149
151
  <tr>
150
152
  <td>Fibonacci</td>
151
153
  <td>8</td>
152
- <td>66.866055</td>
153
- <td>0.120(2.50x slower)</td>
154
+ <td>66.353147</td>
155
+ <td>0.121(3.08x slower)</td>
154
156
  </tr>
155
157
  <tr>
156
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) +YJIT [x86_64-darwin21]</th>
158
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
157
159
  </tr>
158
160
  <tr>
159
161
  <th>Library</th>
@@ -163,36 +165,36 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
163
165
  </tr>
164
166
  <tr>
165
167
  <td>pairing_heap (SimplePairingHeap)</td>
166
- <td>22</td>
167
- <td>62.866807</td>
168
- <td>0.350</td>
168
+ <td>25</td>
169
+ <td>60.423579</td>
170
+ <td>0.414</td>
171
+ </tr>
172
+ <tr>
173
+ <td>rb_heap</td>
174
+ <td>19</td>
175
+ <td>60.869907</td>
176
+ <td>0.312(1.33x slower)</td>
169
177
  </tr>
170
178
  <tr>
171
179
  <td>pairing_heap (PairingHeap)</td>
172
- <td>16</td>
173
- <td>61.358679</td>
174
- <td>0.261(1.34x slower)</td>
180
+ <td>17</td>
181
+ <td>61.389127</td>
182
+ <td>0.277(1.49x slower)</td>
175
183
  </tr>
176
184
  <tr>
177
185
  <td>Fibonacci</td>
178
186
  <td>14</td>
179
- <td>64.394112</td>
180
- <td>0.217(1.61x slower)</td>
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>
187
+ <td>64.417807</td>
188
+ <td>0.217(1.90x slower)</td>
187
189
  </tr>
188
190
  <tr>
189
191
  <td>lazy_priority_queue</td>
190
192
  <td>11</td>
191
- <td>65.568648</td>
192
- <td>0.168(2.09x slower)</td>
193
+ <td>63.151856</td>
194
+ <td>0.174(2.38x slower)</td>
193
195
  </tr>
194
196
  <tr>
195
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +jit [darwin-x86_64]</th>
197
+ <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
198
  </tr>
197
199
  <tr>
198
200
  <th>Library</th>
@@ -202,36 +204,36 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
202
204
  </tr>
203
205
  <tr>
204
206
  <td>pairing_heap (SimplePairingHeap)</td>
205
- <td>21</td>
206
- <td>60.357577s</td>
207
- <td>0.348</td>
207
+ <td>47</td>
208
+ <td>60.391633</td>
209
+ <td>0.778</td>
208
210
  </tr>
209
211
  <tr>
210
- <td>pairing_heap (PairingHeap)</td>
211
- <td>15</td>
212
- <td>60.417252</td>
213
- <td>0.248(1.40x slower)</td>
212
+ <td>rb_heap</td>
213
+ <td>34</td>
214
+ <td>60.878639</td>
215
+ <td>0.559(1.39x slower)</td>
214
216
  </tr>
215
217
  <tr>
216
- <td>lazy_priority_queue</td>
217
- <td>14</td>
218
- <td>61.022450</td>
219
- <td>0.229(1.52x slower)</td>
218
+ <td>pairing_heap (PairingHeap)</td>
219
+ <td>32</td>
220
+ <td>61.211985</td>
221
+ <td>0.523(1.49x slower)</td>
220
222
  </tr>
221
223
  <tr>
222
- <td>rb_heap</td>
223
- <td>13</td>
224
- <td>63.661862</td>
225
- <td>0.204(1.70x slower)</td>
224
+ <td>Fibonacci</td>
225
+ <td>23</td>
226
+ <td>60.297670</td>
227
+ <td>0.382(2.04x slower)</td>
226
228
  </tr>
227
229
  <tr>
228
- <td>Fibonacci</td>
229
- <td>8</td>
230
- <td>62.643449</td>
231
- <td>0.128(2.72x slower)</td>
230
+ <td>lazy_priority_queue</td>
231
+ <td>23</td>
232
+ <td>61.973538</td>
233
+ <td>0.371(2.10x slower)</td>
232
234
  </tr>
233
235
  <tr>
234
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +indy +jit [darwin-x86_64]</th>
236
+ <th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
235
237
  </tr>
236
238
  <tr>
237
239
  <th>Library</th>
@@ -241,33 +243,33 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
241
243
  </tr>
242
244
  <tr>
243
245
  <td>pairing_heap (SimplePairingHeap)</td>
244
- <td>43</td>
245
- <td>60.472129</td>
246
- <td>0.711</td>
246
+ <td>206</td>
247
+ <td>60.191686</td>
248
+ <td>3.433</td>
247
249
  </tr>
248
250
  <tr>
249
- <td>pairing_heap (PairingHeap)</td>
250
- <td>30</td>
251
- <td>60.359748</td>
252
- <td>0.497(1.43x slower)</td>
251
+ <td>rb_heap</td>
252
+ <td>97</td>
253
+ <td>60.134011</td>
254
+ <td>1.614(1.93x slower)</td>
253
255
  </tr>
254
256
  <tr>
255
- <td>Fibonacci</td>
256
- <td>25</td>
257
- <td>62.084250</td>
258
- <td>0.403(1.77x slower)</td>
257
+ <td>pairing_heap (PairingHeap)</td>
258
+ <td>85</td>
259
+ <td>60.193608s</td>
260
+ <td>1.434(2.40x slower)</td>
259
261
  </tr>
260
262
  <tr>
261
- <td>rb_heap</td>
262
- <td>23</td>
263
- <td>62.419893</td>
264
- <td>0.369(1.93x slower)</td>
263
+ <td>lazy_priority_queue</td>
264
+ <td>19</td>
265
+ <td>63.212429</td>
266
+ <td>0.301(11.45x slower)</td>
265
267
  </tr>
266
268
  <tr>
267
- <td>lazy_priority_queue</td>
268
- <td>22</td>
269
- <td>60.947299</td>
270
- <td>0.361(1.97x slower)</td>
269
+ <td>Fibonacci</td>
270
+ <td>2</td>
271
+ <td>83.508571</td>
272
+ <td>0.024(143.70x slower)</td>
271
273
  </tr>
272
274
  </table>
273
275
 
@@ -275,7 +277,7 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba
275
277
  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
278
  <table>
277
279
  <tr>
278
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-darwin21]</th>
280
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
279
281
  </tr>
280
282
  <tr>
281
283
  <th>Library</th>
@@ -285,24 +287,24 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr
285
287
  </tr>
286
288
  <tr>
287
289
  <td>pairing_heap</td>
288
- <td>14</td>
289
- <td>63.536300</td>
290
- <td>0.220</td>
290
+ <td>15</td>
291
+ <td>62.946988</td>
292
+ <td>0.238</td>
291
293
  </tr>
292
294
  <tr>
293
295
  <td>lazy_priority_queue</td>
294
296
  <td>9</td>
295
- <td>63.319474s</td>
296
- <td>0.142(1.55x slower)</td>
297
+ <td>61.876691</td>
298
+ <td>0.145(1.64x slower)</td>
297
299
  </tr>
298
300
  <tr>
299
301
  <td>Fibonacci</td>
300
302
  <td>8</td>
301
- <td>67.385714</td>
302
- <td>0.119(1.86x slower)</td>
303
+ <td>67.809982</td>
304
+ <td>0.118(2.02x slower)</td>
303
305
  </tr>
304
306
  <tr>
305
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) +YJIT [x86_64-darwin21]</th>
307
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
306
308
  </tr>
307
309
  <tr>
308
310
  <th>Library</th>
@@ -312,24 +314,24 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr
312
314
  </tr>
313
315
  <tr>
314
316
  <td>pairing_heap</td>
315
- <td>15</td>
316
- <td>62.243080</td>
317
- <td>0.241</td>
317
+ <td>16</td>
318
+ <td>62.576693</td>
319
+ <td>0.256</td>
318
320
  </tr>
319
321
  <tr>
320
322
  <td>Fibonacci</td>
321
323
  <td>13</td>
322
- <td>63.030390</td>
323
- <td>0.206(1.17x slower)</td>
324
+ <td>63.164614</td>
325
+ <td>0.206(1.24x slower)</td>
324
326
  </tr>
325
327
  <tr>
326
328
  <td>lazy_priority_queue</td>
327
329
  <td>10</td>
328
- <td>64.865853</td>
329
- <td>0.154(1.56x slower)</td>
330
+ <td>63.172995s</td>
331
+ <td>0.158(1.62x slower)</td>
330
332
  </tr>
331
333
  <tr>
332
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +jit [darwin-x86_64]</th>
334
+ <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
335
  </tr>
334
336
  <tr>
335
337
  <th>Library</th>
@@ -339,24 +341,24 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr
339
341
  </tr>
340
342
  <tr>
341
343
  <td>pairing_heap</td>
342
- <td>15</td>
343
- <td>61.540851</td>
344
- <td>0.244</td>
344
+ <td>28</td>
345
+ <td>60.280368</td>
346
+ <td>0.465</td>
345
347
  </tr>
346
348
  <tr>
347
- <td>lazy_priority_queue</td>
348
- <td>14</td>
349
- <td>61.471507</td>
350
- <td>0.228(1.07x slower)</td>
349
+ <td>Fibonacci</td>
350
+ <td>22</td>
351
+ <td>61.405561</td>
352
+ <td>0.465(1.30x slower)</td>
351
353
  </tr>
352
354
  <tr>
353
- <td>Fibonacci</td>
354
- <td>9</td>
355
- <td>67.393730</td>
356
- <td>0.134(1.83x slower)</td>
355
+ <td>lazy_priority_queue</td>
356
+ <td>20</td>
357
+ <td>60.397535</td>
358
+ <td>0.331(1.40x slower)</td>
357
359
  </tr>
358
360
  <tr>
359
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +indy +jit [darwin-x86_64]</th>
361
+ <th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
360
362
  </tr>
361
363
  <tr>
362
364
  <th>Library</th>
@@ -366,48 +368,58 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr
366
368
  </tr>
367
369
  <tr>
368
370
  <td>pairing_heap</td>
369
- <td>27</td>
370
- <td>61.322001</td>
371
- <td>0.440</td>
371
+ <td>70</td>
372
+ <td>60.663184</td>
373
+ <td>1.160</td>
372
374
  </tr>
373
375
  <tr>
374
- <td>Fibonacci</td>
375
- <td>21</td>
376
- <td>60.334636</td>
377
- <td>0.349(1.26x slower)</td>
376
+ <td>lazy_priority_queue</td>
377
+ <td>23</td>
378
+ <td>60.474587</td>
379
+ <td>0.382(3.04x slower)</td>
378
380
  </tr>
379
381
  <tr>
380
- <td>lazy_priority_queue</td>
381
- <td>20</td>
382
- <td>61.471507</td>
383
- <td>0.327(1.35x slower)</td>
382
+ <td>Fibonacci</td>
383
+ <td>2</td>
384
+ <td>74.873854</td>
385
+ <td>0.027(43.44x slower)</td>
384
386
  </tr>
385
387
  </table>
386
388
 
387
- ### Stress test with changing priority(N = 10) [source code](./test/performance_with_change_priority.rb)
388
- A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0 pops, following 9 pushes/9 change_priorities/1 pop, and so on till 0 pushes/0 change_priorities/10 pops.
389
+ ### Stress test with changing priority or push/pop(test ignored in summary) [source code](./test/performance_pop_versus_change_priority.rb)
390
+ Start with 500 pushes, then:
391
+ * If queue supports changing priority 500 change_priority calls, then 500 pops
392
+ * If does not support changing priority 500 push calls, then 1000 pops
389
393
  <table>
390
394
  <tr>
391
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-darwin21]</th>
395
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
392
396
  </tr>
393
397
  <tr>
394
398
  <th>Library</th>
395
399
  <th>Iterations per second</th>
396
400
  </tr>
397
401
  <tr>
398
- <td>pairing_heap</td>
399
- <td>5914.3</td>
402
+ <td>pairing_heap (PairingHeap)</td>
403
+ <td>436.4</td>
400
404
  </tr>
401
405
  <tr>
402
406
  <td>lazy_priority_queue</td>
403
- <td>4293.5(1.38x slower)</td>
407
+ <td>380.2(1.94x slower)</td>
408
+ </tr>
409
+ <tr>
410
+ <td>pairing_heap (SimplePairingHeap)</td>
411
+ <td>339.9.02(2.17x slower)</td>
404
412
  </tr>
405
413
  <tr>
406
414
  <td>Fibonacci</td>
407
- <td>3755.2(1.57x slower)</td>
415
+ <td>313.9(2.35x slower)</td>
416
+ </tr>
417
+ <tr>
418
+ <td>rb_heap</td>
419
+ <td>194.7(3.78 slower)</td>
408
420
  </tr>
409
421
  <tr>
410
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) +YJIT [x86_64-darwin21]</th>
422
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
411
423
  </tr>
412
424
  <tr>
413
425
  <th>Library</th>
@@ -415,60 +427,84 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
415
427
  </tr>
416
428
  <tr>
417
429
  <td>pairing_heap</td>
418
- <td>7082.7</td>
430
+ <td>854.6</td>
419
431
  </tr>
420
432
  <tr>
421
433
  <td>Fibonacci</td>
422
- <td>6687.1(1.06x slower)</td>
434
+ <td>651.3(1.31x slower)</td>
423
435
  </tr>
424
436
  <tr>
425
437
  <td>lazy_priority_queue</td>
426
- <td>5006.4(1.41x slower)</td>
438
+ <td>453.6(1.88x slower)</td>
427
439
  </tr>
428
440
  <tr>
429
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +jit [darwin-x86_64]</th>
441
+ <td>pairing_heap(SimplePairingHeap)</td>
442
+ <td>390.9(2.19x slower)</td>
443
+ </tr>
444
+ <tr>
445
+ <td>rb_heap</td>
446
+ <td>268.8(3.18x slower)</td>
447
+ </tr>
448
+ <tr>
449
+ <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
450
  </tr>
431
451
  <tr>
432
452
  <th>Library</th>
433
453
  <th>Iterations per second</th>
434
454
  </tr>
435
455
  <tr>
436
- <td>pairing_heap</td>
437
- <td>6861.6</td>
456
+ <td>pairing_heap(PairingHeap)</td>
457
+ <td>1591</td>
458
+ </tr>
459
+ <tr>
460
+ <td>Fibonacci</td>
461
+ <td>1092(1.46x slower)</td>
438
462
  </tr>
439
463
  <tr>
440
464
  <td>lazy_priority_queue</td>
441
- <td>6446.4(1.06x slower)</td>
465
+ <td>986(1.61x slower)</td>
442
466
  </tr>
443
467
  <tr>
444
- <td>Fibonacci</td>
445
- <td>4365.4(1.57x slower)</td>
468
+ <td>pairing_heap(SimplePairingHeap)</td>
469
+ <td>562(2.37x slower)</td>
470
+ </tr>
471
+ <tr>
472
+ <td>rb_heap</td>
473
+ <td>623(2.55x slower)</td>
446
474
  </tr>
447
475
  <tr>
448
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +indy +jit [darwin-x86_64]</th>
476
+ <th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
449
477
  </tr>
450
478
  <tr>
451
479
  <th>Library</th>
452
480
  <th>Iterations per second</th>
453
481
  </tr>
454
482
  <tr>
455
- <td>pairing_heap</td>
456
- <td>14032</td>
483
+ <td>pairing_heap(PairingHeap)</td>
484
+ <td>7404</td>
485
+ </tr>
486
+ <tr>
487
+ <td>pairing_heap(SimplePairingHeap)</td>
488
+ <td>5104(1.45x slower)</td>
489
+ </tr>
490
+ <tr>
491
+ <td>rb_heap</td>
492
+ <td>1575(4.70x slower)</td>
457
493
  </tr>
458
494
  <tr>
459
495
  <td>Fibonacci</td>
460
- <td>12841(1.09x slower)</td>
496
+ <td>1258(5.88x slower)</td>
461
497
  </tr>
462
498
  <tr>
463
499
  <td>lazy_priority_queue</td>
464
- <td>10404(1.35x slower)</td>
500
+ <td>1004(7.38x slower)</td>
465
501
  </tr>
466
502
  </table>
467
503
 
468
504
  ### Dijkstra's algorithm with RGL [source code](./test/performance_rgl.rb)
469
505
  <table>
470
506
  <tr>
471
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-darwin21]</th>
507
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
472
508
  </tr>
473
509
  <tr>
474
510
  <th>Library</th>
@@ -479,23 +515,23 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
479
515
  <tr>
480
516
  <td>pairing_heap</td>
481
517
  <td>9</td>
482
- <td>64.505899</td>
483
- <td>0.140</td>
518
+ <td>61.469343</td>
519
+ <td>0.116</td>
484
520
  </tr>
485
521
  <tr>
486
522
  <td>lazy_priority_queue</td>
487
523
  <td>8</td>
488
- <td>63.970577</td>
489
- <td>0.125(1.12x slower)</td>
524
+ <td>64.312672</td>
525
+ <td>0.125(1.18x slower)</td>
490
526
  </tr>
491
527
  <tr>
492
528
  <td>Fibonacci</td>
493
529
  <td>7</td>
494
- <td>62.573724</td>
495
- <td>0.112(1.25x slower)</td>
530
+ <td>60.555716</td>
531
+ <td>0.116(1.27x slower)</td>
496
532
  </tr>
497
533
  <tr>
498
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) +YJIT [x86_64-darwin21]</th>
534
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
499
535
  </tr>
500
536
  <tr>
501
537
  <th>Library</th>
@@ -505,24 +541,24 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
505
541
  </tr>
506
542
  <tr>
507
543
  <td>pairing_heap</td>
508
- <td>9</td>
509
- <td>63.567801</td>
510
- <td>0.142</td>
544
+ <td>10</td>
545
+ <td>65.160945s</td>
546
+ <td>0.154</td>
511
547
  </tr>
512
548
  <tr>
513
549
  <td>Fibonacci</td>
514
550
  <td>9</td>
515
- <td>64.575079</td>
516
- <td>0.140(1.02x slower)</td>
551
+ <td>61.950587</td>
552
+ <td>0.145(1.06x slower)</td>
517
553
  </tr>
518
554
  <tr>
519
555
  <td>lazy_priority_queue</td>
520
- <td>8</td>
521
- <td>60.123700</td>
522
- <td>0.133(1.06x slower)</td>
556
+ <td>9</td>
557
+ <td>66.592123</td>
558
+ <td>0.135(1.14x slower)</td>
523
559
  </tr>
524
560
  <tr>
525
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +jit [darwin-x86_64]</th>
561
+ <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
562
  </tr>
527
563
  <tr>
528
564
  <th>Library</th>
@@ -531,25 +567,25 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
531
567
  <th>Iterations per second</th>
532
568
  </tr>
533
569
  <tr>
534
- <td>pairing_heap</td>
535
- <td>14</td>
536
- <td>64.124373</td>
537
- <td>0.218</td>
570
+ <td>lazy_priority_queue</td>
571
+ <td>20</td>
572
+ <td>61.149944</td>
573
+ <td>0.328</td>
538
574
  </tr>
539
575
  <tr>
540
- <td>lazy_priority_queue</td>
541
- <td>13</td>
542
- <td>61.147807</td>
543
- <td>0.213(1.03x slower)</td>
576
+ <td>pairing_heap</td>
577
+ <td>20</td>
578
+ <td>61.210225s</td>
579
+ <td>0.328</td>
544
580
  </tr>
545
581
  <tr>
546
582
  <td>Fibonacci</td>
547
- <td>10</td>
548
- <td>64.250067</td>
549
- <td>0.156(1.40x slower)</td>
583
+ <td>18</td>
584
+ <td>62.330882</td>
585
+ <td>0.292(1.12x slower)</td>
550
586
  </tr>
551
587
  <tr>
552
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +indy +jit [darwin-x86_64]</th>
588
+ <th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
553
589
  </tr>
554
590
  <tr>
555
591
  <th>Library</th>
@@ -559,21 +595,21 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
559
595
  </tr>
560
596
  <tr>
561
597
  <td>pairing_heap</td>
562
- <td>22</td>
563
- <td>61.450341</td>
564
- <td>0.361</td>
598
+ <td>59</td>
599
+ <td>60.053843</td>
600
+ <td>0.991</td>
565
601
  </tr>
566
602
  <tr>
567
- <td>Fibonacci</td>
568
- <td>18</td>
569
- <td>61.618204</td>
570
- <td>0.296(1.22x slower)</td>
603
+ <td>lazy_priority_queue</td>
604
+ <td>34</td>
605
+ <td>60.586461</td>
606
+ <td>0.563(1.76x slower)</td>
571
607
  </tr>
572
608
  <tr>
573
- <td>lazy_priority_queue</td>
574
- <td>17</td>
575
- <td>60.156184</td>
576
- <td>0.283(1.27x slower)</td>
609
+ <td>Fibonacci</td>
610
+ <td>31</td>
611
+ <td>60.633711</td>
612
+ <td>0.520(1.90x slower)</td>
577
613
  </tr>
578
614
  </table>
579
615
 
@@ -581,7 +617,7 @@ A stress test of 165 operations: starting with 10 pushes/10 change_priorities/0
581
617
  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
618
  <table>
583
619
  <tr>
584
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-darwin21]</th>
620
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
585
621
  </tr>
586
622
  <tr>
587
623
  <th>Library</th>
@@ -591,36 +627,36 @@ Heaps that support change_priority operation use it. Heaps that do not support i
591
627
  </tr>
592
628
  <tr>
593
629
  <td>pairing_heap (SimplePairingHeap)</td>
594
- <td>25</td>
595
- <td>61.386477</td>
596
- <td>0.407</td>
630
+ <td>28</td>
631
+ <td>62.100299</td>
632
+ <td>0.451</td>
597
633
  </tr>
598
634
  <tr>
599
635
  <td>pairing_heap (PairingHeap)</td>
600
- <td>22</td>
601
- <td>62.044470</td>
602
- <td>0.355(1.15x slower)</td>
636
+ <td>23</td>
637
+ <td>60.633153</td>
638
+ <td>0.380(1.19x slower)</td>
603
639
  </tr>
604
640
  <tr>
605
641
  <td>rb_heap</td>
606
- <td>13</td>
607
- <td>60.717112</td>
608
- <td>0.214(1.90x slower)</td>
642
+ <td>14</td>
643
+ <td>62.019763</td>
644
+ <td>0.226(2.00x slower)</td>
609
645
  </tr>
610
646
  <tr>
611
647
  <td>lazy_priority_queue</td>
612
- <td>10</td>
613
- <td>61.730614</td>
614
- <td>0.162(2.51x slower)</td>
648
+ <td>11</td>
649
+ <td>63.105064s</td>
650
+ <td>0.174(2.58x slower)</td>
615
651
  </tr>
616
652
  <tr>
617
653
  <td>Fibonacci</td>
618
654
  <td>10</td>
619
- <td>65.899982</td>
620
- <td>0.152(2.68x slower)</td>
655
+ <td>64.407187</td>
656
+ <td>0.155(2.90x slower)</td>
621
657
  </tr>
622
658
  <tr>
623
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) +YJIT [x86_64-darwin21]</th>
659
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
624
660
  </tr>
625
661
  <tr>
626
662
  <th>Library</th>
@@ -630,36 +666,36 @@ Heaps that support change_priority operation use it. Heaps that do not support i
630
666
  </tr>
631
667
  <tr>
632
668
  <td>pairing_heap (SimplePairingHeap)</td>
633
- <td>29</td>
634
- <td>61.656995</td>
635
- <td>0.471</td>
669
+ <td>32</td>
670
+ <td>61.289321</td>
671
+ <td>0.522</td>
636
672
  </tr>
637
673
  <tr>
638
674
  <td>pairing_heap (PairingHeap)</td>
639
- <td>24</td>
640
- <td>61.813482</td>
641
- <td>0.389(1.21x slower)</td>
675
+ <td>26</td>
676
+ <td>60.657625</td>
677
+ <td>0.429(1.22x slower)</td>
642
678
  </tr>
643
679
  <tr>
644
680
  <td>rb_heap</td>
645
681
  <td>19</td>
646
- <td>62.191040</td>
647
- <td>0.306(1.54x slower)</td>
682
+ <td>60.710888s</td>
683
+ <td>0.313(1.67x slower)</td>
648
684
  </tr>
649
685
  <tr>
650
686
  <td>Fibonacci</td>
651
- <td>18</td>
652
- <td>60.062072</td>
653
- <td>0.300(1.57x slower)</td>
687
+ <td>19</td>
688
+ <td>61.471203</td>
689
+ <td>0.310(1.69x slower)</td>
654
690
  </tr>
655
691
  <tr>
656
692
  <td>lazy_priority_queue</td>
657
693
  <td>12</td>
658
- <td>60.860292</td>
659
- <td>0.197(2.38x slower)</td>
694
+ <td>60.125779</td>
695
+ <td>0.200(2.61x slower)</td>
660
696
  </tr>
661
697
  <tr>
662
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +jit [darwin-x86_64]</th>
698
+ <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
699
  </tr>
664
700
  <tr>
665
701
  <th>Library</th>
@@ -669,36 +705,36 @@ Heaps that support change_priority operation use it. Heaps that do not support i
669
705
  </tr>
670
706
  <tr>
671
707
  <td>pairing_heap (SimplePairingHeap)</td>
672
- <td>24</td>
673
- <td>61.972936</td>
674
- <td>0.387</td>
708
+ <td>46</td>
709
+ <td>61.226924</td>
710
+ <td>0.753</td>
675
711
  </tr>
676
712
  <tr>
677
- <td>pairing_heap (PairingHeap)</td>
678
- <td>20</td>
679
- <td>62.178839</td>
680
- <td>0.322(1.20x slower)</td>
713
+ <td>rb_heap</td>
714
+ <td>38</td>
715
+ <td>60.563995</td>
716
+ <td>0.628(1.20x slower)</td>
681
717
  </tr>
682
718
  <tr>
683
- <td>lazy_priority_queue</td>
684
- <td>14</td>
685
- <td>61.540058s</td>
686
- <td>0.228(1.70x slower)</td>
719
+ <td>pairing_heap (PairingHeap)</td>
720
+ <td>37</td>
721
+ <td>60.928350</td>
722
+ <td>0.608(1.24x slower)</td>
687
723
  </tr>
688
724
  <tr>
689
- <td>rb_heap</td>
690
- <td>14</td>
691
- <td>62.125831</td>
692
- <td>0.225(1.72x slower)</td>
725
+ <td>Fibonacci</td>
726
+ <td>28</td>
727
+ <td>61.136970</td>
728
+ <td>0.461(1.63x slower)</td>
693
729
  </tr>
694
730
  <tr>
695
- <td>Fibonacci</td>
696
- <td>10</td>
697
- <td>62.319669</td>
698
- <td>0.155(2.41x slower)</td>
731
+ <td>lazy_priority_queue</td>
732
+ <td>22</td>
733
+ <td>62.214796</td>
734
+ <td>0.354(2.13x slower)</td>
699
735
  </tr>
700
736
  <tr>
701
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +indy +jit [darwin-x86_64]</th>
737
+ <th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
702
738
  </tr>
703
739
  <tr>
704
740
  <th>Library</th>
@@ -708,33 +744,33 @@ Heaps that support change_priority operation use it. Heaps that do not support i
708
744
  </tr>
709
745
  <tr>
710
746
  <td>pairing_heap (SimplePairingHeap)</td>
711
- <td>47</td>
712
- <td>61.192519</td>
713
- <td>0.770</td>
747
+ <td>176</td>
748
+ <td>60.029817</td>
749
+ <td>3.006</td>
714
750
  </tr>
715
751
  <tr>
716
- <td>rb_heap</td>
717
- <td>39</td>
718
- <td>61.028398</td>
719
- <td>0.639(1.20x slower)</td>
752
+ <td>pairing_heap (PairingHeap)</td>
753
+ <td>124</td>
754
+ <td>60.366607</td>
755
+ <td>2.078(1.45x slower)</td>
720
756
  </tr>
721
757
  <tr>
722
- <td>pairing_heap (PairingHeap)</td>
723
- <td>36</td>
724
- <td>60.035760</td>
725
- <td>0.601(1.28x slower)</td>
758
+ <td>rb_heap</td>
759
+ <td>95</td>
760
+ <td>60.021043</td>
761
+ <td>1.585(1.90x slower)</td>
726
762
  </tr>
727
763
  <tr>
728
764
  <td>Fibonacci</td>
729
- <td>28</td>
730
- <td>61.599202</td>
731
- <td>0.456(1.69x slower)</td>
765
+ <td>38</td>
766
+ <td>60.020976</td>
767
+ <td>0.636(4.72x slower)</td>
732
768
  </tr>
733
769
  <tr>
734
770
  <td>lazy_priority_queue</td>
735
- <td>22</td>
736
- <td>60.540367</td>
737
- <td>0.364(2.12x slower)</td>
771
+ <td>27</td>
772
+ <td>61.349925</td>
773
+ <td>0.445(6.75x slower)</td>
738
774
  </tr>
739
775
  </table>
740
776
 
@@ -742,7 +778,7 @@ Heaps that support change_priority operation use it. Heaps that do not support i
742
778
  #### Change priority required
743
779
  <table>
744
780
  <tr>
745
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-darwin21]</th>
781
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
746
782
  </tr>
747
783
  <tr>
748
784
  <th>Library</th>
@@ -754,14 +790,14 @@ Heaps that support change_priority operation use it. Heaps that do not support i
754
790
  </tr>
755
791
  <tr>
756
792
  <td>lazy_priority_queue</td>
757
- <td>1.523x slower</td>
793
+ <td>1.688x slower</td>
758
794
  </tr>
759
795
  <tr>
760
796
  <td>Fibonacci</td>
761
- <td>1.751x slower</td>
797
+ <td>1.987x slower</td>
762
798
  </tr>
763
799
  <tr>
764
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) +YJIT [x86_64-darwin21]</th>
800
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
765
801
  </tr>
766
802
  <tr>
767
803
  <th>Library</th>
@@ -773,14 +809,14 @@ Heaps that support change_priority operation use it. Heaps that do not support i
773
809
  </tr>
774
810
  <tr>
775
811
  <td>Fibonacci</td>
776
- <td>1.146x slower</td>
812
+ <td>1.256x slower</td>
777
813
  </tr>
778
814
  <tr>
779
815
  <td>lazy_priority_queue</td>
780
- <td>1.482x slower</td>
816
+ <td>1.648x slower</td>
781
817
  </tr>
782
818
  <tr>
783
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +jit [darwin-x86_64]</th>
819
+ <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
820
  </tr>
785
821
  <tr>
786
822
  <th>Library</th>
@@ -791,16 +827,15 @@ Heaps that support change_priority operation use it. Heaps that do not support i
791
827
  <td>1</td>
792
828
  </tr>
793
829
  <tr>
794
- <td>lazy_priority_queue</td>
795
- <td>1.153x slower</td>
796
-
830
+ <td>Fibonacci</td>
831
+ <td>1.327x slower</td>
797
832
  </tr>
798
833
  <tr>
799
- <td>Fibonacci</td>
800
- <td>1.793x slower</td>
834
+ <td>lazy_priority_queue</td>
835
+ <td>1.383x slower</td>
801
836
  </tr>
802
837
  <tr>
803
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +indy +jit [darwin-x86_64]</th>
838
+ <th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
804
839
  </tr>
805
840
  <tr>
806
841
  <th>Library</th>
@@ -811,19 +846,19 @@ Heaps that support change_priority operation use it. Heaps that do not support i
811
846
  <td>1</td>
812
847
  </tr>
813
848
  <tr>
814
- <td>Fibonacci</td>
815
- <td>1.222x slower</td>
849
+ <td>lazy_priority_queue</td>
850
+ <td>3.878x slower</td>
816
851
  </tr>
817
852
  <tr>
818
- <td>lazy_priority_queue</td>
819
- <td>1.394x slower</td>
853
+ <td>Fibonacci</td>
854
+ <td>9.889x slower</td>
820
855
  </tr>
821
856
  </table>
822
857
 
823
858
  #### Change priority not required
824
859
  <table>
825
860
  <tr>
826
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-darwin21]</th>
861
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
827
862
  </tr>
828
863
  <tr>
829
864
  <th>Library</th>
@@ -835,22 +870,22 @@ Heaps that support change_priority operation use it. Heaps that do not support i
835
870
  </tr>
836
871
  <tr>
837
872
  <td>pairing_heap (PairingHeap)</td>
838
- <td>1.209x slower</td>
873
+ <td>1.318x slower</td>
839
874
  </tr>
840
875
  <tr>
841
876
  <td>rb_heap</td>
842
- <td>1.954x slower</td>
877
+ <td>1.8x slower</td>
843
878
  </tr>
844
879
  <tr>
845
880
  <td>lazy_priority_queue</td>
846
- <td>2.235x slower</td>
881
+ <td>2.519x slower</td>
847
882
  </tr>
848
883
  <tr>
849
884
  <td>Fibonacci</td>
850
- <td>2.588x slower</td>
885
+ <td>2.989x slower</td>
851
886
  </tr>
852
887
  <tr>
853
- <th colspan="4">ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) +YJIT [x86_64-darwin21]</th>
888
+ <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
854
889
  </tr>
855
890
  <tr>
856
891
  <th>Library</th>
@@ -862,22 +897,22 @@ Heaps that support change_priority operation use it. Heaps that do not support i
862
897
  </tr>
863
898
  <tr>
864
899
  <td>pairing_heap (PairingHeap)</td>
865
- <td>1.273x slower</td>
900
+ <td>1.348x slower</td>
866
901
  </tr>
867
902
  <tr>
868
- <td>Fibonacci</td>
869
- <td>1.590x slower</td>
903
+ <td>rb_heap</td>
904
+ <td>1.490x slower</td>
870
905
  </tr>
871
906
  <tr>
872
- <td>rb_heap</td>
873
- <td>1.666x slower</td>
907
+ <td>Fibonacci</td>
908
+ <td>1.792x slower</td>
874
909
  </tr>
875
910
  <tr>
876
911
  <td>lazy_priority_queue</td>
877
- <td>2.230x slower</td>
912
+ <td>2.492x slower</td>
878
913
  </tr>
879
914
  <tr>
880
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +jit [darwin-x86_64]</th>
915
+ <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
916
  </tr>
882
917
  <tr>
883
918
  <th>Library</th>
@@ -888,23 +923,23 @@ Heaps that support change_priority operation use it. Heaps that do not support i
888
923
  <td>1</td>
889
924
  </tr>
890
925
  <tr>
891
- <td>pairing_heap (PairingHeap)</td>
892
- <td>1.296x slower</td>
926
+ <td>rb_heap</td>
927
+ <td>1.292x slower</td>
893
928
  </tr>
894
929
  <tr>
895
- <td>lazy_priority_queue</td>
896
- <td>1.607x slower</td>
930
+ <td>pairing_heap (PairingHeap)</td>
931
+ <td>1.359x slower</td>
897
932
  </tr>
898
933
  <tr>
899
- <td>rb_heap</td>
900
- <td>1.710x slower</td>
934
+ <td>lazy_priority_queue</td>
935
+ <td>2.115x slower</td>
901
936
  </tr>
902
937
  <tr>
903
938
  <td>Fibonacci</td>
904
- <td>2.452x slower</td>
939
+ <td>1.824x slower</td>
905
940
  </tr>
906
941
  <tr>
907
- <th colspan="4">jruby 9.3.3.0 (2.6.8) 2022-01-19 b26de1f5c5 OpenJDK 64-Bit Server VM 16.0.1+9-24 on 16.0.1+9-24 +indy +jit [darwin-x86_64]</th>
942
+ <th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
908
943
  </tr>
909
944
  <tr>
910
945
  <th>Library</th>
@@ -916,19 +951,19 @@ Heaps that support change_priority operation use it. Heaps that do not support i
916
951
  </tr>
917
952
  <tr>
918
953
  <td>pairing_heap (PairingHeap)</td>
919
- <td>1.353x slower</td>
954
+ <td>1.865x slower</td>
920
955
  </tr>
921
956
  <tr>
922
957
  <td>rb_heap</td>
923
- <td>1.522x slower</td>
958
+ <td>1.915x slower</td>
924
959
  </tr>
925
960
  <tr>
926
- <td>Fibonacci</td>
927
- <td>1.730x slower</td>
961
+ <td>lazy_priority_queue</td>
962
+ <td>8.791x slower</td>
928
963
  </tr>
929
964
  <tr>
930
- <td>lazy_priority_queue</td>
931
- <td>2.044x slower</td>
965
+ <td>Fibonacci</td>
966
+ <td>26.044x slower</td>
932
967
  </tr>
933
968
  </table>
934
969