pairing_heap 3.0.0 → 3.1.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 +1 -1
- data/Gemfile.lock +38 -21
- data/README.md +244 -353
- data/Rakefile +2 -0
- data/lib/pairing_heap/version.rb +1 -1
- data/lib/pairing_heap.rb +32 -2
- data/pairing_heap.gemspec +3 -10
- metadata +8 -7
    
        data/README.md
    CHANGED
    
    | @@ -101,9 +101,12 @@ This API is a drop-in replacement of [lazy_priority_queue](https://github.com/ma | |
| 101 101 | 
             
            | dequeue           | O(n)            | O(log n)                  |
         | 
| 102 102 | 
             
            | * change_priority | O(1)            | o(log n)                  |
         | 
| 103 103 | 
             
            | * delete          | O(n)            | O(log n)                  |
         | 
| 104 | 
            +
            | ^ merge           | O(1)            | O(1)                      |
         | 
| 104 105 |  | 
| 105 106 | 
             
            `*` Not available in `SimplePairingHeap`
         | 
| 106 107 |  | 
| 108 | 
            +
            `^` Only available in `SimplePairingHeap`
         | 
| 109 | 
            +
             | 
| 107 110 | 
             
            ## Benchmarks
         | 
| 108 111 | 
             
            I picked the three fastest pure Ruby priority queue implementations I was aware of for the comparison:
         | 
| 109 112 |  | 
| @@ -117,7 +120,7 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba | |
| 117 120 | 
             
            > 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.
         | 
| 118 121 | 
             
            <table>
         | 
| 119 122 | 
             
              <tr>
         | 
| 120 | 
            -
                <th colspan="4">ruby 3. | 
| 123 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin23]</th>
         | 
| 121 124 | 
             
              </tr>
         | 
| 122 125 | 
             
              <tr>
         | 
| 123 126 | 
             
                <th>Library</th>
         | 
| @@ -127,36 +130,36 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba | |
| 127 130 | 
             
              </tr>
         | 
| 128 131 | 
             
              <tr>
         | 
| 129 132 | 
             
                <td>pairing_heap (SimplePairingHeap)</td>
         | 
| 130 | 
            -
                <td> | 
| 131 | 
            -
                <td>62. | 
| 132 | 
            -
                <td>0. | 
| 133 | 
            +
                <td>26</td>
         | 
| 134 | 
            +
                <td>62.249427</td>
         | 
| 135 | 
            +
                <td>0.419</td>
         | 
| 133 136 | 
             
              </tr>
         | 
| 134 137 | 
             
              <tr>
         | 
| 135 138 | 
             
                <td>pairing_heap (PairingHeap)</td>
         | 
| 136 | 
            -
                <td> | 
| 137 | 
            -
                <td> | 
| 138 | 
            -
                <td>0. | 
| 139 | 
            +
                <td>17</td>
         | 
| 140 | 
            +
                <td>61.624806</td>
         | 
| 141 | 
            +
                <td>0.276(1.52x slower)</td>
         | 
| 139 142 | 
             
              </tr>
         | 
| 140 143 | 
             
              <tr>
         | 
| 141 144 | 
             
                <td>rb_heap</td>
         | 
| 142 | 
            -
                <td> | 
| 143 | 
            -
                <td> | 
| 144 | 
            -
                <td>0. | 
| 145 | 
            +
                <td>16</td>
         | 
| 146 | 
            +
                <td>63.656502</td>
         | 
| 147 | 
            +
                <td>0.251(1.67x slower)</td>
         | 
| 145 148 | 
             
              </tr>
         | 
| 146 149 | 
             
              <tr>
         | 
| 147 150 | 
             
                <td>lazy_priority_queue</td>
         | 
| 148 | 
            -
                <td> | 
| 149 | 
            -
                <td> | 
| 150 | 
            -
                <td>0. | 
| 151 | 
            +
                <td>7</td>
         | 
| 152 | 
            +
                <td>63.339192</td>
         | 
| 153 | 
            +
                <td>0.111(3.79x slower)</td>
         | 
| 151 154 | 
             
              </tr>
         | 
| 152 155 | 
             
              <tr>
         | 
| 153 156 | 
             
                <td>Fibonacci</td>
         | 
| 154 | 
            -
                <td> | 
| 155 | 
            -
                <td> | 
| 156 | 
            -
                <td>0. | 
| 157 | 
            +
                <td>5</td>
         | 
| 158 | 
            +
                <td>69.010737</td>
         | 
| 159 | 
            +
                <td>0.073(5.77x slower)</td>
         | 
| 157 160 | 
             
              </tr>
         | 
| 158 161 | 
             
              <tr>
         | 
| 159 | 
            -
                <th colspan="4">ruby 3. | 
| 162 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) +YJIT [x86_64-darwin23]</th>
         | 
| 160 163 | 
             
              </tr>
         | 
| 161 164 | 
             
              <tr>
         | 
| 162 165 | 
             
                <th>Library</th>
         | 
| @@ -166,36 +169,36 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba | |
| 166 169 | 
             
              </tr>
         | 
| 167 170 | 
             
              <tr>
         | 
| 168 171 | 
             
                <td>pairing_heap (SimplePairingHeap)</td>
         | 
| 169 | 
            -
                <td> | 
| 170 | 
            -
                <td>60. | 
| 171 | 
            -
                <td>0. | 
| 172 | 
            +
                <td>39</td>
         | 
| 173 | 
            +
                <td>60.725689</td>
         | 
| 174 | 
            +
                <td>0.642</td>
         | 
| 172 175 | 
             
              </tr>
         | 
| 173 176 | 
             
              <tr>
         | 
| 174 177 | 
             
                <td>rb_heap</td>
         | 
| 175 | 
            -
                <td> | 
| 176 | 
            -
                <td>60. | 
| 177 | 
            -
                <td>0. | 
| 178 | 
            +
                <td>31</td>
         | 
| 179 | 
            +
                <td>60.370348</td>
         | 
| 180 | 
            +
                <td>0.514(1.25x slower)</td>
         | 
| 178 181 | 
             
              </tr>
         | 
| 179 182 | 
             
              <tr>
         | 
| 180 183 | 
             
                <td>pairing_heap (PairingHeap)</td>
         | 
| 181 | 
            -
                <td> | 
| 182 | 
            -
                <td> | 
| 183 | 
            -
                <td>0. | 
| 184 | 
            +
                <td>25</td>
         | 
| 185 | 
            +
                <td>62.269577</td>
         | 
| 186 | 
            +
                <td>0.402(1.6x slower)</td>
         | 
| 184 187 | 
             
              </tr>
         | 
| 185 188 | 
             
              <tr>
         | 
| 186 | 
            -
                <td> | 
| 187 | 
            -
                <td> | 
| 188 | 
            -
                <td> | 
| 189 | 
            -
                <td>0. | 
| 189 | 
            +
                <td>lazy_priority_queue</td>
         | 
| 190 | 
            +
                <td>9</td>
         | 
| 191 | 
            +
                <td>62.144710</td>
         | 
| 192 | 
            +
                <td>0.145(4.43x slower)</td>
         | 
| 190 193 | 
             
              </tr>
         | 
| 191 194 | 
             
              <tr>
         | 
| 192 | 
            -
                <td> | 
| 193 | 
            -
                <td> | 
| 194 | 
            -
                <td> | 
| 195 | 
            -
                <td>0. | 
| 195 | 
            +
                <td>Fibonacci</td>
         | 
| 196 | 
            +
                <td>8</td>
         | 
| 197 | 
            +
                <td>65.064385</td>
         | 
| 198 | 
            +
                <td>0.123(5.22x slower)</td>
         | 
| 196 199 | 
             
              </tr>
         | 
| 197 200 | 
             
              <tr>
         | 
| 198 | 
            -
                <th colspan="4">jruby 9. | 
| 201 | 
            +
                <th colspan="4">jruby 9.4.5.0 (3.1.4) 2023-11-02 1abae2700f OpenJDK 64-Bit Server VM 21+35-2513 on 21+35-2513 +indy +jit [x86_64-darwin]</th>
         | 
