Benchmarks

Benchmarks for the Combinatorics code can be found in the benchmarks/ directory.

Benchmark machine specs:

  • CPU: AMD Athlon(tm) 64 Processor 3400+ (2202.785 MHz)
  • Cache Size: 1024 KB
  • Memory: 1 Gb

List Comprehensions:

Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:

                  user     system      total        real
singleton:    0.050000   0.020000   0.070000 (  0.081225)
single-enum:  0.000000   0.000000   0.000000 (  0.009706)
depth 1:      0.000000   0.000000   0.000000 (  0.000652)
depth 2:      0.070000   0.010000   0.080000 (  0.084974)
depth 3:      5.670000   0.240000   5.910000 (  6.623347)

JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:

                  user     system      total        real
singleton:    1.365000   0.000000   1.365000 (  1.212000)
single-enum:  0.134000   0.000000   0.134000 (  0.134000)
depth 1:      0.046000   0.000000   0.046000 (  0.045000)
depth 2:      1.613000   0.000000   1.613000 (  1.614000)
depth 3:     10.054000   0.000000  10.054000 ( 10.054000)

Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:

                  user     system      total        real
singleton:    0.802878   0.112983   0.915861 (  1.722362)
single-enum:  0.128980   0.011998   0.140978 (  0.176392)
depth 1:      0.000000   0.000000   0.000000 (  0.000897)
depth 2:      0.058991   0.004999   0.063990 (  0.143435)
depth 3:      3.483470   0.148977   3.632447 (  5.156510)

Cartesian Product

Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:

                   user     system      total        real
{100} x {100}  0.070000   0.000000   0.070000 (  0.084734)
{200} x {200}  0.290000   0.020000   0.310000 (  0.347752)
{400} x {400}  1.370000   0.070000   1.440000 (  1.582130)
{800} x {800}  8.250000   0.370000   8.620000 (  9.498290)

JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:

                   user     system      total        real
{100} x {100}  2.469000   0.000000   2.469000 (  2.349000)
{200} x {200}  2.575000   0.000000   2.575000 (  2.574000)
{400} x {400}  2.354000   0.000000   2.354000 (  2.354000)
{800} x {800}  7.730000   0.000000   7.730000 (  7.730000)

Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:

                   user     system      total        real
{100} x {100}  0.114982   0.051992   0.166974 (  1.184129)
{200} x {200}  0.391941   0.159976   0.551917 (  1.396105)
{400} x {400}  1.333797   0.653901   1.987698 (  3.120384)
{800} x {800}  5.961093   2.614602   8.575695 ( 13.643119)

Choose

Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:

      user     system      total        real
n=20 k=1  0.000000   0.000000   0.000000 (  0.000172)
n=20 k=2  0.010000   0.000000   0.010000 (  0.003592)
n=20 k=3  0.010000   0.000000   0.010000 (  0.017710)
n=20 k=4  0.040000   0.000000   0.040000 (  0.060566)
n=20 k=5  0.180000   0.010000   0.190000 (  0.211709)
n=20 k=6  0.490000   0.030000   0.520000 (  0.583004)
n=20 k=7  1.110000   0.070000   1.180000 (  1.307065)
n=20 k=8  1.980000   0.050000   2.030000 (  2.204111)
n=20 k=9  2.770000   0.120000   2.890000 (  3.221468)
n=20 k=10  3.310000   0.150000   3.460000 (  3.904973)
n=20 k=11  3.120000   0.150000   3.270000 (  4.085721)
n=20 k=12  2.520000   0.140000   2.660000 (  3.139445)
n=20 k=13  1.570000   0.060000   1.630000 (  1.853883)
n=20 k=14  0.820000   0.040000   0.860000 (  1.142598)
n=20 k=15  0.350000   0.020000   0.370000 (  0.436363)
n=20 k=16  0.110000   0.000000   0.110000 (  0.141398)
n=20 k=17  0.030000   0.010000   0.040000 (  0.047691)
n=20 k=18  0.000000   0.000000   0.000000 (  0.003746)
n=20 k=19  0.000000   0.000000   0.000000 (  0.000438)
n=20 k=20  0.000000   0.000000   0.000000 (  0.000043)

JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:

      user     system      total        real
