graph_matching 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.rubocop.yml +112 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +9 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +205 -0
  9. data/Rakefile +9 -0
  10. data/benchmark/mcm_bipartite/complete_bigraphs/benchmark.rb +33 -0
  11. data/benchmark/mcm_bipartite/complete_bigraphs/compare.gnuplot +19 -0
  12. data/benchmark/mcm_bipartite/complete_bigraphs/edges_times_vertexes.data +500 -0
  13. data/benchmark/mcm_bipartite/complete_bigraphs/plot.gnuplot +21 -0
  14. data/benchmark/mcm_bipartite/complete_bigraphs/plot.png +0 -0
  15. data/benchmark/mcm_bipartite/complete_bigraphs/time.data +499 -0
  16. data/benchmark/mcm_general/complete_graphs/benchmark.rb +30 -0
  17. data/benchmark/mcm_general/complete_graphs/plot.gnuplot +19 -0
  18. data/benchmark/mcm_general/complete_graphs/plot.png +0 -0
  19. data/benchmark/mcm_general/complete_graphs/time.data +499 -0
  20. data/benchmark/mcm_general/complete_graphs/v_cubed.data +500 -0
  21. data/benchmark/mwm_bipartite/complete_bigraphs/benchmark.rb +43 -0
  22. data/benchmark/mwm_bipartite/complete_bigraphs/nmN.data +499 -0
  23. data/benchmark/mwm_bipartite/complete_bigraphs/nmN.xlsx +0 -0
  24. data/benchmark/mwm_bipartite/complete_bigraphs/plot.gnuplot +22 -0
  25. data/benchmark/mwm_bipartite/complete_bigraphs/plot.png +0 -0
  26. data/benchmark/mwm_bipartite/complete_bigraphs/time.data +299 -0
  27. data/benchmark/mwm_bipartite/misc/calc_d2/benchmark.rb +29 -0
  28. data/benchmark/mwm_general/complete_graphs/benchmark.rb +32 -0
  29. data/benchmark/mwm_general/complete_graphs/compare.gnuplot +19 -0
  30. data/benchmark/mwm_general/complete_graphs/mn_log_n.data +299 -0
  31. data/benchmark/mwm_general/complete_graphs/mn_log_n.xlsx +0 -0
  32. data/benchmark/mwm_general/complete_graphs/plot.gnuplot +22 -0
  33. data/benchmark/mwm_general/complete_graphs/plot.png +0 -0
  34. data/benchmark/mwm_general/complete_graphs/time.data +299 -0
  35. data/benchmark/mwm_general/incomplete_graphs/benchmark.rb +39 -0
  36. data/benchmark/mwm_general/incomplete_graphs/plot.gnuplot +22 -0
  37. data/benchmark/mwm_general/incomplete_graphs/plot.png +0 -0
  38. data/benchmark/mwm_general/incomplete_graphs/time_10_pct.data +299 -0
  39. data/benchmark/mwm_general/incomplete_graphs/time_20_pct.data +299 -0
  40. data/benchmark/mwm_general/incomplete_graphs/time_30_pct.data +299 -0
  41. data/graph_matching.gemspec +35 -0
  42. data/lib/graph_matching.rb +15 -0
  43. data/lib/graph_matching/algorithm/matching_algorithm.rb +23 -0
  44. data/lib/graph_matching/algorithm/mcm_bipartite.rb +118 -0
  45. data/lib/graph_matching/algorithm/mcm_general.rb +289 -0
  46. data/lib/graph_matching/algorithm/mwm_bipartite.rb +147 -0
  47. data/lib/graph_matching/algorithm/mwm_general.rb +1086 -0
  48. data/lib/graph_matching/algorithm/mwmg_delta_assertions.rb +94 -0
  49. data/lib/graph_matching/assertion.rb +41 -0
  50. data/lib/graph_matching/core_ext/set.rb +36 -0
  51. data/lib/graph_matching/directed_edge_set.rb +31 -0
  52. data/lib/graph_matching/errors.rb +23 -0
  53. data/lib/graph_matching/graph/bigraph.rb +37 -0
  54. data/lib/graph_matching/graph/graph.rb +63 -0
  55. data/lib/graph_matching/graph/weighted.rb +112 -0
  56. data/lib/graph_matching/graph/weighted_bigraph.rb +17 -0
  57. data/lib/graph_matching/graph/weighted_graph.rb +17 -0
  58. data/lib/graph_matching/integer_vertexes.rb +29 -0
  59. data/lib/graph_matching/matching.rb +120 -0
  60. data/lib/graph_matching/ordered_set.rb +59 -0
  61. data/lib/graph_matching/version.rb +6 -0
  62. data/lib/graph_matching/visualize.rb +93 -0
  63. data/profile/mcm_bipartite/compare.sh +15 -0
  64. data/profile/mcm_bipartite/publish.sh +12 -0
  65. data/profile/mwm_general/compare.sh +15 -0
  66. data/profile/mwm_general/profile.rb +28 -0
  67. data/profile/mwm_general/publish.sh +12 -0
  68. data/research/1965_edmonds.pdf +0 -0
  69. data/research/1975_even_kariv.pdf +0 -0
  70. data/research/1976_gabow.pdf +0 -0
  71. data/research/1980_micali_vazirani.pdf +0 -0
  72. data/research/1985_gabow.pdf +0 -0
  73. data/research/2002_tarjan.pdf +0 -0
  74. data/research/2013_zwick.pdf +0 -0
  75. data/research/examples/unweighted_general/1.txt +86 -0
  76. data/research/goodwin.pdf +0 -0
  77. data/research/kavathekar-scribe.pdf +0 -0
  78. data/research/kusner.pdf +0 -0
  79. data/research/van_rantwijk/mwm_example.py +19 -0
  80. data/research/van_rantwijk/mwmatching.py +945 -0
  81. data/spec/graph_matching/algorithm/matching_algorithm_spec.rb +14 -0
  82. data/spec/graph_matching/algorithm/mcm_bipartite_spec.rb +98 -0
  83. data/spec/graph_matching/algorithm/mcm_general_spec.rb +159 -0
  84. data/spec/graph_matching/algorithm/mwm_bipartite_spec.rb +82 -0
  85. data/spec/graph_matching/algorithm/mwm_general_spec.rb +439 -0
  86. data/spec/graph_matching/graph/bigraph_spec.rb +73 -0
  87. data/spec/graph_matching/graph/graph_spec.rb +53 -0
  88. data/spec/graph_matching/graph/weighted_spec.rb +29 -0
  89. data/spec/graph_matching/integer_vertexes_spec.rb +21 -0
  90. data/spec/graph_matching/matching_spec.rb +89 -0
  91. data/spec/graph_matching/visualize_spec.rb +38 -0
  92. data/spec/graph_matching_spec.rb +9 -0
  93. data/spec/spec_helper.rb +26 -0
  94. metadata +263 -0