| 199 202 | 
             
              </tr>
         | 
| 200 203 | 
             
              <tr>
         | 
| 201 204 | 
             
                <th>Library</th>
         | 
| @@ -205,36 +208,36 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba | |
| 205 208 | 
             
              </tr>
         | 
| 206 209 | 
             
              <tr>
         | 
| 207 210 | 
             
                <td>pairing_heap (SimplePairingHeap)</td>
         | 
| 208 | 
            -
                <td> | 
| 209 | 
            -
                <td>60. | 
| 210 | 
            -
                <td>0. | 
| 211 | 
            +
                <td>43</td>
         | 
| 212 | 
            +
                <td>60.734661</td>
         | 
| 213 | 
            +
                <td>0.709</td>
         | 
| 211 214 | 
             
              </tr>
         | 
| 212 215 | 
             
              <tr>
         | 
| 213 216 | 
             
                <td>rb_heap</td>
         | 
| 214 217 | 
             
                <td>34</td>
         | 
| 215 | 
            -
                <td> | 
| 216 | 
            -
                <td>0. | 
| 218 | 
            +
                <td>61.677228</td>
         | 
| 219 | 
            +
                <td>0.552(1.28x slower)</td>
         | 
| 217 220 | 
             
              </tr>
         | 
| 218 221 | 
             
              <tr>
         | 
| 219 222 | 
             
                <td>pairing_heap (PairingHeap)</td>
         | 
| 220 | 
            -
                <td> | 
| 221 | 
            -
                <td>61. | 
| 222 | 
            -
                <td>0. | 
| 223 | 
            +
                <td>28</td>
         | 
| 224 | 
            +
                <td>61.284382</td>
         | 
| 225 | 
            +
                <td>0.458(1.55x slower)</td>
         | 
| 223 226 | 
             
              </tr>
         | 
| 224 227 | 
             
              <tr>
         | 
| 225 228 | 
             
                <td>Fibonacci</td>
         | 
| 226 | 
            -
                <td> | 
| 227 | 
            -
                <td> | 
| 228 | 
            -
                <td>0. | 
| 229 | 
            +
                <td>22</td>
         | 
| 230 | 
            +
                <td>61.396897</td>
         | 
| 231 | 
            +
                <td>0.359(1.97x slower)</td>
         | 
| 229 232 | 
             
              </tr>
         | 
| 230 233 | 
             
              <tr>
         | 
| 231 234 | 
             
                <td>lazy_priority_queue</td>
         | 
| 232 | 
            -
                <td> | 
| 233 | 
            -
                <td>61. | 
| 234 | 
            -
                <td>0. | 
| 235 | 
            +
                <td>20</td>
         | 
| 236 | 
            +
                <td>61.841463</td>
         | 
| 237 | 
            +
                <td>0.324(2.19x slower)</td>
         | 
| 235 238 | 
             
              </tr>
         | 
| 236 239 | 
             
              <tr>
         | 
| 237 | 
            -
                <th colspan="4">truffleruby  | 
| 240 | 
            +
                <th colspan="4">truffleruby 23.1.2, like ruby 3.2.2, Oracle GraalVM JVM [x86_64-darwin]</th>
         | 
| 238 241 | 
             
              </tr>
         | 
| 239 242 | 
             
              <tr>
         | 
| 240 243 | 
             
                <th>Library</th>
         | 
| @@ -244,33 +247,33 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba | |
| 244 247 | 
             
              </tr>
         | 
| 245 248 | 
             
              <tr>
         | 
| 246 249 | 
             
                <td>pairing_heap (SimplePairingHeap)</td>
         | 
| 247 | 
            -
                <td> | 
| 248 | 
            -
                <td>60. | 
| 249 | 
            -
                <td>3. | 
| 250 | 
            +
                <td>202</td>
         | 
| 251 | 
            +
                <td>60.225639</td>
         | 
| 252 | 
            +
                <td>3.388</td>
         | 
| 250 253 | 
             
              </tr>
         | 
| 251 254 | 
             
              <tr>
         | 
| 252 255 | 
             
                <td>rb_heap</td>
         | 
| 253 | 
            -
                <td> | 
| 254 | 
            -
                <td>60. | 
| 255 | 
            -
                <td> | 
| 256 | 
            +
                <td>140</td>
         | 
| 257 | 
            +
                <td>60.190881</td>
         | 
| 258 | 
            +
                <td>2.357(1.44x slower)</td>
         | 
| 256 259 | 
             
              </tr>
         | 
| 257 260 | 
             
              <tr>
         | 
| 258 261 | 
             
                <td>pairing_heap (PairingHeap)</td>
         | 
| 259 | 
            -
                <td> | 
| 260 | 
            -
                <td>60. | 
| 261 | 
            -
                <td>1. | 
| 262 | 
            +
                <td>100</td>
         | 
| 263 | 
            +
                <td>60.373610</td>
         | 
| 264 | 
            +
                <td>1.692(2x slower)</td>
         | 
| 262 265 | 
             
              </tr>
         | 
| 263 266 | 
             
              <tr>
         | 
| 264 267 | 
             
                <td>lazy_priority_queue</td>
         | 
| 265 | 
            -
                <td> | 
| 266 | 
            -
                <td> | 
| 267 | 
            -
                <td>0. | 
| 268 | 
            +
                <td>31</td>
         | 
| 269 | 
            +
                <td>61.179244</td>
         | 
| 270 | 
            +
                <td>0.510(6.65x slower)</td>
         | 
| 268 271 | 
             
              </tr>
         | 
| 269 272 | 
             
              <tr>
         | 
| 270 273 | 
             
                <td>Fibonacci</td>
         | 
| 271 | 
            -
                <td> | 
| 272 | 
            -
                <td> | 
| 273 | 
            -
                <td>0. | 
| 274 | 
            +
                <td>11</td>
         | 
| 275 | 
            +
                <td>64.413419</td>
         | 
| 276 | 
            +
                <td>0.171(19.81x slower)</td>
         | 
| 274 277 | 
             
              </tr>
         | 
| 275 278 | 
             
            </table>
         | 
| 276 279 |  | 
| @@ -278,7 +281,7 @@ Original performance test from [lazy_priority_queue](https://github.com/matiasba | |
| 278 281 | 
             
            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.
         | 
| 279 282 | 
             
            <table>
         | 
| 280 283 | 
             
              <tr>
         | 
| 281 | 
            -
                <th colspan="4">ruby 3. | 
| 284 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin23]</th>
         | 
| 282 285 | 
             
              </tr>
         | 
| 283 286 | 
             
              <tr>
         | 
| 284 287 | 
             
                <th>Library</th>
         | 
| @@ -289,23 +292,23 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr | |
| 289 292 | 
             
              <tr>
         | 
| 290 293 | 
             
                <td>pairing_heap</td>
         | 
| 291 294 | 
             
                <td>15</td>
         | 
| 292 | 
            -
                <td> | 
| 293 | 
            -
                <td>0. | 
| 295 | 
            +
                <td>60.817878</td>
         | 
| 296 | 
            +
                <td>0.247</td>
         | 
| 294 297 | 
             
              </tr>
         | 
| 295 298 | 
             
              <tr>
         | 
| 296 299 | 
             
                <td>lazy_priority_queue</td>
         | 
| 297 | 
            -
                <td> | 
| 298 | 
            -
                <td> | 
| 299 | 
            -
                <td>0. | 
| 300 | 
            +
                <td>7</td>
         | 
| 301 | 
            +
                <td>63.990376s</td>
         | 
| 302 | 
            +
                <td>0.109(2.26x slower)</td>
         | 
| 300 303 | 
             
              </tr>
         | 
| 301 304 | 
             
              <tr>
         | 
| 302 305 | 
             
                <td>Fibonacci</td>
         | 
| 303 | 
            -
                <td> | 
| 304 | 
            -
                <td> | 
| 305 | 
            -
                <td>0. | 
| 306 | 
            +
                <td>5</td>
         | 