n=20 k=1  0.271000   0.000000   0.271000 (  0.048000)
n=20 k=2  0.163000   0.000000   0.163000 (  0.163000)
n=20 k=3  0.184000   0.000000   0.184000 (  0.184000)
n=20 k=4  0.759000   0.000000   0.759000 (  0.759000)
n=20 k=5  1.157000   0.000000   1.157000 (  1.157000)
n=20 k=6  1.116000   0.000000   1.116000 (  1.116000)
n=20 k=7  0.490000   0.000000   0.490000 (  0.490000)
n=20 k=8  0.632000   0.000000   0.632000 (  0.632000)
n=20 k=9  0.907000   0.000000   0.907000 (  0.908000)
n=20 k=10  1.040000   0.000000   1.040000 (  1.040000)
n=20 k=11  0.991000   0.000000   0.991000 (  0.991000)
n=20 k=12  0.784000   0.000000   0.784000 (  0.784000)
n=20 k=13  0.513000   0.000000   0.513000 (  0.514000)
n=20 k=14  0.285000   0.000000   0.285000 (  0.285000)
n=20 k=15  0.141000   0.000000   0.141000 (  0.142000)
n=20 k=16  0.045000   0.000000   0.045000 (  0.045000)
n=20 k=17  0.009000   0.000000   0.009000 (  0.009000)
n=20 k=18  0.004000   0.000000   0.004000 (  0.004000)
n=20 k=19  0.001000   0.000000   0.001000 (  0.001000)
n=20 k=20  0.000000   0.000000   0.000000 (  0.000000)

Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:

      user     system      total        real
n=20 k=1  0.001000   0.000000   0.001000 (  0.001005)
n=20 k=2  0.005999   0.000000   0.005999 (  0.016681)
n=20 k=3  0.051992   0.002000   0.053992 (  0.177731)
n=20 k=4  0.159976   0.005999   0.165975 (  0.564428)
n=20 k=5  0.412938   0.016998   0.429936 (  1.410280)
n=20 k=6  1.045841   0.034994   1.080835 (  1.220624)
n=20 k=7  2.234661   0.073989   2.308650 (  2.514775)
n=20 k=8  3.821419   0.157976   3.979395 (  4.479381)
n=20 k=9  5.377183   0.230965   5.608148 (  6.545616)
n=20 k=10  6.270047   0.271958   6.542005 (  7.481663)
n=20 k=11  6.056079   0.201970   6.258049 (  7.179931)
n=20 k=12  4.684288   0.237963   4.922251 (  5.829043)
n=20 k=13  3.066534   0.122982   3.189516 (  3.633006)
n=20 k=14  1.716739   0.060990   1.777729 (  2.083863)
n=20 k=15  0.708892   0.031996   0.740888 (  0.814869)
n=20 k=16  0.233965   0.006999   0.240964 (  0.272663)
n=20 k=17  0.057992   0.000999   0.058991 (  0.075194)
n=20 k=18  0.008999   0.001000   0.009999 (  0.015695)
n=20 k=19  0.001999   0.000000   0.001999 (  0.001539)
n=20 k=20  0.000000   0.000000   0.000000 (  0.000253)

Permute

Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:

      user     system      total        real
r=1  0.000000   0.000000   0.000000 (  0.000029)
r=2  0.000000   0.000000   0.000000 (  0.000029)
r=3  0.010000   0.000000   0.010000 (  0.002234)
r=4  0.000000   0.000000   0.000000 (  0.002388)
r=5  0.020000   0.000000   0.020000 (  0.028709)
r=6  0.100000   0.000000   0.100000 (  0.119063)
r=7  0.380000   0.030000   0.410000 (  0.462036)
r=8  1.210000   0.080000   1.290000 (  1.447420)
r=9  2.510000   0.130000   2.640000 (  2.919967)
r=10  2.840000   0.200000   3.040000 (  3.664906)

JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:

      user     system      total        real
r=1  0.274000   0.000000   0.274000 (  0.041000)
r=2  0.001000   0.000000   0.001000 (  0.001000)
r=3  0.012000   0.000000   0.012000 (  0.012000)
r=4  0.154000   0.000000   0.154000 (  0.154000)
r=5  0.306000   0.000000   0.306000 (  0.307000)
r=6  0.081000   0.000000   0.081000 (  0.081000)
r=7  0.168000   0.000000   0.168000 (  0.168000)
r=8  0.516000   0.000000   0.516000 (  0.517000)
r=9  1.224000   0.000000   1.224000 (  1.224000)
r=10  1.649000   0.000000   1.649000 (  1.649000)

Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:

      user     system      total        real
r=1  0.001000   0.000000   0.001000 (  0.000062)
r=2  0.001000   0.000000   0.001000 (  0.004535)
r=3  0.006000   0.000000   0.006000 (  0.016175)
r=4  0.049993   0.003000   0.052993 (  0.171867)
r=5  0.153976   0.012998   0.166974 (  0.584311)
r=6  0.578912   0.020997   0.599909 (  0.654977)
r=7  2.694590   0.106984   2.801574 (  3.170215)
r=8  9.167606   0.337948   9.505554 ( 10.952164)
r=9 21.419744   0.785881  22.205625 ( 24.619187)
r=10 29.557506   1.087834  30.645340 ( 34.234011)