@@ -0,0 +1,22 @@
1
+ data_dir = "~/git/jaredbeck/graph_matching/benchmark/mwm_general/complete_graphs"
2
+
3
+ set title "MWM Should Be O(ev log v) In General Graphs\n".\
4
+ "(Galil, 1986, p. 34)"
5
+ set key left box
6
+ set term png size 800, 500
7
+ set output data_dir."/plot.png"
8
+
9
+ set linetype 1 pointtype 7 linecolor rgb "#FF0000"
10
+ set linetype 2 linewidth 3 linecolor rgb "#00B800"
11
+
12
+ set xlabel 'Number of Vertexes, v' textcolor rgb "black"
13
+ set ytics autofreq textcolor rgb "black"
14
+ set ylabel 'Time (s)' textcolor rgb "black"
15
+ set y2tics autofreq textcolor rgb "black"
16
+ set y2label 'ev log v' textcolor rgb "black"
17
+
18
+ plot \
19
+ data_dir."/time.data" every 1:1:1::299 \
20
+ using 1:2 title "Time (s)" lt 1 axes x1y1, \
21
+ data_dir."/mn_log_n.data" every 1:1:1::299 \
22
+ using 1:4 title "ev log v" with lines lt 2 axes x1y2
@@ -0,0 +1,299 @@
1
+ 2 0.00018967899086419493
2
+ 3 0.00014309099060483277
3
+ 4 0.00022330500360112637
4
+ 5 0.0003206550027243793
5
+ 6 0.00032682700839359313
6
+ 7 0.0006000869907438755
7
+ 8 0.0006814549997216091
8
+ 9 0.000995006994344294
9
+ 10 0.001250317000085488
10
+ 11 0.0015026949986349791
11
+ 12 0.001451529999030754
12
+ 13 0.0022295970120467246
13
+ 14 0.0028204929985804483
14
+ 15 0.003255938005167991
15
+ 16 0.002808548990287818
16
+ 17 0.0038876209873706102
17
+ 18 0.0036039789993083104
18
+ 19 0.005036496004322544
19
+ 20 0.004880820008111186
20
+ 21 0.006227598991245031
21
+ 22 0.006214077002368867
22
+ 23 0.007840321995900013
23
+ 24 0.008126291009830311
24
+ 25 0.009971192994271405
25
+ 26 0.00825980500667356
26
+ 27 0.010853334999410436
27
+ 28 0.010317879990907386
28
+ 29 0.014482312006293796
29
+ 30 0.013630208995891735
30
+ 31 0.01656447901041247
31
+ 32 0.016822137986309826
32
+ 33 0.018985379007062875
33
+ 34 0.019504551994032227
34
+ 35 0.022405806012102403
35
+ 36 0.020664891999331303
36
+ 37 0.022756556994863786
37
+ 38 0.027300254005240276
38
+ 39 0.02954289800254628
39
+ 40 0.025251268001738936
40
+ 41 0.03299028900801204
41
+ 42 0.033200944992131554
42
+ 43 0.035227840999141335
43
+ 44 0.03238466598850209
44
+ 45 0.0488685119926231
45
+ 46 0.03922288600006141
46
+ 47 0.05025665499852039
47
+ 48 0.045528803995694034
48
+ 49 0.05590342999494169
49
+ 50 0.048540364994551055
50
+ 51 0.05087307699432131
51
+ 52 0.05367260400089435
52
+ 53 0.06558844000392128
53
+ 54 0.06144435200258158
54
+ 55 0.06894009199459106
55
+ 56 0.06604343999060802
56
+ 57 0.0746450430015102
57
+ 58 0.07353222799429204
58
+ 59 0.08286407300329302
59
+ 60 0.09282833099132404
60
+ 61 0.08587475300009828
61
+ 62 0.08004653399984818
62
+ 63 0.10073165899666492
63
+ 64 0.09779756200441625
64
+ 65 0.10712481899827253
65
+ 66 0.10509896199801005
66
+ 67 0.11449014800018631
67
+ 68 0.11393333399610128
68
+ 69 0.1414826929976698
69
+ 70 0.11238827199849766
70
+ 71 0.1316594090021681
71
+ 72 0.12361045100260526
72
+ 73 0.13857555099821184
73
+ 74 0.12042024599213619
74
+ 75 0.16656364199297968
75
+ 76 0.17834120699262712
76
+ 77 0.17879135398834478
77
+ 78 0.1582955219928408
78
+ 79 0.17373799299821258
79
+ 80 0.176887922003516
80
+ 81 0.18230851099360734
81
+ 82 0.1939473960082978
82
+ 83 0.18363001900434028
83
+ 84 0.20032923799590208
84
+ 85 0.21827151600155048
85
+ 86 0.22091457499482203
86
+ 87 0.24341015800018795
87
+ 88 0.23137719499936793
88
+ 89 0.24000961899582762
89
+ 90 0.2387248929881025
90
+ 91 0.24649743500049226
91
+ 92 0.25805407798907254
92
+ 93 0.2748496139975032
93
+ 94 0.2711715309997089
94
+ 95 0.2949064350104891
95
+ 96 0.29209433001233265
96
+ 97 0.27381994400639087
97
+ 98 0.2915942349936813
98
+ 99 0.33196681999834254
99
+ 100 0.3197562029963592
100
+ 101 0.36158635299943853
101
+ 102 0.33301684699836187
102
+ 103 0.3627765560086118
103
+ 104 0.3412825970008271
104
+ 105 0.40068144600081723
105
+ 106 0.3733929579902906
106
+ 107 0.4019263379886979
107
+ 108 0.3654060779954307
108
+ 109 0.4358381079946412
109
+ 110 0.3973310790024698
110
+ 111 0.43927981999877375
111
+ 112 0.42749927200202364
112
+ 113 0.45979679199808743
113
+ 114 0.39772584500315133
114
+ 115 0.521018687999458
115
+ 116 0.49397871900873724
116
+ 117 0.4874452200019732
117
+ 118 0.5156463510065805
118
+ 119 0.5320126870064996
119
+ 120 0.5510029540018877
120
+ 121 0.5819756820128532
121
+ 122 0.5660921819944633
122
+ 123 0.6082825869962107
123
+ 124 0.6189013610128313
124
+ 125 0.6624166370020248
125
+ 126 0.618475961004151
126
+ 127 0.6281546909885947
127
+ 128 0.6426430650026305
128
+ 129 0.6723156649968587
129
+ 130 0.6757442129892297
130
+ 131 0.6957601809990592
131
+ 132 0.6753305409947643
132
+ 133 0.7088854949979577
133
+ 134 0.7684921260079136
134
+ 135 0.7503358319954714
135
+ 136 0.7534369979985058
136
+ 137 0.7218250100122532
137
+ 138 0.7796814530011034
138
+ 139 0.8250729179999325
139
+ 140 0.821582151009352
140
+ 141 0.8789255199953914
141
+ 142 0.8108373479917645
142
+ 143 0.9078704989951802
143
+ 144 0.8434782510012155
144
+ 145 0.9685156019986607
145
+ 146 0.9598577589931665
146
+ 147 0.9676486039970769
147
+ 148 0.9853707630099962
148
+ 149 1.0014182019949658
149
+ 150 0.951372730996809
150
+ 151 1.012612688995432
151
+ 152 1.0051465560100041
152
+ 153 1.116737529009697
153
+ 154 1.119949864994851
154
+ 155 1.1157972259970848
155
+ 156 1.0934245879907394
156
+ 157 1.2280797779967543
157
+ 158 1.0819533710018732
158
+ 159 1.149202934000641
159
+ 160 1.1908129999937955
160
+ 161 1.2968812990002334
161
+ 162 1.2489804289944004
162
+ 163 1.2495980679959757
163
+ 164 1.2950094809930306
164
+ 165 1.2889338829991175
165
+ 166 1.3229343650018563
166
+ 167 1.2888185920019168
167
+ 168 1.3566905460029375
168
+ 169 1.4317550200066762
169
+ 170 1.3944356790016172
170
+ 171 1.4456604500010144
171
+ 172 1.5153436269902159
172
+ 173 1.5718446760001825
173
+ 174 1.4997264900011942
174
+ 175 1.612955840988434
175
+ 176 1.5445185600110563
176
+ 177 1.749895013999776
177
+ 178 1.5711754759977339
178
+ 179 1.664516046992503
179
+ 180 1.7081899530021474
180
+ 181 1.7213760830054525
181
+ 182 1.7342065340053523
182
+ 183 1.7436806929908926
183
+ 184 1.7584971049946034
184
+ 185 1.8020297260081861
185
+ 186 1.8193406670034165
186
+ 187 1.9707100820087362
187
+ 188 1.97454567499517
188
+ 189 1.9410606019955594
189
+ 190 1.8227524209942203
190
+ 191 1.9329862099984894
191
+ 192 2.007258482990437
192
+ 193 2.153641651995713
193
+ 194 1.9666853509988869
194
+ 195 2.2243245209974702
195
+ 196 2.0245290309976554
196
+ 197 2.3819759790058015
197
+ 198 2.28095530300925
198
+ 199 2.434272628001054
199
+ 200 2.1707087510003475
200
+ 201 2.496700393006904
201
+ 202 2.286543909998727
202
+ 203 2.5058549560053507
203
+ 204 2.52217482800188
204
+ 205 2.519298887011246
205
+ 206 2.3816856109915534
206
+ 207 2.554263917991193
207
+ 208 2.450778092999826
208
+ 209 2.717990043995087
209
+ 210 2.815777102994616
210
+ 211 2.4738402619987028
211
+ 212 2.6916027660045074
212
+ 213 2.7925221040059114
213
+ 214 2.7244709899969166
214
+ 215 2.8982125699985772
215
+ 216 2.884906947001582
216
+ 217 2.7841719490097603
217
+ 218 2.8728624150098767
218
+ 219 3.078523532007239
219
+ 220 2.9028789540025173
220
+ 221 3.1693885730055626
221
+ 222 3.1011157739994815
222
+ 223 3.3510231679974822
223
+ 224 3.4779835490044206
224
+ 225 3.2464419710013317
225
+ 226 3.26882979599759
226
+ 227 3.224289673991734
227
+ 228 3.282753841005615
228
+ 229 3.5676011680043302
229
+ 230 3.4705941950087436
230
+ 231 3.7180903240077896
231
+ 232 3.197387004009215
232
+ 233 3.7916396079963306
233
+ 234 3.4342321930016624
234
+ 235 3.671232968001277
235
+ 236 3.873284330999013
236
+ 237 3.8549524279951584
237
+ 238 3.6809003060043324
238
+ 239 4.056459174011252
239
+ 240 3.856868114002282
240
+ 241 4.1259487610077485
241
+ 242 3.7593904030072736
242
+ 243 4.241083382003126
243
+ 244 3.809156323011848
244
+ 245 4.116704440006288
245
+ 246 4.165389034009422
246
+ 247 4.43259456299711
247
+ 248 4.282675362002919
248
+ 249 4.700867749997997
249
+ 250 4.30176193000807
250
+ 251 4.457324335991871
251
+ 252 4.74770363899006
252
+ 253 4.509424797011889
253
+ 254 4.651403627998661
254
+ 255 4.65989179299504
255
+ 256 4.559008140990045
256
+ 257 5.018208780005807
257
+ 258 5.044330889999401
258
+ 259 4.95689045600011
259
+ 260 4.650310993005405
260
+ 261 4.89168809200055
261
+ 262 5.050375397011521
262
+ 263 5.350234591998742
263
+ 264 5.092777939993539
264
+ 265 5.3020382069953484
265
+ 266 5.353010944003472
266
+ 267 5.692103585999575
267
+ 268 5.439546979992883
268
+ 269 5.837273189987172
269
+ 270 5.629763296994497
270
+ 271 5.594106600008672
271
+ 272 5.70014257299772
272
+ 273 5.916521537990775
273
+ 274 5.7664646150078624
274
+ 275 6.048142575004022
275
+ 276 5.605958553001983
276
+ 277 6.281432266012416
277
+ 278 6.239784977005911
278
+ 279 6.228642183996271
279
+ 280 6.172211148994393
280
+ 281 6.422181874004309
281
+ 282 6.025088123002206
282
+ 283 6.788073924995842
283
+ 284 6.622741316998145
284
+ 285 6.911957039003028
285
+ 286 6.910101453002426
286
+ 287 7.101193853988661
287
+ 288 6.871827198003302
288
+ 289 7.197523741997429
289
+ 290 6.873349499001051
290
+ 291 7.380409407007392
291
+ 292 6.934250103993691
292
+ 293 7.352463289003936
293
+ 294 7.1817828949861
294
+ 295 7.147771961987019
295
+ 296 7.32382976700319
296
+ 297 7.630112173996167
297
+ 298 7.603844665994984
298
+ 299 7.4783464670035755
299
+ 300 7.9698457659978885
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ # No shebang here. Usage:
4
+ # ruby -I lib benchmark/mwm_general/dense_graphs/benchmark.rb
5
+
6
+ require 'benchmark'
7
+ require 'graph_matching'
8
+
9
+ COMPLETENESS = 0.1
10
+ MIN_SIZE = 2
11
+ MAX_SIZE = 300
12
+
13
+ $stdout.sync = true
14
+
15
+ # `completeness` - decimal percentage of vertexes each vertex
16
+ # is connected to.
17
+ def incomplete_graph(n, completeness)
18
+ g = GraphMatching::Graph::WeightedGraph.new
19
+ 0.upto(n - 1) do |i| g.add_vertex(i) end
20
+ max_weight = ((1 .. n - 1).reduce(:+).to_f * completeness).to_i + 1
21
+ 0.upto(n - 2) do |i|
22
+ (i + 1).upto(n - 1) do |j|
23
+ if rand < completeness
24
+ g.add_edge(i, j)
25
+ w = rand(max_weight)
26
+ g.set_w([i, j], w)
27
+ end
28
+ end
29
+ end
30
+ g
31
+ end
32
+
33
+ MIN_SIZE.upto(MAX_SIZE) do |v|
34
+ print "%5d\t" % [v]
35
+ g = incomplete_graph(v, COMPLETENESS)
36
+ GC.disable
37
+ puts Benchmark.realtime { g.maximum_weighted_matching(true) }
38
+ GC.enable
39
+ end
@@ -0,0 +1,22 @@
1
+ data_dir = "~/git/jaredbeck/graph_matching/benchmark/mwm_general/incomplete_graphs"
2
+
3
+ set title "MWM in Incomplete General Graphs"
4
+ set key left box
5
+ set term png size 800, 500
6
+ set output data_dir."/plot.png"
7
+
8
+ set linetype 1 pointtype 7 linecolor rgb "#FF0000"
9
+ set linetype 2 pointtype 7 linecolor rgb "#00B800"
10
+ set linetype 3 pointtype 7 linecolor rgb "#0000FF"
11
+
12
+ set xlabel 'Number of Vertexes (n)' tc lt 1
13
+ set ytics autofreq tc lt 1
14
+ set ylabel 'Time (s)' tc lt 1
15
+
16
+ plot \
17
+ data_dir."/time_30_pct.data" \
18
+ using 1:2 title "Time (s) 30% Completeness" lt 3, \
19
+ data_dir."/time_20_pct.data" \
20
+ using 1:2 title "Time (s) 20% Completeness" lt 2, \
21
+ data_dir."/time_10_pct.data" \
22
+ using 1:2 title "Time (s) 10% Completeness" lt 1
@@ -0,0 +1,299 @@
1
+ 2 8.463699487037957e-05
2
+ 3 3.7192992749623954e-05
3
+ 4 3.925000783056021e-05
4
+ 5 0.0001989250013139099
5
+ 6 5.4172996897250414e-05
6
+ 7 0.00012713999603874981
7
+ 8 0.00020258199947420508
8
+ 9 0.00019400000746827573
9
+ 10 0.0003088750090682879
10
+ 11 0.0004118960059713572
11
+ 12 0.0004026319948025048
12
+ 13 0.00046546998783014715
13
+ 14 0.0007357160066021606
14
+ 15 0.0007187540031736717
15
+ 16 0.0008032820041989908
16
+ 17 0.0007264839950948954
17
+ 18 0.000619348997133784
18
+ 19 0.0009878630080493167
19
+ 20 0.0011937930103158578
20
+ 21 0.0016109979915199801
21
+ 22 0.0012252899905433878
22
+ 23 0.001935057996888645
23
+ 24 0.002005057001952082
24
+ 25 0.001926843004184775
25
+ 26 0.0024508869973942637
26
+ 27 0.0025616370112402365
27
+ 28 0.003332876003696583
28
+ 29 0.0031372849916806445
29
+ 30 0.0028106310055591166
30
+ 31 0.004155743008595891
31
+ 32 0.004016160004539415
32
+ 33 0.00434892599878367
33
+ 34 0.0035022369993384928
34
+ 35 0.004138813994359225
35
+ 36 0.004503019998082891
36
+ 37 0.005654124994180165
37
+ 38 0.005875892995391041
38
+ 39 0.006960348997381516
39
+ 40 0.00513874800526537
40
+ 41 0.0077320160053204745
41
+ 42 0.006515058994409628
42
+ 43 0.008135978001519106
43
+ 44 0.00860852500773035
44
+ 45 0.01009983399126213
45
+ 46 0.008146205000230111
46
+ 47 0.010540988994762301
47
+ 48 0.011394510001991875
48
+ 49 0.01130098500289023
49
+ 50 0.010844114003702998
50
+ 51 0.012781069992342964
51
+ 52 0.01120942400302738
52
+ 53 0.013538707004045136
53
+ 54 0.013903993996791542
54
+ 55 0.01567562199488748
55
+ 56 0.01134582600207068
56
+ 57 0.01668802899075672
57
+ 58 0.014880991002428345
58
+ 59 0.015152699997997843
59
+ 60 0.01670517399907112
60
+ 61 0.01834511999913957
61
+ 62 0.015626150998286903
62
+ 63 0.03568268800154328
63
+ 64 0.015559924009721726
64
+ 65 0.022179979001521133
65
+ 66 0.02096723800059408
66
+ 67 0.023934149998240173
67
+ 68 0.022067167999921367
68
+ 69 0.024640552990604192
69
+ 70 0.021273344988003373
70
+ 71 0.023842355993110687
71
+ 72 0.03399275599804241
72
+ 73 0.03236482199281454
73
+ 74 0.02327767499082256
74
+ 75 0.027691907991538756
75
+ 76 0.03046010000980459
76
+ 77 0.047005867992993444
77
+ 78 0.031032487997435965
78
+ 79 0.03403247200185433
79
+ 80 0.03185768499679398
80
+ 81 0.05385401200328488
81
+ 82 0.04488196199235972
82
+ 83 0.04441215700353496
83
+ 84 0.029983127999003045
84
+ 85 0.04090721700049471
85
+ 86 0.03476519699324854
86
+ 87 0.04142928800138179
87
+ 88 0.04132196000136901
88
+ 89 0.04821196499688085
89
+ 90 0.05013168700679671
90
+ 91 0.04536582498985808
91
+ 92 0.04192506299295928
92
+ 93 0.05682104300649371
93
+ 94 0.04760102501313668
94
+ 95 0.053231193000101484
95
+ 96 0.056571191002149135
96
+ 97 0.056929669008241035
97
+ 98 0.05123193599865772
98
+ 99 0.05747635298757814
99
+ 100 0.04904360699583776
100
+ 101 0.06033712500357069
101
+ 102 0.0584710190014448
102
+ 103 0.06575977199827321
103
+ 104 0.06221986300079152
104
+ 105 0.07290644399472512
105
+ 106 0.06037844000093173
106
+ 107 0.07277295801031869
107
+ 108 0.058744336987729184
108
+ 109 0.07115723899914883
109
+ 110 0.0653927169914823
110
+ 111 0.07368764899729285
111
+ 112 0.06957983200845774
112
+ 113 0.08322434399451595
113
+ 114 0.07821003800199833
114
+ 115 0.085228914002073
115
+ 116 0.07349340300424956
116
+ 117 0.0949930289934855
117
+ 118 0.08682154200505465
118
+ 119 0.08283745701191947
119
+ 120 0.08465336199151352
120
+ 121 0.08672273901174776
121
+ 122 0.09141082799760625
122
+ 123 0.10090122900146525
123
+ 124 0.09574861300643533
124
+ 125 0.09969360800459981
125
+ 126 0.09379147000436205
126
+ 127 0.11624119900807273
127
+ 128 0.10075883899116889
128
+ 129 0.11468408400833141
129
+ 130 0.10221904299396556
130
+ 131 0.1209213519905461
131
+ 132 0.10180018800019752
132
+ 133 0.11293977599416394
133
+ 134 0.11668334199930541
134
+ 135 0.12913537600252312
135
+ 136 0.11770159400475677
136
+ 137 0.135751932990388
137
+ 138 0.13840151399199385
138
+ 139 0.13792179399752058
139
+ 140 0.13654926700110082
140
+ 141 0.13368485699174926
141
+ 142 0.12836311099817976
142
+ 143 0.15591118700103834
143
+ 144 0.13382394998916425
144
+ 145 0.16546211201057304
145
+ 146 0.13499467499786988
146
+ 147 0.15405491599813104
147
+ 148 0.15751226199790835
148
+ 149 0.16030512600264046
149
+ 150 0.15629936900222674
150
+ 151 0.17387224300182424
151
+ 152 0.15193417899718042
152
+ 153 0.16929152800003067
153
+ 154 0.15166540200880263
154
+ 155 0.16364513199368957
155
+ 156 0.16323157500301022
156
+ 157 0.1653233580000233
157
+ 158 0.1592441679968033
158
+ 159 0.18429412199475337
159
+ 160 0.15910377800173592
160
+ 161 0.17740666201279964
161
+ 162 0.18933703300717752
162
+ 163 0.2113706230011303
163
+ 164 0.18197360599879175
164
+ 165 0.20008001099631656
165
+ 166 0.2120555540022906
166
+ 167 0.2232457319914829
167
+ 168 0.1879609879979398
168
+ 169 0.21290738799143583
169
+ 170 0.20270728699688334
170
+ 171 0.23045538700534962
171
+ 172 0.2118036040046718
172
+ 173 0.23897472200042102
173
+ 174 0.20885473600355908
174
+ 175 0.2476723360014148
175
+ 176 0.21555400799843483
176
+ 177 0.24332896700070705
177
+ 178 0.23698059300659224
178
+ 179 0.25563419800892007
179
+ 180 0.23477481601003092
180
+ 181 0.25907388600171544
181
+ 182 0.2603981199936243
182
+ 183 0.2606215559935663
183
+ 184 0.2667994009971153
184
+ 185 0.3058037989976583
185
+ 186 0.25553419000061695
186
+ 187 0.2885831169987796
187
+ 188 0.24417066999012604
188
+ 189 0.2836767340049846
189
+ 190 0.25511329699656926
190
+ 191 0.2881144610000774
191
+ 192 0.2899747069895966
192
+ 193 0.3529737729986664
193
+ 194 0.31850969399965834
194
+ 195 0.31295978200796526
195
+ 196 0.29018734600686
196
+ 197 0.3312796719983453
197
+ 198 0.3191844469984062
198
+ 199 0.347717790005845
199
+ 200 0.27748236199840903
200
+ 201 0.34721350399195217
201
+ 202 0.2965059999987716
202
+ 203 0.33121658000163734
203
+ 204 0.319965223010513
204
+ 205 0.37013510199903976
205
+ 206 0.3048618730099406
206
+ 207 0.39095086899760645
207
+ 208 0.3362570739991497
208
+ 209 0.3631734119990142
209
+ 210 0.37471684800402727
210
+ 211 0.3620332129939925
211
+ 212 0.359118017993751
212
+ 213 0.42071592500724364
213
+ 214 0.36943437400623225
214
+ 215 0.38332753800204955
215
+ 216 0.39423616499698255
216
+ 217 0.4152063539950177
217
+ 218 0.38765988999512047
218
+ 219 0.40091858599043917
219
+ 220 0.40695445200253744
220
+ 221 0.39726233000692446
221
+ 222 0.39809442500700243
222
+ 223 0.47983368700079154
223
+ 224 0.40188674999808427
224
+ 225 0.47867048099578824
225
+ 226 0.4509113069943851
226
+ 227 0.5135047119983938
227
+ 228 0.4690703389933333
228
+ 229 0.45679499799734913
229
+ 230 0.46581411799706984
230
+ 231 0.4871660939970752
231
+ 232 0.42909169899940025
232
+ 233 0.4719316639966564
233
+ 234 0.4257681279996177
234
+ 235 0.5201847209973494
235
+ 236 0.4827568899927428
236
+ 237 0.5412427430128446
237
+ 238 0.49860779599111993
238
+ 239 0.5436575500061736
239
+ 240 0.5489609240030404
240
+ 241 0.5311650479998207
241
+ 242 0.4902115680015413
242
+ 243 0.5276258239900926
243
+ 244 0.5644799619913101
244
+ 245 0.5718029819981894
245
+ 246 0.5309802280098666
246
+ 247 0.5856057869968936
247
+ 248 0.552658214000985
248
+ 249 0.5452313249988947
249
+ 250 0.5513059439981589
250
+ 251 0.6213200060010422
251
+ 252 0.5278184430062538
252
+ 253 0.6132098030066118
253
+ 254 0.5718132740003057
254
+ 255 0.6580589860095643
255
+ 256 0.5429895059933187
256
+ 257 0.6241424110048683
257
+ 258 0.6228699170023901
258
+ 259 0.6234932160004973
259
+ 260 0.5975015629956033
260
+ 261 0.6656426060071681
261
+ 262 0.6333094520086888
262
+ 263 0.6644937500095693
263
+ 264 0.5985646199987968
264
+ 265 0.7227572809933918
265
+ 266 0.6356652170070447
266
+ 267 0.6741793810069794
267
+ 268 0.6594731560035143
268
+ 269 0.7130001390032703
269
+ 270 0.6655134460015688
270
+ 271 0.7334712679876247
271
+ 272 0.6625885030080099
272
+ 273 0.7561602820060216
273
+ 274 0.7645245270105079
274
+ 275 0.7628561049932614
275
+ 276 0.7579373590124305
276
+ 277 0.8263471679965733
277
+ 278 0.715470417009783
278
+ 279 0.7783213899965631
279
+ 280 0.7942952820012579
280
+ 281 0.8740395170025295
281
+ 282 0.7416939709946746
282
+ 283 0.8442290969978785
283
+ 284 0.8033414579986129
284
+ 285 0.840032930005691
285
+ 286 0.7907445059972815
286
+ 287 0.8584166229993571
287
+ 288 0.7966437800059794
288
+ 289 0.8343065869994462
289
+ 290 0.9184344340028474
290
+ 291 0.8721333060093457
291
+ 292 0.8477915210096398
292
+ 293 0.9849718240002403
293
+ 294 0.8342795110074803
294
+ 295 0.9089815479965182
295
+ 296 0.8034248529875185
296
+ 297 1.0482544679980492
297
+ 298 0.9260179700067965
298
+ 299 0.9906991150055546
299
+ 300 0.972871682010009