| 307 | 
            +
                <td>70.148980s</td>
         | 
| 308 | 
            +
                <td>0.071(3.47x slower)</td>
         | 
| 306 309 | 
             
              </tr>
         | 
| 307 310 | 
             
              <tr>
         | 
| 308 | 
            -
                <th colspan="4">ruby 3. | 
| 311 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) +YJIT [x86_64-darwin23]</th>
         | 
| 309 312 | 
             
              </tr>
         | 
| 310 313 | 
             
              <tr>
         | 
| 311 314 | 
             
                <th>Library</th>
         | 
| @@ -315,24 +318,24 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr | |
| 315 318 | 
             
              </tr>
         | 
| 316 319 | 
             
              <tr>
         | 
| 317 320 | 
             
                <td>pairing_heap</td>
         | 
| 318 | 
            -
                <td> | 
| 319 | 
            -
                <td>62. | 
| 320 | 
            -
                <td>0. | 
| 321 | 
            +
                <td>22</td>
         | 
| 322 | 
            +
                <td>62.429264</td>
         | 
| 323 | 
            +
                <td>0.353</td>
         | 
| 321 324 | 
             
              </tr>
         | 
| 322 325 | 
             
              <tr>
         | 
| 323 | 
            -
                <td> | 
| 324 | 
            -
                <td> | 
| 325 | 
            -
                <td>63. | 
| 326 | 
            -
                <td>0. | 
| 326 | 
            +
                <td>lazy_priority_queue</td>
         | 
| 327 | 
            +
                <td>9</td>
         | 
| 328 | 
            +
                <td>63.464818</td>
         | 
| 329 | 
            +
                <td>0.142(2.49x slower)</td>
         | 
| 327 330 | 
             
              </tr>
         | 
| 328 331 | 
             
              <tr>
         | 
| 329 | 
            -
                <td> | 
| 330 | 
            -
                <td> | 
| 331 | 
            -
                <td> | 
| 332 | 
            -
                <td>0. | 
| 332 | 
            +
                <td>Fibonacci</td>
         | 
| 333 | 
            +
                <td>8</td>
         | 
| 334 | 
            +
                <td>67.908812</td>
         | 
| 335 | 
            +
                <td>0.118(2.99x slower)</td>
         | 
| 333 336 | 
             
              </tr>
         | 
| 334 337 | 
             
              <tr>
         | 
| 335 | 
            -
                <th colspan="4">jruby 9. | 
| 338 | 
            +
                <th colspan="4">jruby 9.4.5.0 (3.1.4) 2023-11-02 1abae2700f OpenJDK 64-Bit Server VM 21+35-2513 on 21+35-2513 +indy +jit [x86_64-darwin]</th>
         | 
| 336 339 | 
             
              </tr>
         | 
| 337 340 | 
             
              <tr>
         | 
| 338 341 | 
             
                <th>Library</th>
         | 
| @@ -342,24 +345,24 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr | |
| 342 345 | 
             
              </tr>
         | 
| 343 346 | 
             
              <tr>
         | 
| 344 347 | 
             
                <td>pairing_heap</td>
         | 
| 345 | 
            -
                <td> | 
| 346 | 
            -
                <td> | 
| 347 | 
            -
                <td>0. | 
| 348 | 
            +
                <td>27</td>
         | 
| 349 | 
            +
                <td>61.709517</td>
         | 
| 350 | 
            +
                <td>0.438</td>
         | 
| 348 351 | 
             
              </tr>
         | 
| 349 352 | 
             
              <tr>
         | 
| 350 353 | 
             
                <td>Fibonacci</td>
         | 
| 351 | 
            -
                <td> | 
| 352 | 
            -
                <td>61. | 
| 353 | 
            -
                <td>0. | 
| 354 | 
            +
                <td>20</td>
         | 
| 355 | 
            +
                <td>61.495636</td>
         | 
| 356 | 
            +
                <td>0.326(1.34x slower)</td>
         | 
| 354 357 | 
             
              </tr>
         | 
| 355 358 | 
             
              <tr>
         | 
| 356 359 | 
             
                <td>lazy_priority_queue</td>
         | 
| 357 | 
            -
                <td> | 
| 358 | 
            -
                <td> | 
| 359 | 
            -
                <td>0. | 
| 360 | 
            +
                <td>19</td>
         | 
| 361 | 
            +
                <td>63.401601</td>
         | 
| 362 | 
            +
                <td>0.309(1.46x slower)</td>
         | 
| 360 363 | 
             
              </tr>
         | 
| 361 364 | 
             
              <tr>
         | 
| 362 | 
            -
                <th colspan="4">truffleruby  | 
| 365 | 
            +
                <th colspan="4">truffleruby 23.1.2, like ruby 3.2.2, Oracle GraalVM JVM [x86_64-darwin]</th>
         | 
| 363 366 | 
             
              </tr>
         | 
| 364 367 | 
             
              <tr>
         | 
| 365 368 | 
             
                <th>Library</th>
         | 
| @@ -369,21 +372,21 @@ A stress test of 1,501,500 operations: starting with 1,000 pushes/1000 change_pr | |
| 369 372 | 
             
              </tr>
         | 
| 370 373 | 
             
              <tr>
         | 
| 371 374 | 
             
                <td>pairing_heap</td>
         | 
| 372 | 
            -
                <td> | 
| 373 | 
            -
                <td>60. | 
| 374 | 
            -
                <td>1. | 
| 375 | 
            +
                <td>93</td>
         | 
| 376 | 
            +
                <td>60.125750</td>
         | 
| 377 | 
            +
                <td>1.577</td>
         | 
| 375 378 | 
             
              </tr>
         | 
| 376 379 | 
             
              <tr>
         | 
| 377 380 | 
             
                <td>lazy_priority_queue</td>
         | 
| 378 | 
            -
                <td> | 
| 379 | 
            -
                <td> | 
| 380 | 
            -
                <td>0. | 
| 381 | 
            +
                <td>26</td>
         | 
| 382 | 
            +
                <td>62.372660s</td>
         | 
| 383 | 
            +
                <td>0.419(3.77x slower)</td>
         | 
| 381 384 | 
             
              </tr>
         | 
| 382 385 | 
             
              <tr>
         | 
| 383 386 | 
             
                <td>Fibonacci</td>
         | 
| 384 | 
            -
                <td> | 
| 385 | 
            -
                <td> | 
| 386 | 
            -
                <td>0. | 
| 387 | 
            +
                <td>11</td>
         | 
| 388 | 
            +
                <td>62.620172s</td>
         | 
| 389 | 
            +
                <td>0.177(8.92x slower)</td>
         | 
| 387 390 | 
             
              </tr>
         | 
| 388 391 | 
             
            </table>
         | 
| 389 392 |  | 
| @@ -393,7 +396,7 @@ Start with 500 pushes, then: | |
| 393 396 | 
             
              * If does not support changing priority 500 push calls, then 1000 pops
         | 
| 394 397 | 
             
            <table>
         | 
| 395 398 | 
             
              <tr>
         | 
| 396 | 
            -
                <th colspan="4">ruby 3. | 
| 399 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin23]</th>
         | 
| 397 400 | 
             
              </tr>
         | 
| 398 401 | 
             
              <tr>
         | 
| 399 402 | 
             
                <th>Library</th>
         | 
| @@ -401,26 +404,26 @@ Start with 500 pushes, then: | |
| 401 404 | 
             
              </tr>
         | 
| 402 405 | 
             
              <tr>
         | 
| 403 406 | 
             
                <td>pairing_heap (PairingHeap)</td>
         | 
| 404 | 
            -
                <td> | 
| 407 | 
            +
                <td>748.9</td>
         | 
| 405 408 | 
             
              </tr>
         | 
| 406 409 | 
             
              <tr>
         | 
| 407 410 | 
             
                <td>lazy_priority_queue</td>
         | 
| 408 | 
            -
                <td> | 
| 411 | 
            +
                <td>388.6(1.93x slower)</td>
         | 
| 409 412 | 
             
              </tr>
         | 