Derange

Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:

      user     system      total        real
n=1  0.000000   0.000000   0.000000 (  0.000021)
n=2  0.000000   0.000000   0.000000 (  0.000041)
n=3  0.000000   0.000000   0.000000 (  0.000021)
n=4  0.000000   0.000000   0.000000 (  0.000069)
n=5  0.000000   0.000000   0.000000 (  0.000393)
n=6  0.000000   0.000000   0.000000 (  0.002281)
n=7  0.020000   0.010000   0.030000 (  0.028188)
n=8  0.170000   0.000000   0.170000 (  0.207589)
n=9  1.630000   0.070000   1.700000 (  1.974767)
n=10 17.200000   0.670000  17.870000 ( 20.047089)

JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:

      user     system      total        real
n=1  0.150000   0.000000   0.150000 (  0.023000)
n=2  0.003000   0.000000   0.003000 (  0.003000)
n=3  0.001000   0.000000   0.001000 (  0.001000)
n=4  0.006000   0.000000   0.006000 (  0.007000)
n=5  0.022000   0.000000   0.022000 (  0.022000)
n=6  0.173000   0.000000   0.173000 (  0.173000)
n=7  1.045000   0.000000   1.045000 (  1.045000)
n=8  0.821000   0.000000   0.821000 (  0.821000)
n=9  1.917000   0.000000   1.917000 (  1.917000)
n=10 25.652000   0.000000  25.652000 ( 25.652000)

Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:

      user     system      total        real
n=1  0.000000   0.000000   0.000000 (  0.000025)
n=2  0.000000   0.000000   0.000000 (  0.000394)
n=3  0.000000   0.000000   0.000000 (  0.000145)
n=4  0.000000   0.000000   0.000000 (  0.000637)
n=5  0.004000   0.000000   0.004000 (  0.010315)
n=6  0.036994   0.003000   0.039994 (  0.151349)
n=7  0.130980   0.009998   0.140978 (  0.584286)
n=8  0.579912   0.028996   0.608908 (  0.946738)
n=9  5.563154   0.191970   5.755124 (  6.588485)
n=10 59.973882   2.427631  62.401513 ( 80.877847)

Power Set

Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:

      user     system      total        real
n=10  0.000000   0.000000   0.000000 (  0.015275)
n=11  0.020000   0.000000   0.020000 (  0.033685)
n=12  0.050000   0.000000   0.050000 (  0.063667)
n=13  0.110000   0.010000   0.120000 (  0.131612)
n=14  0.230000   0.010000   0.240000 (  0.276595)
n=15  0.500000   0.010000   0.510000 (  0.559058)
n=16  1.040000   0.050000   1.090000 (  1.222567)
n=17  2.110000   0.120000   2.230000 (  2.607683)
n=18  4.410000   0.230000   4.640000 (  5.223074)
n=19  9.240000   0.460000   9.700000 ( 10.995905)
n=20 19.280000   0.810000  20.090000 ( 23.152085)

JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:

      user     system      total        real
n=10  0.539000   0.000000   0.539000 (  0.369000)
n=11  0.609000   0.000000   0.609000 (  0.609000)
n=12  0.490000   0.000000   0.490000 (  0.490000)
n=13  0.701000   0.000000   0.701000 (  0.701000)
n=14  1.013000   0.000000   1.013000 (  1.013000)
n=15  0.729000   0.000000   0.729000 (  0.729000)
n=16  0.306000   0.000000   0.306000 (  0.306000)
n=17  0.601000   0.000000   0.601000 (  0.601000)
n=18  1.291000   0.000000   1.291000 (  1.291000)
n=19  2.591000   0.000000   2.591000 (  2.591000)
n=20  5.573000   0.000000   5.573000 (  5.573000)

Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:

      user     system      total        real
n=10  0.050992   0.009999   0.060991 (  0.196739)
n=11  0.088986   0.011998   0.100984 (  0.295952)
n=12  0.141979   0.003999   0.145978 (  0.632228)
n=13  0.248962   0.012998   0.261960 (  0.939763)
n=14  0.482927   0.015998   0.498925 (  0.562893)
n=15  0.988849   0.035994   1.024843 (  1.134604)
n=16  2.034691   0.076988   2.111679 (  2.342626)
n=17  4.188363   0.158976   4.347339 (  4.882135)
n=18  8.595693   0.347947   8.943640 ( 10.191949)
n=19 17.662315   0.674898  18.337213 ( 20.490505)
n=20 36.434461   1.536766  37.971227 ( 42.821087)