combinatorics 0.3.1 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/.gitignore +8 -0
- data/Benchmarks.md +257 -26
- data/ChangeLog.md +12 -0
- data/LICENSE.txt +1 -2
- data/README.md +102 -32
- data/Rakefile +13 -2
- data/benchmarks/cartesian_product.rb +18 -0
- data/benchmarks/choose.rb +19 -0
- data/benchmarks/derange.rb +18 -0
- data/benchmarks/list_comprehension.rb +2 -5
- data/benchmarks/permute.rb +18 -0
- data/benchmarks/power_set.rb +18 -0
- data/combinatorics.gemspec +124 -7
- data/gemspec.yml +11 -6
- data/lib/combinatorics.rb +7 -0
- data/lib/combinatorics/cartesian_product.rb +3 -0
- data/lib/combinatorics/cartesian_product/cardinality.rb +45 -0
- data/lib/combinatorics/cartesian_product/extensions.rb +2 -0
- data/lib/combinatorics/cartesian_product/extensions/array.rb +7 -0
- data/lib/combinatorics/cartesian_product/extensions/set.rb +9 -0
- data/lib/combinatorics/cartesian_product/mixin.rb +57 -0
- data/lib/combinatorics/choose.rb +3 -0
- data/lib/combinatorics/choose/cardinality.rb +99 -0
- data/lib/combinatorics/choose/extensions.rb +2 -0
- data/lib/combinatorics/choose/extensions/array.rb +5 -0
- data/lib/combinatorics/choose/extensions/set.rb +6 -0
- data/lib/combinatorics/choose/mixin.rb +53 -0
- data/lib/combinatorics/derange.rb +3 -0
- data/lib/combinatorics/derange/cardinality.rb +23 -0
- data/lib/combinatorics/derange/extensions.rb +1 -0
- data/lib/combinatorics/derange/extensions/array.rb +5 -0
- data/lib/combinatorics/derange/mixin.rb +47 -0
- data/lib/combinatorics/enumerator.rb +2 -0
- data/lib/combinatorics/extensions/math.rb +177 -0
- data/lib/combinatorics/generator.rb +8 -1
- data/lib/combinatorics/permute.rb +3 -0
- data/lib/combinatorics/permute/cardinality.rb +98 -0
- data/lib/combinatorics/permute/extensions.rb +2 -0
- data/lib/combinatorics/permute/extensions/array.rb +7 -0
- data/lib/combinatorics/permute/extensions/set.rb +9 -0
- data/lib/combinatorics/permute/mixin.rb +48 -0
- data/lib/combinatorics/power_set.rb +1 -0
- data/lib/combinatorics/power_set/cardinality.rb +36 -0
- data/lib/combinatorics/power_set/mixin.rb +19 -22
- data/lib/combinatorics/version.rb +2 -2
- data/spec/cartesian_product/array_spec.rb +10 -0
- data/spec/cartesian_product/cardinality_spec.rb +64 -0
- data/spec/cartesian_product/mixin_examples.rb +98 -0
- data/spec/cartesian_product/set_spec.rb +10 -0
- data/spec/choose/array_spec.rb +9 -0
- data/spec/choose/cardinality_spec.rb +132 -0
- data/spec/choose/mixin_examples.rb +48 -0
- data/spec/choose/set_spec.rb +9 -0
- data/spec/derange/array_spec.rb +10 -0
- data/spec/derange/cardinality_spec.rb +14 -0
- data/spec/derange/mixin_examples.rb +52 -0
- data/spec/extensions/math_spec.rb +100 -0
- data/spec/extensions/range_spec.rb +1 -1
- data/spec/permute/array_spec.rb +10 -0
- data/spec/permute/cardinality_spec.rb +146 -0
- data/spec/permute/mixin_examples.rb +42 -0
- data/spec/permute/set_spec.rb +10 -0
- data/spec/power_set/array_spec.rb +3 -2
- data/spec/power_set/cardinality_spec.rb +32 -0
- data/spec/power_set/mixin_examples.rb +17 -8
- data/spec/power_set/set_spec.rb +3 -2
- data/spec/spec_helper.rb +5 -3
- metadata +114 -95
data/.gemtest
ADDED
File without changes
|
data/.gitignore
ADDED
data/Benchmarks.md
CHANGED
@@ -11,40 +11,271 @@ Benchmark machine specs:
|
|
11
11
|
|
12
12
|
## List Comprehensions:
|
13
13
|
|
14
|
-
Ruby 1.9.2-
|
14
|
+
Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:
|
15
15
|
|
16
16
|
user system total real
|
17
|
-
singleton: 0.
|
18
|
-
single-enum: 0.
|
19
|
-
depth 1: 0.000000 0.000000 0.000000 ( 0.
|
20
|
-
depth 2: 0.
|
21
|
-
depth 3:
|
17
|
+
singleton: 0.050000 0.020000 0.070000 ( 0.081225)
|
18
|
+
single-enum: 0.000000 0.000000 0.000000 ( 0.009706)
|
19
|
+
depth 1: 0.000000 0.000000 0.000000 ( 0.000652)
|
20
|
+
depth 2: 0.070000 0.010000 0.080000 ( 0.084974)
|
21
|
+
depth 3: 5.670000 0.240000 5.910000 ( 6.623347)
|
22
22
|
|
23
|
-
|
23
|
+
JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768)
|
24
|
+
(OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:
|
24
25
|
|
25
26
|
user system total real
|
26
|
-
singleton:
|
27
|
-
single-enum: 0.
|
28
|
-
depth 1: 0.
|
29
|
-
depth 2:
|
30
|
-
depth 3:
|
27
|
+
singleton: 1.365000 0.000000 1.365000 ( 1.212000)
|
28
|
+
single-enum: 0.134000 0.000000 0.134000 ( 0.134000)
|
29
|
+
depth 1: 0.046000 0.000000 0.046000 ( 0.045000)
|
30
|
+
depth 2: 1.613000 0.000000 1.613000 ( 1.614000)
|
31
|
+
depth 3: 10.054000 0.000000 10.054000 ( 10.054000)
|
31
32
|
|
32
|
-
|
33
|
-
(OpenJDK 64-Bit Server VM 1.6.0_18) [amd64-java]:
|
33
|
+
Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:
|
34
34
|
|
35
35
|
user system total real
|
36
|
-
singleton:
|
37
|
-
single-enum: 0.
|
38
|
-
depth 1: 0.
|
39
|
-
depth 2:
|
40
|
-
depth 3:
|
36
|
+
singleton: 0.802878 0.112983 0.915861 ( 1.722362)
|
37
|
+
single-enum: 0.128980 0.011998 0.140978 ( 0.176392)
|
38
|
+
depth 1: 0.000000 0.000000 0.000000 ( 0.000897)
|
39
|
+
depth 2: 0.058991 0.004999 0.063990 ( 0.143435)
|
40
|
+
depth 3: 3.483470 0.148977 3.632447 ( 5.156510)
|
41
41
|
|
42
|
-
|
42
|
+
## Cartesian Product
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
44
|
+
Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:
|
45
|
+
|
46
|
+
user system total real
|
47
|
+
{100} x {100} 0.070000 0.000000 0.070000 ( 0.084734)
|
48
|
+
{200} x {200} 0.290000 0.020000 0.310000 ( 0.347752)
|
49
|
+
{400} x {400} 1.370000 0.070000 1.440000 ( 1.582130)
|
50
|
+
{800} x {800} 8.250000 0.370000 8.620000 ( 9.498290)
|
51
|
+
|
52
|
+
JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768)
|
53
|
+
(OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:
|
54
|
+
|
55
|
+
user system total real
|
56
|
+
{100} x {100} 2.469000 0.000000 2.469000 ( 2.349000)
|
57
|
+
{200} x {200} 2.575000 0.000000 2.575000 ( 2.574000)
|
58
|
+
{400} x {400} 2.354000 0.000000 2.354000 ( 2.354000)
|
59
|
+
{800} x {800} 7.730000 0.000000 7.730000 ( 7.730000)
|
60
|
+
|
61
|
+
Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:
|
62
|
+
|
63
|
+
user system total real
|
64
|
+
{100} x {100} 0.114982 0.051992 0.166974 ( 1.184129)
|
65
|
+
{200} x {200} 0.391941 0.159976 0.551917 ( 1.396105)
|
66
|
+
{400} x {400} 1.333797 0.653901 1.987698 ( 3.120384)
|
67
|
+
{800} x {800} 5.961093 2.614602 8.575695 ( 13.643119)
|
68
|
+
|
69
|
+
## Choose
|
70
|
+
|
71
|
+
Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:
|
72
|
+
|
73
|
+
user system total real
|
74
|
+
n=20 k=1 0.000000 0.000000 0.000000 ( 0.000172)
|
75
|
+
n=20 k=2 0.010000 0.000000 0.010000 ( 0.003592)
|
76
|
+
n=20 k=3 0.010000 0.000000 0.010000 ( 0.017710)
|
77
|
+
n=20 k=4 0.040000 0.000000 0.040000 ( 0.060566)
|
78
|
+
n=20 k=5 0.180000 0.010000 0.190000 ( 0.211709)
|
79
|
+
n=20 k=6 0.490000 0.030000 0.520000 ( 0.583004)
|
80
|
+
n=20 k=7 1.110000 0.070000 1.180000 ( 1.307065)
|
81
|
+
n=20 k=8 1.980000 0.050000 2.030000 ( 2.204111)
|
82
|
+
n=20 k=9 2.770000 0.120000 2.890000 ( 3.221468)
|
83
|
+
n=20 k=10 3.310000 0.150000 3.460000 ( 3.904973)
|
84
|
+
n=20 k=11 3.120000 0.150000 3.270000 ( 4.085721)
|
85
|
+
n=20 k=12 2.520000 0.140000 2.660000 ( 3.139445)
|
86
|
+
n=20 k=13 1.570000 0.060000 1.630000 ( 1.853883)
|
87
|
+
n=20 k=14 0.820000 0.040000 0.860000 ( 1.142598)
|
88
|
+
n=20 k=15 0.350000 0.020000 0.370000 ( 0.436363)
|
89
|
+
n=20 k=16 0.110000 0.000000 0.110000 ( 0.141398)
|
90
|
+
n=20 k=17 0.030000 0.010000 0.040000 ( 0.047691)
|
91
|
+
n=20 k=18 0.000000 0.000000 0.000000 ( 0.003746)
|
92
|
+
n=20 k=19 0.000000 0.000000 0.000000 ( 0.000438)
|
93
|
+
n=20 k=20 0.000000 0.000000 0.000000 ( 0.000043)
|
94
|
+
|
95
|
+
JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768)
|
96
|
+
(OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:
|
97
|
+
|
98
|
+
user system total real
|
99
|
+
n=20 k=1 0.271000 0.000000 0.271000 ( 0.048000)
|
100
|
+
n=20 k=2 0.163000 0.000000 0.163000 ( 0.163000)
|
101
|
+
n=20 k=3 0.184000 0.000000 0.184000 ( 0.184000)
|
102
|
+
n=20 k=4 0.759000 0.000000 0.759000 ( 0.759000)
|
103
|
+
n=20 k=5 1.157000 0.000000 1.157000 ( 1.157000)
|
104
|
+
n=20 k=6 1.116000 0.000000 1.116000 ( 1.116000)
|
105
|
+
n=20 k=7 0.490000 0.000000 0.490000 ( 0.490000)
|
106
|
+
n=20 k=8 0.632000 0.000000 0.632000 ( 0.632000)
|
107
|
+
n=20 k=9 0.907000 0.000000 0.907000 ( 0.908000)
|
108
|
+
n=20 k=10 1.040000 0.000000 1.040000 ( 1.040000)
|
109
|
+
n=20 k=11 0.991000 0.000000 0.991000 ( 0.991000)
|
110
|
+
n=20 k=12 0.784000 0.000000 0.784000 ( 0.784000)
|
111
|
+
n=20 k=13 0.513000 0.000000 0.513000 ( 0.514000)
|
112
|
+
n=20 k=14 0.285000 0.000000 0.285000 ( 0.285000)
|
113
|
+
n=20 k=15 0.141000 0.000000 0.141000 ( 0.142000)
|
114
|
+
n=20 k=16 0.045000 0.000000 0.045000 ( 0.045000)
|
115
|
+
n=20 k=17 0.009000 0.000000 0.009000 ( 0.009000)
|
116
|
+
n=20 k=18 0.004000 0.000000 0.004000 ( 0.004000)
|
117
|
+
n=20 k=19 0.001000 0.000000 0.001000 ( 0.001000)
|
118
|
+
n=20 k=20 0.000000 0.000000 0.000000 ( 0.000000)
|
119
|
+
|
120
|
+
Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:
|
121
|
+
|
122
|
+
user system total real
|
123
|
+
n=20 k=1 0.001000 0.000000 0.001000 ( 0.001005)
|
124
|
+
n=20 k=2 0.005999 0.000000 0.005999 ( 0.016681)
|
125
|
+
n=20 k=3 0.051992 0.002000 0.053992 ( 0.177731)
|
126
|
+
n=20 k=4 0.159976 0.005999 0.165975 ( 0.564428)
|
127
|
+
n=20 k=5 0.412938 0.016998 0.429936 ( 1.410280)
|
128
|
+
n=20 k=6 1.045841 0.034994 1.080835 ( 1.220624)
|
129
|
+
n=20 k=7 2.234661 0.073989 2.308650 ( 2.514775)
|
130
|
+
n=20 k=8 3.821419 0.157976 3.979395 ( 4.479381)
|
131
|
+
n=20 k=9 5.377183 0.230965 5.608148 ( 6.545616)
|
132
|
+
n=20 k=10 6.270047 0.271958 6.542005 ( 7.481663)
|
133
|
+
n=20 k=11 6.056079 0.201970 6.258049 ( 7.179931)
|
134
|
+
n=20 k=12 4.684288 0.237963 4.922251 ( 5.829043)
|
135
|
+
n=20 k=13 3.066534 0.122982 3.189516 ( 3.633006)
|
136
|
+
n=20 k=14 1.716739 0.060990 1.777729 ( 2.083863)
|
137
|
+
n=20 k=15 0.708892 0.031996 0.740888 ( 0.814869)
|
138
|
+
n=20 k=16 0.233965 0.006999 0.240964 ( 0.272663)
|
139
|
+
n=20 k=17 0.057992 0.000999 0.058991 ( 0.075194)
|
140
|
+
n=20 k=18 0.008999 0.001000 0.009999 ( 0.015695)
|
141
|
+
n=20 k=19 0.001999 0.000000 0.001999 ( 0.001539)
|
142
|
+
n=20 k=20 0.000000 0.000000 0.000000 ( 0.000253)
|
143
|
+
|
144
|
+
## Permute
|
145
|
+
|
146
|
+
Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:
|
147
|
+
|
148
|
+
user system total real
|
149
|
+
r=1 0.000000 0.000000 0.000000 ( 0.000029)
|
150
|
+
r=2 0.000000 0.000000 0.000000 ( 0.000029)
|
151
|
+
r=3 0.010000 0.000000 0.010000 ( 0.002234)
|
152
|
+
r=4 0.000000 0.000000 0.000000 ( 0.002388)
|
153
|
+
r=5 0.020000 0.000000 0.020000 ( 0.028709)
|
154
|
+
r=6 0.100000 0.000000 0.100000 ( 0.119063)
|
155
|
+
r=7 0.380000 0.030000 0.410000 ( 0.462036)
|
156
|
+
r=8 1.210000 0.080000 1.290000 ( 1.447420)
|
157
|
+
r=9 2.510000 0.130000 2.640000 ( 2.919967)
|
158
|
+
r=10 2.840000 0.200000 3.040000 ( 3.664906)
|
159
|
+
|
160
|
+
JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768)
|
161
|
+
(OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:
|
162
|
+
|
163
|
+
user system total real
|
164
|
+
r=1 0.274000 0.000000 0.274000 ( 0.041000)
|
165
|
+
r=2 0.001000 0.000000 0.001000 ( 0.001000)
|
166
|
+
r=3 0.012000 0.000000 0.012000 ( 0.012000)
|
167
|
+
r=4 0.154000 0.000000 0.154000 ( 0.154000)
|
168
|
+
r=5 0.306000 0.000000 0.306000 ( 0.307000)
|
169
|
+
r=6 0.081000 0.000000 0.081000 ( 0.081000)
|
170
|
+
r=7 0.168000 0.000000 0.168000 ( 0.168000)
|
171
|
+
r=8 0.516000 0.000000 0.516000 ( 0.517000)
|
172
|
+
r=9 1.224000 0.000000 1.224000 ( 1.224000)
|
173
|
+
r=10 1.649000 0.000000 1.649000 ( 1.649000)
|
174
|
+
|
175
|
+
Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:
|
176
|
+
|
177
|
+
user system total real
|
178
|
+
r=1 0.001000 0.000000 0.001000 ( 0.000062)
|
179
|
+
r=2 0.001000 0.000000 0.001000 ( 0.004535)
|
180
|
+
r=3 0.006000 0.000000 0.006000 ( 0.016175)
|
181
|
+
r=4 0.049993 0.003000 0.052993 ( 0.171867)
|
182
|
+
r=5 0.153976 0.012998 0.166974 ( 0.584311)
|
183
|
+
r=6 0.578912 0.020997 0.599909 ( 0.654977)
|
184
|
+
r=7 2.694590 0.106984 2.801574 ( 3.170215)
|
185
|
+
r=8 9.167606 0.337948 9.505554 ( 10.952164)
|
186
|
+
r=9 21.419744 0.785881 22.205625 ( 24.619187)
|
187
|
+
r=10 29.557506 1.087834 30.645340 ( 34.234011)
|
188
|
+
|
189
|
+
## Derange
|
190
|
+
|
191
|
+
Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:
|
192
|
+
|
193
|
+
user system total real
|
194
|
+
n=1 0.000000 0.000000 0.000000 ( 0.000021)
|
195
|
+
n=2 0.000000 0.000000 0.000000 ( 0.000041)
|
196
|
+
n=3 0.000000 0.000000 0.000000 ( 0.000021)
|
197
|
+
n=4 0.000000 0.000000 0.000000 ( 0.000069)
|
198
|
+
n=5 0.000000 0.000000 0.000000 ( 0.000393)
|
199
|
+
n=6 0.000000 0.000000 0.000000 ( 0.002281)
|
200
|
+
n=7 0.020000 0.010000 0.030000 ( 0.028188)
|
201
|
+
n=8 0.170000 0.000000 0.170000 ( 0.207589)
|
202
|
+
n=9 1.630000 0.070000 1.700000 ( 1.974767)
|
203
|
+
n=10 17.200000 0.670000 17.870000 ( 20.047089)
|
204
|
+
|
205
|
+
JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768)
|
206
|
+
(OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:
|
207
|
+
|
208
|
+
user system total real
|
209
|
+
n=1 0.150000 0.000000 0.150000 ( 0.023000)
|
210
|
+
n=2 0.003000 0.000000 0.003000 ( 0.003000)
|
211
|
+
n=3 0.001000 0.000000 0.001000 ( 0.001000)
|
212
|
+
n=4 0.006000 0.000000 0.006000 ( 0.007000)
|
213
|
+
n=5 0.022000 0.000000 0.022000 ( 0.022000)
|
214
|
+
n=6 0.173000 0.000000 0.173000 ( 0.173000)
|
215
|
+
n=7 1.045000 0.000000 1.045000 ( 1.045000)
|
216
|
+
n=8 0.821000 0.000000 0.821000 ( 0.821000)
|
217
|
+
n=9 1.917000 0.000000 1.917000 ( 1.917000)
|
218
|
+
n=10 25.652000 0.000000 25.652000 ( 25.652000)
|
219
|
+
|
220
|
+
Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:
|
221
|
+
|
222
|
+
user system total real
|
223
|
+
n=1 0.000000 0.000000 0.000000 ( 0.000025)
|
224
|
+
n=2 0.000000 0.000000 0.000000 ( 0.000394)
|
225
|
+
n=3 0.000000 0.000000 0.000000 ( 0.000145)
|
226
|
+
n=4 0.000000 0.000000 0.000000 ( 0.000637)
|
227
|
+
n=5 0.004000 0.000000 0.004000 ( 0.010315)
|
228
|
+
n=6 0.036994 0.003000 0.039994 ( 0.151349)
|
229
|
+
n=7 0.130980 0.009998 0.140978 ( 0.584286)
|
230
|
+
n=8 0.579912 0.028996 0.608908 ( 0.946738)
|
231
|
+
n=9 5.563154 0.191970 5.755124 ( 6.588485)
|
232
|
+
n=10 59.973882 2.427631 62.401513 ( 80.877847)
|
233
|
+
|
234
|
+
## Power Set
|
235
|
+
|
236
|
+
Ruby 1.9.2-p290 (2011-07-09 revision 32553) [x86_64-linux]:
|
237
|
+
|
238
|
+
user system total real
|
239
|
+
n=10 0.000000 0.000000 0.000000 ( 0.015275)
|
240
|
+
n=11 0.020000 0.000000 0.020000 ( 0.033685)
|
241
|
+
n=12 0.050000 0.000000 0.050000 ( 0.063667)
|
242
|
+
n=13 0.110000 0.010000 0.120000 ( 0.131612)
|
243
|
+
n=14 0.230000 0.010000 0.240000 ( 0.276595)
|
244
|
+
n=15 0.500000 0.010000 0.510000 ( 0.559058)
|
245
|
+
n=16 1.040000 0.050000 1.090000 ( 1.222567)
|
246
|
+
n=17 2.110000 0.120000 2.230000 ( 2.607683)
|
247
|
+
n=18 4.410000 0.230000 4.640000 ( 5.223074)
|
248
|
+
n=19 9.240000 0.460000 9.700000 ( 10.995905)
|
249
|
+
n=20 19.280000 0.810000 20.090000 ( 23.152085)
|
250
|
+
|
251
|
+
JRuby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768)
|
252
|
+
(OpenJDK 64-Bit Server VM 1.6.0_22) [linux-amd64-java]:
|
253
|
+
|
254
|
+
user system total real
|
255
|
+
n=10 0.539000 0.000000 0.539000 ( 0.369000)
|
256
|
+
n=11 0.609000 0.000000 0.609000 ( 0.609000)
|
257
|
+
n=12 0.490000 0.000000 0.490000 ( 0.490000)
|
258
|
+
n=13 0.701000 0.000000 0.701000 ( 0.701000)
|
259
|
+
n=14 1.013000 0.000000 1.013000 ( 1.013000)
|
260
|
+
n=15 0.729000 0.000000 0.729000 ( 0.729000)
|
261
|
+
n=16 0.306000 0.000000 0.306000 ( 0.306000)
|
262
|
+
n=17 0.601000 0.000000 0.601000 ( 0.601000)
|
263
|
+
n=18 1.291000 0.000000 1.291000 ( 1.291000)
|
264
|
+
n=19 2.591000 0.000000 2.591000 ( 2.591000)
|
265
|
+
n=20 5.573000 0.000000 5.573000 ( 5.573000)
|
266
|
+
|
267
|
+
Rubinius 2.0.0dev (1.8.7 5e67b11e yyyy-mm-dd JI) [x86_64-unknown-linux-gnu]:
|
268
|
+
|
269
|
+
user system total real
|
270
|
+
n=10 0.050992 0.009999 0.060991 ( 0.196739)
|
271
|
+
n=11 0.088986 0.011998 0.100984 ( 0.295952)
|
272
|
+
n=12 0.141979 0.003999 0.145978 ( 0.632228)
|
273
|
+
n=13 0.248962 0.012998 0.261960 ( 0.939763)
|
274
|
+
n=14 0.482927 0.015998 0.498925 ( 0.562893)
|
275
|
+
n=15 0.988849 0.035994 1.024843 ( 1.134604)
|
276
|
+
n=16 2.034691 0.076988 2.111679 ( 2.342626)
|
277
|
+
n=17 4.188363 0.158976 4.347339 ( 4.882135)
|
278
|
+
n=18 8.595693 0.347947 8.943640 ( 10.191949)
|
279
|
+
n=19 17.662315 0.674898 18.337213 ( 20.490505)
|
280
|
+
n=20 36.434461 1.536766 37.971227 ( 42.821087)
|
50
281
|
|
data/ChangeLog.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
### 0.4.0 / 2011-10-15
|
2
|
+
|
3
|
+
* Added {Math.sigma}.
|
4
|
+
* Added {Math.pi}.
|
5
|
+
* Added {Math.factorial}.
|
6
|
+
* Added {Math.subfactorial}.
|
7
|
+
* Added {Combinatorics::CartesianProduct}.
|
8
|
+
* Added {Combinatorics::Choose}.
|
9
|
+
* Added {Combinatorics::Derange}.
|
10
|
+
* Added {Combinatorics::Permute}.
|
11
|
+
* Added {Combinatorics::PowerSet}.
|
12
|
+
|
1
13
|
### 0.3.1 / 2010-10-26
|
2
14
|
|
3
15
|
* Do not call `enum_for` on `Enumerator` objects passed to
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,45 +1,52 @@
|
|
1
1
|
# Combinatorics
|
2
2
|
|
3
|
-
* [
|
4
|
-
* [
|
5
|
-
*
|
3
|
+
* [Source](http://github.com/postmodern/combinatorics)
|
4
|
+
* [Issues](http://github.com/postmodern/combinatorics/issues)
|
5
|
+
* [Documentation](http://rubydoc.info/gems/combinatorics)
|
6
|
+
* [Email](mailto:postmodern.mod3 at gmail.com)
|
6
7
|
|
7
8
|
## Description
|
8
9
|
|
9
10
|
A collection of modules and methods for performing
|
10
11
|
[Combinatoric](http://en.wikipedia.org/wiki/Combinatoric) calculations.
|
12
|
+
Methods are defined to compute power sets, cartesian products, permutations,
|
13
|
+
combinations, and derangements.
|
14
|
+
|
15
|
+
Note: this includes k-combinations and k-permutations, i.e. only generating
|
16
|
+
resultant sets of a given size. Each set theory operation method supports block
|
17
|
+
arguments to allow continuous code execution during the combinatoric set
|
18
|
+
generation process. Each combinatoric operation implementation also supports a
|
19
|
+
`cardinality` method which determines the total number of subsets that will be
|
20
|
+
created beforehand (to aid in the avoidance of starting an operation which will
|
21
|
+
never complete due to exponential computational complexity.)
|
11
22
|
|
12
23
|
## Features
|
13
24
|
|
14
|
-
* Adds `powerset` to {Array} and {Set}.
|
15
|
-
* Added {Range#&}, {Range#upto} and {Range#downto}.
|
16
25
|
* Adds Haskell/Python style list comprehensions via {Array#comprehension}.
|
26
|
+
* Provides reusable Combinatorics Mixins:
|
27
|
+
* {Combinatorics::CartesianProduct}
|
28
|
+
* {Combinatorics::Choose}
|
29
|
+
* {Combinatorics::Derange}
|
30
|
+
* {Combinatorics::Permute}
|
31
|
+
* {Combinatorics::PowerSet}
|
32
|
+
* Adds Combinatorics conveniance methods to {Array} and {Set}:
|
33
|
+
* `cartesian_product`
|
34
|
+
* `choose`
|
35
|
+
* `derange`
|
36
|
+
* `permute`
|
37
|
+
* `powerset`
|
38
|
+
* Adds conveniance methods:
|
39
|
+
* {Range#&}
|
40
|
+
* {Range#upto}
|
41
|
+
* {Range#downto}
|
42
|
+
* {Math.sigma}
|
43
|
+
* {Math.pi}
|
44
|
+
* {Math.factorial}
|
45
|
+
* {Math.subfactorial}
|
17
46
|
|
18
47
|
## Examples
|
19
48
|
|
20
|
-
Power-set
|
21
|
-
|
22
|
-
require 'combinatorics/power_set'
|
23
|
-
|
24
|
-
[1,2,3,4].powerset
|
25
|
-
# => [[],
|
26
|
-
[4],
|
27
|
-
[3],
|
28
|
-
[3, 4],
|
29
|
-
[2],
|
30
|
-
[2, 4],
|
31
|
-
[2, 3],
|
32
|
-
[2, 3, 4],
|
33
|
-
[1],
|
34
|
-
[1, 4],
|
35
|
-
[1, 3],
|
36
|
-
[1, 3, 4],
|
37
|
-
[1, 2],
|
38
|
-
[1, 2, 4],
|
39
|
-
[1, 2, 3],
|
40
|
-
[1, 2, 3, 4]]
|
41
|
-
|
42
|
-
Power-set of a {Set}:
|
49
|
+
Power-set:
|
43
50
|
|
44
51
|
Set['ab', 'cd', 'ef'].powerset
|
45
52
|
# => [#<Set: {}>,
|
@@ -86,13 +93,76 @@ List comprehensions:
|
|
86
93
|
[10, "b"],
|
87
94
|
[10, "c"]]
|
88
95
|
|
96
|
+
Cartesian products:
|
97
|
+
|
98
|
+
require 'combinatorics/cartesian_product'
|
99
|
+
|
100
|
+
['a', 'b', 'c'].cartesian_product([0, 1, 2]).to_a
|
101
|
+
# => [["a", 0],
|
102
|
+
["b", 0],
|
103
|
+
["c", 0],
|
104
|
+
["a", 1],
|
105
|
+
["b", 1],
|
106
|
+
["c", 1],
|
107
|
+
["a", 2],
|
108
|
+
["b", 2],
|
109
|
+
["c", 2]]
|
110
|
+
|
111
|
+
k-combinations:
|
112
|
+
|
113
|
+
require 'combinatorics/choose'
|
114
|
+
|
115
|
+
('a'..'f').to_a.choose(2).to_a
|
116
|
+
# => [["a", "b"],
|
117
|
+
["a", "c"],
|
118
|
+
["a", "d"],
|
119
|
+
["a", "e"],
|
120
|
+
["a", "f"],
|
121
|
+
["b", "c"],
|
122
|
+
["b", "d"],
|
123
|
+
["b", "e"],
|
124
|
+
["b", "f"],
|
125
|
+
["c", "d"],
|
126
|
+
["c", "e"],
|
127
|
+
["c", "f"],
|
128
|
+
["d", "e"],
|
129
|
+
["d", "f"],
|
130
|
+
["e", "f"]]
|
131
|
+
|
132
|
+
Derangements:
|
133
|
+
|
134
|
+
require 'combinatorics/derange'
|
135
|
+
|
136
|
+
[:_, :q, :z, :x].derange.to_a
|
137
|
+
# => [[:q, :_, :x, :z],
|
138
|
+
[:q, :z, :x, :_],
|
139
|
+
[:q, :x, :_, :z],
|
140
|
+
[:z, :_, :x, :q],
|
141
|
+
[:z, :x, :_, :q],
|
142
|
+
[:z, :x, :q, :_],
|
143
|
+
[:x, :_, :q, :z],
|
144
|
+
[:x, :z, :_, :q],
|
145
|
+
[:x, :z, :q, :_]]
|
146
|
+
|
147
|
+
Permutation cardinality:
|
148
|
+
|
149
|
+
require 'combinatorics/permutation'
|
150
|
+
|
151
|
+
include Combinatorics::Permute
|
152
|
+
|
153
|
+
Combinatorics::Permute::cardinality(128)
|
154
|
+
# => 8256
|
155
|
+
|
156
|
+
## Requirements
|
157
|
+
|
158
|
+
* [ruby](http://www.ruby-lang.org/) >= 1.8.7
|
159
|
+
|
89
160
|
## Install
|
90
161
|
|
91
|
-
|
162
|
+
$ sudo gem install combinatorics
|
92
163
|
|
93
|
-
##
|
164
|
+
## Copyright
|
94
165
|
|
95
|
-
Copyright (c) 2010 Hal Brodigan
|
166
|
+
Copyright (c) 2010-2011 Hal Brodigan
|
96
167
|
|
97
168
|
See {file:LICENSE.txt} for license information.
|
98
|
-
|