| 410 413 | 
             
              <tr>
         | 
| 411 414 | 
             
                <td>pairing_heap (SimplePairingHeap)</td>
         | 
| 412 | 
            -
                <td> | 
| 415 | 
            +
                <td>336.2(2.23x slower)</td>
         | 
| 413 416 | 
             
              </tr>
         | 
| 414 417 | 
             
              <tr>
         | 
| 415 418 | 
             
                <td>Fibonacci</td>
         | 
| 416 | 
            -
                <td> | 
| 419 | 
            +
                <td>225.9(3.31x slower)</td>
         | 
| 417 420 | 
             
              </tr>
         | 
| 418 421 | 
             
              <tr>
         | 
| 419 422 | 
             
                <td>rb_heap</td>
         | 
| 420 | 
            -
                <td> | 
| 423 | 
            +
                <td>215.2(3.48x slower)</td>
         | 
| 421 424 | 
             
              </tr>
         | 
| 422 425 | 
             
              <tr>
         | 
| 423 | 
            -
                <th colspan="4">ruby 3. | 
| 426 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) +YJIT [x86_64-darwin23]</th>
         | 
| 424 427 | 
             
              </tr>
         | 
| 425 428 | 
             
              <tr>
         | 
| 426 429 | 
             
                <th>Library</th>
         | 
| @@ -428,26 +431,26 @@ Start with 500 pushes, then: | |
| 428 431 | 
             
              </tr>
         | 
| 429 432 | 
             
              <tr>
         | 
| 430 433 | 
             
                <td>pairing_heap</td>
         | 
| 431 | 
            -
                <td> | 
| 434 | 
            +
                <td>1276</td>
         | 
| 432 435 | 
             
              </tr>
         | 
| 433 436 | 
             
              <tr>
         | 
| 434 | 
            -
                <td> | 
| 435 | 
            -
                <td> | 
| 437 | 
            +
                <td>pairing_heap(SimplePairingHeap)</td>
         | 
| 438 | 
            +
                <td>625.6(2.04x slower)</td>
         | 
| 436 439 | 
             
              </tr>
         | 
| 437 440 | 
             
              <tr>
         | 
| 438 441 | 
             
                <td>lazy_priority_queue</td>
         | 
| 439 | 
            -
                <td> | 
| 442 | 
            +
                <td>533.36(2.39x slower)</td>
         | 
| 440 443 | 
             
              </tr>
         | 
| 441 444 | 
             
              <tr>
         | 
| 442 | 
            -
                <td> | 
| 443 | 
            -
                <td> | 
| 445 | 
            +
                <td>Fibonacci</td>
         | 
| 446 | 
            +
                <td>495.519(2.57x slower)</td>
         | 
| 444 447 | 
             
              </tr>
         | 
| 445 448 | 
             
              <tr>
         | 
| 446 449 | 
             
                <td>rb_heap</td>
         | 
| 447 | 
            -
                <td> | 
| 450 | 
            +
                <td>453.323(2.81x slower)</td>
         | 
| 448 451 | 
             
              </tr>
         | 
| 449 452 | 
             
              <tr>
         | 
| 450 | 
            -
                <th colspan="4">jruby 9. | 
| 453 | 
            +
                <th colspan="4">jruby 9.4.5.0 (3.1.4) 2023-11-02 1abae2700f OpenJDK 64-Bit Server VM 21+35-2513 on 21+35-2513 +indy +jit [x86_64-darwin]</th>
         | 
| 451 454 | 
             
              </tr>
         | 
| 452 455 | 
             
              <tr>
         | 
| 453 456 | 
             
                <th>Library</th>
         | 
| @@ -455,26 +458,26 @@ Start with 500 pushes, then: | |
| 455 458 | 
             
              </tr>
         | 
| 456 459 | 
             
              <tr>
         | 
| 457 460 | 
             
                <td>pairing_heap(PairingHeap)</td>
         | 
| 458 | 
            -
                <td> | 
| 461 | 
            +
                <td>1377</td>
         | 
| 459 462 | 
             
              </tr>
         | 
| 460 463 | 
             
              <tr>
         | 
| 461 464 | 
             
                <td>Fibonacci</td>
         | 
| 462 | 
            -
                <td> | 
| 465 | 
            +
                <td>1088(1.27x slower)</td>
         | 
| 463 466 | 
             
              </tr>
         | 
| 464 467 | 
             
              <tr>
         | 
| 465 468 | 
             
                <td>lazy_priority_queue</td>
         | 
| 466 | 
            -
                <td> | 
| 469 | 
            +
                <td>953.935(1.44x slower)</td>
         | 
| 467 470 | 
             
              </tr>
         | 
| 468 471 | 
             
              <tr>
         | 
| 469 472 | 
             
                <td>pairing_heap(SimplePairingHeap)</td>
         | 
| 470 | 
            -
                <td> | 
| 473 | 
            +
                <td>621.35(2.22x slower)</td>
         | 
| 471 474 | 
             
              </tr>
         | 
| 472 475 | 
             
              <tr>
         | 
| 473 476 | 
             
                <td>rb_heap</td>
         | 
| 474 | 
            -
                <td> | 
| 477 | 
            +
                <td>595.11(2.31x slower)</td>
         | 
| 475 478 | 
             
              </tr>
         | 
| 476 479 | 
             
              <tr>
         | 
| 477 | 
            -
                <th colspan="4">truffleruby  | 
| 480 | 
            +
                <th colspan="4">truffleruby 23.1.2, like ruby 3.2.2, Oracle GraalVM JVM [x86_64-darwin]</th>
         | 
| 478 481 | 
             
              </tr>
         | 
| 479 482 | 
             
              <tr>
         | 
| 480 483 | 
             
                <th>Library</th>
         | 
| @@ -482,135 +485,23 @@ Start with 500 pushes, then: | |
| 482 485 | 
             
              </tr>
         | 
| 483 486 | 
             
              <tr>
         | 
| 484 487 | 
             
                <td>pairing_heap(PairingHeap)</td>
         | 
| 485 | 
            -
                <td> | 
| 488 | 
            +
                <td>12712</td>
         | 
| 486 489 | 
             
              </tr>
         | 
| 487 490 | 
             
              <tr>
         | 
| 488 491 | 
             
                <td>pairing_heap(SimplePairingHeap)</td>
         | 
| 489 | 
            -
                <td> | 
| 492 | 
            +
                <td>9447(1.35x slower)</td>
         | 
| 490 493 | 
             
              </tr>
         | 
| 491 494 | 
             
              <tr>
         | 
| 492 495 | 
             
                <td>rb_heap</td>
         | 
| 493 | 
            -
                <td> | 
| 494 | 
            -
              </tr>
         | 
| 495 | 
            -
              <tr>
         | 
| 496 | 
            -
                <td>Fibonacci</td>
         | 
| 497 | 
            -
                <td>1258(5.88x slower)</td>
         | 
| 498 | 
            -
              </tr>
         | 
| 499 | 
            -
              <tr>
         | 
| 500 | 
            -
                <td>lazy_priority_queue</td>
         | 
| 501 | 
            -
                <td>1004(7.38x slower)</td>
         | 
| 502 | 
            -
              </tr>
         | 
| 503 | 
            -
            </table>
         | 
| 504 | 
            -
             | 
| 505 | 
            -
            ### Dijkstra's algorithm with RGL [source code](./test/performance_rgl.rb)
         | 
| 506 | 
            -
            <table>
         | 
| 507 | 
            -
              <tr>
         | 
| 508 | 
            -
                <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]</th>
         | 
| 509 | 
            -
              </tr>
         | 
| 510 | 
            -
              <tr>
         | 
| 511 | 
            -
                <th>Library</th>
         | 
| 512 | 
            -
                <th>Iterations</th>
         | 
| 513 | 
            -
                <th>Seconds</th>
         | 
| 514 | 
            -
                <th>Iterations per second</th>
         | 
| 515 | 
            -
              </tr>
         | 
| 516 | 
            -
              <tr>
         | 
| 517 | 
            -
                <td>pairing_heap</td>
         | 
| 518 | 
            -
                <td>9</td>
         | 
| 519 | 
            -
                <td>61.469343</td>
         | 
| 520 | 
            -
                <td>0.116</td>
         | 
| 521 | 
            -
              </tr>
         | 
| 522 | 
            -
              <tr>
         | 
| 523 | 
            -
                <td>lazy_priority_queue</td>
         | 
| 524 | 
            -
                <td>8</td>
         | 
| 525 | 
            -
                <td>64.312672</td>
         | 
| 526 | 
            -
                <td>0.125(1.18x slower)</td>
         | 
| 527 | 
            -
              </tr>
         | 
| 528 | 
            -
              <tr>
         | 
| 529 | 
            -
                <td>Fibonacci</td>
         | 
| 530 | 
            -
                <td>7</td>
         | 
| 531 | 
            -
                <td>60.555716</td>
         | 
| 532 | 
            -
                <td>0.116(1.27x slower)</td>
         | 
| 533 | 
            -
              </tr>
         | 
| 534 | 
            -
              <tr>
         | 
| 535 | 
            -
                <th colspan="4">ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) +YJIT [x86_64-darwin21]</th>
         | 
| 536 | 
            -
              </tr>
         | 
| 537 | 
            -
              <tr>
         | 
| 538 | 
            -
                <th>Library</th>
         | 
| 539 | 
            -
                <th>Iterations</th>
         | 
| 540 | 
            -
                <th>Seconds</th>
         | 
| 541 | 
            -
                <th>Iterations per second</th>
         | 
| 542 | 
            -
              </tr>
         | 
| 543 | 
            -
              <tr>
         | 
| 544 | 
            -
                <td>pairing_heap</td>
         | 
| 545 | 
            -
                <td>10</td>
         | 
| 546 | 
            -
                <td>65.160945s</td>
         | 
| 547 | 
            -
                <td>0.154</td>
         | 
| 548 | 
            -
              </tr>
         | 
| 549 | 
            -
              <tr>
         | 
| 550 | 
            -
                <td>Fibonacci</td>
         | 
| 551 | 
            -
                <td>9</td>
         | 
| 552 | 
            -
                <td>61.950587</td>
         | 
| 553 | 
            -
                <td>0.145(1.06x slower)</td>
         | 
| 554 | 
            -
              </tr>
         | 
| 555 | 
            -
              <tr>
         | 
| 556 | 
            -
                <td>lazy_priority_queue</td>
         | 
| 557 | 
            -
                <td>9</td>
         | 
| 558 | 
            -
                <td>66.592123</td>
         | 
| 559 | 
            -
                <td>0.135(1.14x slower)</td>
         | 
| 560 | 
            -
              </tr>
         | 
| 561 | 
            -
              <tr>
         | 
| 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>
         | 
| 563 | 
            -
              </tr>
         | 
| 564 | 
            -
              <tr>
         | 
| 565 | 
            -
                <th>Library</th>
         | 
| 566 | 
            -
                <th>Iterations</th>
         | 
| 567 | 
            -
                <th>Seconds</th>
         | 
| 568 | 
            -
                <th>Iterations per second</th>
         | 
| 569 | 
            -
              </tr>
         | 
| 570 | 
            -
              <tr>
         | 
| 571 | 
            -
                <td>lazy_priority_queue</td>
         | 
| 572 | 
            -
                <td>20</td>
         | 
| 573 | 
            -
                <td>61.149944</td>
         | 
| 574 | 
            -
                <td>0.328</td>
         | 
| 575 | 
            -
              </tr>
         | 
| 576 | 
            -
              <tr>
         | 
| 577 | 
            -
                <td>pairing_heap</td>
         | 
| 578 | 
            -
                <td>20</td>
         | 
| 579 | 
            -
                <td>61.210225s</td>
         | 
| 580 | 
            -
                <td>0.328</td>
         | 
| 496 | 
            +
                <td>4009(3.17x slower)</td>
         | 
| 581 497 | 
             
              </tr>
         | 
| 582 498 | 
             
              <tr>
         | 
| 583 499 | 
             
                <td>Fibonacci</td>
         | 
| 584 | 
            -
                <td> | 
| 585 | 
            -
                <td>62.330882</td>
         | 
| 586 | 
            -
                <td>0.292(1.12x slower)</td>
         | 
| 587 | 
            -
              </tr>
         | 
| 588 | 
            -
              <tr>
         | 
| 589 | 
            -
                <th colspan="4">truffleruby 22.2.0, like ruby 3.0.3, GraalVM CE JVM [x86_64-darwin]</th>
         | 
| 590 | 
            -
              </tr>
         | 
| 591 | 
            -
              <tr>
         | 
| 592 | 
            -
                <th>Library</th>
         | 
| 593 | 
            -
                <th>Iterations</th>
         | 
| 594 | 
            -
                <th>Seconds</th>
         | 
| 595 | 
            -
                <th>Iterations per second</th>
         | 
| 596 | 
            -
              </tr>
         | 
| 597 | 
            -
              <tr>
         | 
| 598 | 
            -
                <td>pairing_heap</td>
         | 
| 599 | 
            -
                <td>59</td>
         | 
| 600 | 
            -
                <td>60.053843</td>
         | 
| 601 | 
            -
                <td>0.991</td>
         | 
| 500 | 
            +
                <td>2793(4.55x slower)</td>
         | 
| 602 501 | 
             
              </tr>
         | 
| 603 502 | 
             
              <tr>
         | 
| 604 503 | 
             
                <td>lazy_priority_queue</td>
         | 
| 605 | 
            -
                <td> | 
| 606 | 
            -
                <td>60.586461</td>
         | 
| 607 | 
            -
                <td>0.563(1.76x slower)</td>
         | 
| 608 | 
            -
              </tr>
         | 
| 609 | 
            -
              <tr>
         | 
| 610 | 
            -
                <td>Fibonacci</td>
         | 
| 611 | 
            -
                <td>31</td>
         | 
| 612 | 
            -
                <td>60.633711</td>
         | 
| 613 | 
            -
                <td>0.520(1.90x slower)</td>
         | 
| 504 | 
            +
                <td>1188(10.7x slower)</td>
         | 
| 614 505 | 
             
              </tr>
         | 
| 615 506 | 
             
            </table>
         | 
| 616 507 |  | 
| @@ -618,7 +509,7 @@ Start with 500 pushes, then: | |
| 618 509 | 
             
            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)).
         | 
| 619 510 | 
             
            <table>
         | 
| 620 511 | 
             
              <tr>
         | 
| 621 | 
            -
                <th colspan="4">ruby 3. | 
| 512 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin23]</th>
         | 
| 622 513 | 
             
              </tr>
         | 
| 623 514 | 
             
              <tr>
         | 
| 624 515 | 
             
                <th>Library</th>
         | 
| @@ -628,36 +519,36 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 628 519 | 
             
              </tr>
         | 
| 629 520 | 
             
              <tr>
         | 
| 630 521 | 
             
                <td>pairing_heap (SimplePairingHeap)</td>
         | 
| 631 | 
            -
                <td> | 
| 632 | 
            -
                <td> | 
| 633 | 
            -
                <td>0. | 
| 522 | 
            +
                <td>41</td>
         | 
| 523 | 
            +
                <td>60.100316</td>
         | 
| 524 | 
            +
                <td>0.682</td>
         | 
| 634 525 | 
             
              </tr>
         | 
| 635 526 | 
             
              <tr>
         | 
| 636 527 | 
             
                <td>pairing_heap (PairingHeap)</td>
         | 
| 637 | 
            -
                <td> | 
| 638 | 
            -
                <td> | 
| 639 | 
            -
                <td>0. | 
| 528 | 
            +
                <td>38</td>
         | 
| 529 | 
            +
                <td>61.003607</td>
         | 
| 530 | 
            +
                <td>0.623(1.09x slower)</td>
         | 
| 640 531 | 
             
              </tr>
         | 
| 641 532 | 
             
              <tr>
         | 
| 642 533 | 
             
                <td>rb_heap</td>
         | 
| 643 | 
            -
                <td> | 
| 644 | 
            -
                <td> | 
| 645 | 
            -
                <td>0. | 
| 534 | 
            +
                <td>30</td>
         | 
| 535 | 
            +
                <td>61.486216</td>
         | 
| 536 | 
            +
                <td>0.488(1.40x slower)</td>
         | 
| 646 537 | 
             
              </tr>
         | 
| 647 538 | 
             
              <tr>
         | 
| 648 539 | 
             
                <td>lazy_priority_queue</td>
         | 
| 649 | 
            -
                <td> | 
| 650 | 
            -
                <td> | 
| 651 | 
            -
                <td>0. | 
| 540 | 
            +
                <td>23</td>
         | 
| 541 | 
            +
                <td>60.251764</td>
         | 
| 542 | 
            +
                <td>0.382(1.79x slower)</td>
         | 
| 652 543 | 
             
              </tr>
         | 
| 653 544 | 
             
              <tr>
         | 
| 654 545 | 
             
                <td>Fibonacci</td>
         | 
| 655 | 
            -
                <td> | 
| 656 | 
            -
                <td> | 
| 657 | 
            -
                <td>0. | 
| 546 | 
            +
                <td>13</td>
         | 
| 547 | 
            +
                <td>61.158622</td>
         | 
| 548 | 
            +
                <td>0.213(3.21x slower)</td>
         | 
| 658 549 | 
             
              </tr>
         | 
| 659 550 | 
             
              <tr>
         | 
| 660 | 
            -
                <th colspan="4">ruby 3. | 
| 551 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) +YJIT [x86_64-darwin23]</th>
         | 
| 661 552 | 
             
              </tr>
         | 
| 662 553 | 
             
              <tr>
         | 
| 663 554 | 
             
                <th>Library</th>
         | 
| @@ -667,36 +558,36 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 667 558 | 
             
              </tr>
         | 
| 668 559 | 
             
              <tr>
         | 
| 669 560 | 
             
                <td>pairing_heap (SimplePairingHeap)</td>
         | 
| 670 | 
            -
                <td> | 
| 671 | 
            -
                <td> | 
| 672 | 
            -
                <td> | 
| 561 | 
            +
                <td>65</td>
         | 
| 562 | 
            +
                <td>60.805882</td>
         | 
| 563 | 
            +
                <td>1.070</td>
         | 
| 673 564 | 
             
              </tr>
         | 
| 674 565 | 
             
              <tr>
         | 
| 675 566 | 
             
                <td>pairing_heap (PairingHeap)</td>
         | 
| 676 | 
            -
                <td> | 
| 677 | 
            -
                <td>60. | 
| 678 | 
            -
                <td>0. | 
| 567 | 
            +
                <td>60</td>
         | 
| 568 | 
            +
                <td>60.790842</td>
         | 
| 569 | 
            +
                <td>0.987(1.08x slower)</td>
         | 
| 679 570 | 
             
              </tr>
         | 
| 680 571 | 
             
              <tr>
         | 
| 681 572 | 
             
                <td>rb_heap</td>
         | 
| 682 | 
            -
                <td> | 
| 683 | 
            -
                <td>60. | 
| 684 | 
            -
                <td>0. | 
| 573 | 
            +
                <td>54</td>
         | 
| 574 | 
            +
                <td>60.917679</td>
         | 
| 575 | 
            +
                <td>0.887(1.21x slower)</td>
         | 
| 685 576 | 
             
              </tr>
         | 
| 686 577 | 
             
              <tr>
         | 
| 687 | 
            -
                <td> | 
| 688 | 
            -
                <td> | 
| 689 | 
            -
                <td> | 
| 690 | 
            -
                <td>0. | 
| 578 | 
            +
                <td>lazy_priority_queue</td>
         | 
| 579 | 
            +
                <td>30</td>
         | 
| 580 | 
            +
                <td>60.712786</td>
         | 
| 581 | 
            +
                <td>0.495(2.16x slower)</td>
         | 
| 691 582 | 
             
              </tr>
         | 
| 692 583 | 
             
              <tr>
         | 
| 693 | 
            -
                <td> | 
| 694 | 
            -
                <td> | 
| 695 | 
            -
                <td> | 
| 696 | 
            -
                <td>0. | 
| 584 | 
            +
                <td>Fibonacci</td>
         | 
| 585 | 
            +
                <td>24</td>
         | 
| 586 | 
            +
                <td>61.900715</td>
         | 
| 587 | 
            +
                <td>0.388(2.76x slower)</td>
         | 
| 697 588 | 
             
              </tr>
         | 
| 698 589 | 
             
              <tr>
         | 
| 699 | 
            -
                <th colspan="4">jruby 9. | 
| 590 | 
            +
                <th colspan="4">jruby 9.4.5.0 (3.1.4) 2023-11-02 1abae2700f OpenJDK 64-Bit Server VM 21+35-2513 on 21+35-2513 +indy +jit [x86_64-darwin]</th>
         | 
| 700 591 | 
             
              </tr>
         | 
| 701 592 | 
             
              <tr>
         | 
| 702 593 | 
             
                <th>Library</th>
         | 
| @@ -705,37 +596,37 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 705 596 | 
             
                <th>Iterations per second</th>
         | 
| 706 597 | 
             
              </tr>
         | 
| 707 598 | 
             
              <tr>
         | 
| 708 | 
            -
                <td> | 
| 709 | 
            -
                <td> | 
| 710 | 
            -
                <td> | 
| 711 | 
            -
                <td> | 
| 599 | 
            +
                <td>rb_heap</td>
         | 
| 600 | 
            +
                <td>70</td>
         | 
| 601 | 
            +
                <td>60.077928</td>
         | 
| 602 | 
            +
                <td>1.168</td>
         | 
| 712 603 | 
             
              </tr>
         | 
| 713 604 | 
             
              <tr>
         | 
| 714 | 
            -
                <td> | 
| 715 | 
            -
                <td> | 
| 716 | 
            -
                <td>60. | 
| 717 | 
            -
                <td> | 
| 605 | 
            +
                <td>pairing_heap (SimplePairingHeap)</td>
         | 
| 606 | 
            +
                <td>66</td>
         | 
| 607 | 
            +
                <td>60.420935</td>
         | 
| 608 | 
            +
                <td>1.094(1.07x slower)</td>
         | 
| 718 609 | 
             
              </tr>
         | 
| 719 610 | 
             
              <tr>
         | 
| 720 611 | 
             
                <td>pairing_heap (PairingHeap)</td>
         | 
| 721 | 
            -
                <td> | 
| 722 | 
            -
                <td>60. | 
| 723 | 
            -
                <td> | 
| 612 | 
            +
                <td>64</td>
         | 
| 613 | 
            +
                <td>60.114467</td>
         | 
| 614 | 
            +
                <td>1.066(1.1x slower)</td>
         | 
| 724 615 | 
             
              </tr>
         | 
| 725 616 | 
             
              <tr>
         | 
| 726 617 | 
             
                <td>Fibonacci</td>
         | 
| 727 | 
            -
                <td> | 
| 728 | 
            -
                <td> | 
| 729 | 
            -
                <td>0. | 
| 618 | 
            +
                <td>54</td>
         | 
| 619 | 
            +
                <td>60.426971</td>
         | 
| 620 | 
            +
                <td>0.898(1.30x slower)</td>
         | 
| 730 621 | 
             
              </tr>
         | 
| 731 622 | 
             
              <tr>
         | 
| 732 623 | 
             
                <td>lazy_priority_queue</td>
         | 
| 733 | 
            -
                <td> | 
| 734 | 
            -
                <td> | 
| 735 | 
            -
                <td>0. | 
| 624 | 
            +
                <td>49</td>
         | 
| 625 | 
            +
                <td>60.636963</td>
         | 
| 626 | 
            +
                <td>0.809(1.44x slower)</td>
         | 
| 736 627 | 
             
              </tr>
         | 
| 737 628 | 
             
              <tr>
         | 
| 738 | 
            -
                <th colspan="4">truffleruby  | 
| 629 | 
            +
                <th colspan="4">truffleruby 23.1.2, like ruby 3.2.2, Oracle GraalVM JVM [x86_64-darwin]</th>
         | 
| 739 630 | 
             
              </tr>
         | 
| 740 631 | 
             
              <tr>
         | 
| 741 632 | 
             
                <th>Library</th>
         | 
| @@ -745,33 +636,33 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 745 636 | 
             
              </tr>
         | 
| 746 637 | 
             
              <tr>
         | 
| 747 638 | 
             
                <td>pairing_heap (SimplePairingHeap)</td>
         | 
| 748 | 
            -
                <td> | 
| 749 | 
            -
                <td>60. | 
| 750 | 
            -
                <td> | 
| 639 | 
            +
                <td>288</td>
         | 
| 640 | 
            +
                <td>60.102278</td>
         | 
| 641 | 
            +
                <td>4.936</td>
         | 
| 751 642 | 
             
              </tr>
         | 
| 752 643 | 
             
              <tr>
         | 
| 753 644 | 
             
                <td>pairing_heap (PairingHeap)</td>
         | 
| 754 | 
            -
                <td> | 
| 755 | 
            -
                <td>60. | 
| 756 | 
            -
                <td> | 
| 645 | 
            +
                <td>232</td>
         | 
| 646 | 
            +
                <td>60.159057</td>
         | 
| 647 | 
            +
                <td>3.936(1.25x slower)</td>
         | 
| 757 648 | 
             
              </tr>
         | 
| 758 649 | 
             
              <tr>
         | 
| 759 650 | 
             
                <td>rb_heap</td>
         | 
| 760 | 
            -
                <td> | 
| 761 | 
            -
                <td>60. | 
| 762 | 
            -
                <td> | 
| 651 | 
            +
                <td>227</td>
         | 
| 652 | 
            +
                <td>60.082482</td>
         | 
| 653 | 
            +
                <td>3.881(1.27x slower)</td>
         | 
| 763 654 | 
             
              </tr>
         | 
| 764 655 | 
             
              <tr>
         | 
| 765 656 | 
             
                <td>Fibonacci</td>
         | 
| 766 | 
            -
                <td> | 
| 767 | 
            -
                <td>60. | 
| 768 | 
            -
                <td> | 
| 657 | 
            +
                <td>101</td>
         | 
| 658 | 
            +
                <td>60.076691</td>
         | 
| 659 | 
            +
                <td>1.721(2.87x slower)</td>
         | 
| 769 660 | 
             
              </tr>
         | 
| 770 661 | 
             
              <tr>
         | 
| 771 662 | 
             
                <td>lazy_priority_queue</td>
         | 
| 772 | 
            -
                <td> | 
| 773 | 
            -
                <td> | 
| 774 | 
            -
                <td> | 
| 663 | 
            +
                <td>66</td>
         | 
| 664 | 
            +
                <td>60.771569</td>
         | 
| 665 | 
            +
                <td>1.1(4.49x slower)</td>
         | 
| 775 666 | 
             
              </tr>
         | 
| 776 667 | 
             
            </table>
         | 
| 777 668 |  | 
| @@ -779,7 +670,7 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 779 670 | 
             
            #### Change priority required
         | 
| 780 671 | 
             
            <table>
         | 
| 781 672 | 
             
              <tr>
         | 
| 782 | 
            -
                <th colspan="4">ruby 3. | 
| 673 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin23]</th>
         | 
| 783 674 | 
             
              </tr>
         | 
| 784 675 | 
             
              <tr>
         | 
| 785 676 | 
             
                <th>Library</th>
         | 
| @@ -791,14 +682,14 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 791 682 | 
             
              </tr>
         | 
| 792 683 | 
             
              <tr>
         | 
| 793 684 | 
             
                <td>lazy_priority_queue</td>
         | 
| 794 | 
            -
                <td> | 
| 685 | 
            +
                <td>2.1x slower</td>
         | 
| 795 686 | 
             
              </tr>
         | 
| 796 687 | 
             
              <tr>
         | 
| 797 688 | 
             
                <td>Fibonacci</td>
         | 
| 798 | 
            -
                <td> | 
| 689 | 
            +
                <td>3.38x slower</td>
         | 
| 799 690 | 
             
              </tr>
         | 
| 800 691 | 
             
              <tr>
         | 
| 801 | 
            -
                <th colspan="4">ruby 3. | 
| 692 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) +YJIT [x86_64-darwin23]</th>
         | 
| 802 693 | 
             
              </tr>
         | 
| 803 694 | 
             
              <tr>
         | 
| 804 695 | 
             
                <th>Library</th>
         | 
| @@ -809,15 +700,15 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 809 700 | 
             
                <td>1</td>
         | 
| 810 701 | 
             
              </tr>
         | 
| 811 702 | 
             
              <tr>
         | 
| 812 | 
            -
                <td> | 
| 813 | 
            -
                <td> | 
| 703 | 
            +
                <td>lazy_priority_queue</td>
         | 
| 704 | 
            +
                <td>2.55x slower</td>
         | 
| 814 705 | 
             
              </tr>
         | 
| 815 706 | 
             
              <tr>
         | 
| 816 | 
            -
                <td> | 
| 817 | 
            -
                <td> | 
| 707 | 
            +
                <td>Fibonacci</td>
         | 
| 708 | 
            +
                <td>2.74x slower</td>
         | 
| 818 709 | 
             
              </tr>
         | 
| 819 710 | 
             
              <tr>
         | 
| 820 | 
            -
                <th colspan="4">jruby 9. | 
| 711 | 
            +
                <th colspan="4">jruby 9.4.5.0 (3.1.4) 2023-11-02 1abae2700f OpenJDK 64-Bit Server VM 21+35-2513 on 21+35-2513 +indy +jit [x86_64-darwin]</th>
         | 
| 821 712 | 
             
              </tr>
         | 
| 822 713 | 
             
              <tr>
         | 
| 823 714 | 
             
                <th>Library</th>
         | 
| @@ -829,14 +720,14 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 829 720 | 
             
              </tr>
         | 
| 830 721 | 
             
              <tr>
         | 
| 831 722 | 
             
                <td>Fibonacci</td>
         | 
| 832 | 
            -
                <td>1. | 
| 723 | 
            +
                <td>1.267x slower</td>
         | 
| 833 724 | 
             
              </tr>
         | 
| 834 725 | 
             
              <tr>
         | 
| 835 726 | 
             
                <td>lazy_priority_queue</td>
         | 
| 836 | 
            -
                <td>1. | 
| 727 | 
            +
                <td>1.396x slower</td>
         | 
| 837 728 | 
             
              </tr>
         | 
| 838 729 | 
             
              <tr>
         | 
| 839 | 
            -
                <th colspan="4">truffleruby  | 
| 730 | 
            +
                <th colspan="4">truffleruby 23.1.2, like ruby 3.2.2, Oracle GraalVM JVM [x86_64-darwin]</th>
         | 
| 840 731 | 
             
              </tr>
         | 
| 841 732 | 
             
              <tr>
         | 
| 842 733 | 
             
                <th>Library</th>
         | 
| @@ -848,18 +739,18 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 848 739 | 
             
              </tr>
         | 
| 849 740 | 
             
              <tr>
         | 
| 850 741 | 
             
                <td>lazy_priority_queue</td>
         | 
| 851 | 
            -
                <td>3. | 
| 742 | 
            +
                <td>3.54x slower</td>
         | 
| 852 743 | 
             
              </tr>
         | 
| 853 744 | 
             
              <tr>
         | 
| 854 745 | 
             
                <td>Fibonacci</td>
         | 
| 855 | 
            -
                <td> | 
| 746 | 
            +
                <td>5.86x slower</td>
         | 
| 856 747 | 
             
              </tr>
         | 
| 857 748 | 
             
            </table>
         | 
| 858 749 |  | 
| 859 750 | 
             
            #### Change priority not required
         | 
| 860 751 | 
             
            <table>
         | 
| 861 752 | 
             
              <tr>
         | 
| 862 | 
            -
                <th colspan="4">ruby 3. | 
| 753 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin23]</th>
         | 
| 863 754 | 
             
              </tr>
         | 
| 864 755 | 
             
              <tr>
         | 
| 865 756 | 
             
                <th>Library</th>
         | 
| @@ -871,22 +762,22 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 871 762 | 
             
              </tr>
         | 
| 872 763 | 
             
              <tr>
         | 
| 873 764 | 
             
                <td>pairing_heap (PairingHeap)</td>
         | 
| 874 | 
            -
                <td>1. | 
| 765 | 
            +
                <td>1.29x slower</td>
         | 
| 875 766 | 
             
              </tr>
         | 
| 876 767 | 
             
              <tr>
         | 
| 877 768 | 
             
                <td>rb_heap</td>
         | 
| 878 | 
            -
                <td>1. | 
| 769 | 
            +
                <td>1.53x slower</td>
         | 
| 879 770 | 
             
              </tr>
         | 
| 880 771 | 
             
              <tr>
         | 
| 881 772 | 
             
                <td>lazy_priority_queue</td>
         | 
| 882 | 
            -
                <td>2. | 
| 773 | 
            +
                <td>2.6x slower</td>
         | 
| 883 774 | 
             
              </tr>
         | 
| 884 775 | 
             
              <tr>
         | 
| 885 776 | 
             
                <td>Fibonacci</td>
         | 
| 886 | 
            -
                <td> | 
| 777 | 
            +
                <td>4.29x slower</td>
         | 
| 887 778 | 
             
              </tr>
         | 
| 888 779 | 
             
              <tr>
         | 
| 889 | 
            -
                <th colspan="4">ruby 3. | 
| 780 | 
            +
                <th colspan="4">ruby 3.3.0 (2023-12-25 revision 5124f9ac75) +YJIT [x86_64-darwin23]</th>
         | 
| 890 781 | 
             
              </tr>
         | 
| 891 782 | 
             
              <tr>
         | 
| 892 783 | 
             
                <th>Library</th>
         | 
| @@ -896,24 +787,24 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 896 787 | 
             
                <td>pairing_heap (SimplePairingHeap)</td>
         | 
| 897 788 | 
             
                <td>1</td>
         | 
| 898 789 | 
             
              </tr>
         | 
| 899 | 
            -
              <tr>
         | 
| 900 | 
            -
                <td>pairing_heap (PairingHeap)</td>
         | 
| 901 | 
            -
                <td>1.348x slower</td>
         | 
| 902 | 
            -
              </tr>
         | 
| 903 790 | 
             
              <tr>
         | 
| 904 791 | 
             
                <td>rb_heap</td>
         | 
| 905 | 
            -
                <td>1. | 
| 792 | 
            +
                <td>1.227x slower</td>
         | 
| 906 793 | 
             
              </tr>
         | 
| 907 794 | 
             
              <tr>
         | 
| 908 | 
            -
                <td> | 
| 909 | 
            -
                <td>1. | 
| 795 | 
            +
                <td>pairing_heap (PairingHeap)</td>
         | 
| 796 | 
            +
                <td>1.316x slower</td>
         | 
| 910 797 | 
             
              </tr>
         | 
| 911 798 | 
             
              <tr>
         | 
| 912 799 | 
             
                <td>lazy_priority_queue</td>
         | 
| 913 | 
            -
                <td> | 
| 800 | 
            +
                <td>3.094x slower</td>
         | 
| 801 | 
            +
              </tr>
         | 
| 802 | 
            +
              <tr>
         | 
| 803 | 
            +
                <td>Fibonacci</td>
         | 
| 804 | 
            +
                <td>3.79x slower</td>
         | 
| 914 805 | 
             
              </tr>
         | 
| 915 806 | 
             
              <tr>
         | 
| 916 | 
            -
                <th colspan="4">jruby 9. | 
| 807 | 
            +
                <th colspan="4">jruby 9.4.5.0 (3.1.4) 2023-11-02 1abae2700f OpenJDK 64-Bit Server VM 21+35-2513 on 21+35-2513 +indy +jit [x86_64-darwin]</th>
         | 
| 917 808 | 
             
              </tr>
         | 
| 918 809 | 
             
              <tr>
         | 
| 919 810 | 
             
                <th>Library</th>
         | 
| @@ -921,26 +812,26 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 921 812 | 
             
              </tr>
         | 
| 922 813 | 
             
              <tr>
         | 
| 923 814 | 
             
                <td>pairing_heap (SimplePairingHeap)</td>
         | 
| 924 | 
            -
                <td>1</td>
         | 
| 815 | 
            +
                <td>1.033x slower</td>
         | 
| 925 816 | 
             
              </tr>
         | 
| 926 817 | 
             
              <tr>
         | 
| 927 818 | 
             
                <td>rb_heap</td>
         | 
| 928 | 
            -
                <td>1. | 
| 819 | 
            +
                <td>1.133x slower</td>
         | 
| 929 820 | 
             
              </tr>
         | 
| 930 821 | 
             
              <tr>
         | 
| 931 822 | 
             
                <td>pairing_heap (PairingHeap)</td>
         | 
| 932 | 
            -
                <td>1. | 
| 823 | 
            +
                <td>1.302x slower</td>
         | 
| 933 824 | 
             
              </tr>
         | 
| 934 825 | 
             
              <tr>
         | 
| 935 826 | 
             
                <td>Fibonacci</td>
         | 
| 936 | 
            -
                <td>1. | 
| 827 | 
            +
                <td>1.602x slower</td>
         | 
| 937 828 | 
             
              </tr>
         | 
| 938 829 | 
             
              <tr>
         | 
| 939 830 | 
             
                <td>lazy_priority_queue</td>
         | 
| 940 | 
            -
                <td> | 
| 831 | 
            +
                <td>1.777x slower</td>
         | 
| 941 832 | 
             
              </tr>
         | 
| 942 833 | 
             
              <tr>
         | 
| 943 | 
            -
                <th colspan="4">truffleruby  | 
| 834 | 
            +
                <th colspan="4">truffleruby 23.1.2, like ruby 3.2.2, Oracle GraalVM JVM [x86_64-darwin]</th>
         | 
| 944 835 | 
             
              </tr>
         | 
| 945 836 | 
             
              <tr>
         | 
| 946 837 | 
             
                <th>Library</th>
         | 
| @@ -951,20 +842,20 @@ Heaps that support change_priority operation use it. Heaps that do not support i | |
| 951 842 | 
             
                <td>1</td>
         | 
| 952 843 | 
             
              </tr>
         | 
| 953 844 | 
             
              <tr>
         | 
| 954 | 
            -
                <td> | 
| 955 | 
            -
                <td>1. | 
| 845 | 
            +
                <td>rb_heap</td>
         | 
| 846 | 
            +
                <td>1.35x slower</td>
         | 
| 956 847 | 
             
              </tr>
         | 
| 957 848 | 
             
              <tr>
         | 
| 958 | 
            -
                <td> | 
| 959 | 
            -
                <td>1. | 
| 849 | 
            +
                <td>pairing_heap (PairingHeap)</td>
         | 
| 850 | 
            +
                <td>1.58x slower</td>
         | 
| 960 851 | 
             
              </tr>
         | 
| 961 852 | 
             
              <tr>
         | 
| 962 853 | 
             
                <td>lazy_priority_queue</td>
         | 
| 963 | 
            -
                <td> | 
| 854 | 
            +
                <td>5.46x slower</td>
         | 
| 964 855 | 
             
              </tr>
         | 
| 965 856 | 
             
              <tr>
         | 
| 966 857 | 
             
                <td>Fibonacci</td>
         | 
| 967 | 
            -
                <td> | 
| 858 | 
            +
                <td>7.54x slower</td>
         | 
| 968 859 | 
             
              </tr>
         | 
| 969 860 | 
             
            </table>
         | 
| 970 861 |  |