Skip to content

Instantly share code, notes, and snippets.

@toracle
Last active May 31, 2016 12:32
Show Gist options
  • Save toracle/1ef2b7bbba0124f79d1798dd4e65edbb to your computer and use it in GitHub Desktop.
Save toracle/1ef2b7bbba0124f79d1798dd4e65edbb to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division, print_function, unicode_literals)
import random
import datetime as dt
def insert_table_to_least_bucket(table, buckets):
'''가작 적게 담긴 bucket을 찾아 테이블을 담는다.'''
if len(buckets) == 0:
return
for idx, (bucket_id, bucket) in enumerate(buckets.iteritems()):
size = bucket['size']
if idx == 0:
min_bucket_id = bucket_id
min_size = size
if min_size > size:
min_bucket_id = bucket_id
min_size = size
buckets[min_bucket_id]['list'].append(table)
buckets[min_bucket_id]['size'] += table[1]
def distribute(tables, min_buckets=2, max_buckets=50, tables_buckets_ratio=0.5):
'''주어진 테이블들을 bucket 갯수를 달리하면서 나눈다.'''
print('Number of tables: {}'.format(len(tables)))
_max_buckets = min(int(len(tables) * tables_buckets_ratio), max_buckets)
for i in range(min_buckets, _max_buckets):
buckets = distribute_to_n_buckets(tables, i)
print('== {} Buckets =='.format(i))
print_buckets(buckets)
def distribute_to_n_buckets(tables, n):
'''주어진 테이블들을 주어진 갯수의 bucket들에 균등하게 담는다.'''
sorted_tables = sorted(tables, key=lambda x: x[1])
buckets = {}
for i in range(n):
buckets.setdefault(i, {})
table = sorted_tables.pop()
buckets[i].setdefault('list', [])
buckets[i]['list'].append(table)
buckets[i]['size'] = table[1]
while len(sorted_tables) > 0:
table = sorted_tables.pop()
insert_table_to_least_bucket(table, buckets)
return buckets
def print_buckets(buckets):
'''Bucket을 보기 좋게 출력한다.'''
for bucket_id, bucket in buckets.iteritems():
print("B {}: {}".format(bucket_id, bucket['size']))
def make_random_tables():
'''테스트용 랜덤 테이블 데이터를 생성한다.'''
tables = []
for idx in xrange(4000):
tables.append((idx, random.randint(10, 500000)))
return tables
def get_tables_testset():
'''테스트용 테이블 데이터를 반환한다.'''
return [(0, 480734), (1, 329138), (2, 184906), (3, 56447), (4, 198518), (5, 284772), (6, 103714), (7, 461106), (8, 156359), (9, 1726), (10, 100663), (11, 144294), (12, 240818), (13, 237873), (14, 202975), (15, 19248), (16, 94214), (17, 142743), (18, 449791), (19, 384675), (20, 233648), (21, 313832), (22, 307023), (23, 302633), (24, 207259)]
def main():
tables = make_random_tables()
started = dt.datetime.now()
distribute(tables)
elasped = dt.datetime.now() - started
print('{} secs elasped'.format(elasped.total_seconds()))
if __name__ == '__main__':
main()
Number of tables: 25
== 2 Buckets ==
Bucket 0: 2825054 - [(0, 480734), (19, 384675), (1, 329138), (22, 307023), (5, 284772), (20, 233648), (14, 202975), (2, 184906), (8, 156359), (6, 103714), (10, 100663), (3, 56447)]
Bucket 1: 2814055 - [(7, 461106), (18, 449791), (21, 313832), (23, 302633), (12, 240818), (13, 237873), (24, 207259), (4, 198518), (11, 144294), (17, 142743), (16, 94214), (15, 19248), (9, 1726)]
== 3 Buckets ==
Bucket 0: 1883008 - [(0, 480734), (21, 313832), (23, 302633), (12, 240818), (14, 202975), (2, 184906), (10, 100663), (3, 56447)]
Bucket 1: 1896686 - [(7, 461106), (1, 329138), (22, 307023), (13, 237873), (24, 207259), (8, 156359), (6, 103714), (16, 94214)]
Bucket 2: 1859415 - [(18, 449791), (19, 384675), (5, 284772), (20, 233648), (4, 198518), (11, 144294), (17, 142743), (15, 19248), (9, 1726)]
== 4 Buckets ==
Bucket 0: 1379254 - [(0, 480734), (23, 302633), (20, 233648), (2, 184906), (8, 156359), (15, 19248), (9, 1726)]
Bucket 1: 1405261 - [(7, 461106), (22, 307023), (13, 237873), (4, 198518), (11, 144294), (3, 56447)]
Bucket 2: 1411793 - [(18, 449791), (21, 313832), (12, 240818), (14, 202975), (6, 103714), (10, 100663)]
Bucket 3: 1442801 - [(19, 384675), (1, 329138), (5, 284772), (24, 207259), (17, 142743), (16, 94214)]
== 5 Buckets ==
Bucket 0: 1129552 - [(0, 480734), (12, 240818), (24, 207259), (11, 144294), (3, 56447)]
Bucket 1: 1093322 - [(7, 461106), (5, 284772), (14, 202975), (17, 142743), (9, 1726)]
Bucket 2: 1155319 - [(18, 449791), (23, 302633), (4, 198518), (6, 103714), (10, 100663)]
Bucket 3: 1100953 - [(19, 384675), (22, 307023), (20, 233648), (8, 156359), (15, 19248)]
Bucket 4: 1159963 - [(1, 329138), (21, 313832), (13, 237873), (2, 184906), (16, 94214)]
== 6 Buckets ==
Bucket 0: 952890 - [(0, 480734), (20, 233648), (11, 144294), (16, 94214)]
Bucket 1: 956001 - [(7, 461106), (13, 237873), (8, 156359), (10, 100663)]
Bucket 2: 896489 - [(18, 449791), (12, 240818), (2, 184906), (15, 19248), (9, 1726)]
Bucket 3: 924412 - [(19, 384675), (5, 284772), (4, 198518), (3, 56447)]
Bucket 4: 938460 - [(1, 329138), (23, 302633), (14, 202975), (6, 103714)]
Bucket 5: 970857 - [(21, 313832), (22, 307023), (24, 207259), (17, 142743)]
== 7 Buckets ==
Bucket 0: 784372 - [(0, 480734), (14, 202975), (10, 100663)]
Bucket 1: 811108 - [(7, 461106), (24, 207259), (17, 142743)]
Bucket 2: 787153 - [(18, 449791), (20, 233648), (6, 103714)]
Bucket 3: 823289 - [(19, 384675), (13, 237873), (11, 144294), (3, 56447)]
Bucket 4: 787722 - [(1, 329138), (12, 240818), (4, 198518), (15, 19248)]
Bucket 5: 785236 - [(21, 313832), (5, 284772), (2, 184906), (9, 1726)]
Bucket 6: 860229 - [(22, 307023), (23, 302633), (8, 156359), (16, 94214)]
== 8 Buckets ==
Bucket 0: 686614 - [(0, 480734), (2, 184906), (15, 19248), (9, 1726)]
Bucket 1: 716071 - [(7, 461106), (4, 198518), (3, 56447)]
Bucket 2: 746980 - [(18, 449791), (14, 202975), (16, 94214)]
Bucket 3: 692597 - [(19, 384675), (24, 207259), (10, 100663)]
Bucket 4: 705529 - [(1, 329138), (20, 233648), (17, 142743)]
Bucket 5: 695999 - [(21, 313832), (13, 237873), (11, 144294)]
Bucket 6: 704200 - [(22, 307023), (12, 240818), (8, 156359)]
Bucket 7: 691119 - [(23, 302633), (5, 284772), (6, 103714)]
== 9 Buckets ==
Bucket 0: 625028 - [(0, 480734), (11, 144294)]
Bucket 1: 617465 - [(7, 461106), (8, 156359)]
Bucket 2: 634697 - [(18, 449791), (2, 184906)]
Bucket 3: 602441 - [(19, 384675), (4, 198518), (15, 19248)]
Bucket 4: 632776 - [(1, 329138), (14, 202975), (10, 100663)]
Bucket 5: 663834 - [(21, 313832), (24, 207259), (17, 142743)]
Bucket 6: 598844 - [(22, 307023), (20, 233648), (3, 56447), (9, 1726)]
Bucket 7: 634720 - [(23, 302633), (13, 237873), (16, 94214)]
Bucket 8: 629304 - [(5, 284772), (12, 240818), (6, 103714)]
== 10 Buckets ==
Bucket 0: 581397 - [(0, 480734), (10, 100663)]
Bucket 1: 603849 - [(7, 461106), (17, 142743)]
Bucket 2: 594085 - [(18, 449791), (11, 144294)]
Bucket 3: 541034 - [(19, 384675), (8, 156359)]
Bucket 4: 515770 - [(1, 329138), (2, 184906), (9, 1726)]
Bucket 5: 531598 - [(21, 313832), (4, 198518), (15, 19248)]
Bucket 6: 566445 - [(22, 307023), (14, 202975), (3, 56447)]
Bucket 7: 604106 - [(23, 302633), (24, 207259), (16, 94214)]
Bucket 8: 518420 - [(5, 284772), (20, 233648)]
Bucket 9: 582405 - [(12, 240818), (13, 237873), (6, 103714)]
== 11 Buckets ==
Bucket 0: 480734 - [(0, 480734)]
Bucket 1: 555320 - [(7, 461106), (16, 94214)]
Bucket 2: 550454 - [(18, 449791), (10, 100663)]
Bucket 3: 527418 - [(19, 384675), (17, 142743)]
Bucket 4: 475158 - [(1, 329138), (11, 144294), (9, 1726)]
Bucket 5: 526638 - [(21, 313832), (8, 156359), (3, 56447)]
Bucket 6: 491929 - [(22, 307023), (2, 184906)]
Bucket 7: 501151 - [(23, 302633), (4, 198518)]
Bucket 8: 487747 - [(5, 284772), (14, 202975)]
Bucket 9: 551791 - [(12, 240818), (24, 207259), (6, 103714)]
Bucket 10: 490769 - [(13, 237873), (20, 233648), (15, 19248)]
0.051 secs elasped
Number of tables: 4000
== 2 Buckets ==
B 0: 501547134
B 1: 501547331
== 3 Buckets ==
B 0: 334364765
B 1: 334364887
B 2: 334364813
== 4 Buckets ==
B 0: 250773526
B 1: 250773726
B 2: 250773697
B 3: 250773516
== 5 Buckets ==
B 0: 200618980
B 1: 200618853
B 2: 200618804
B 3: 200618909
B 4: 200618919
== 6 Buckets ==
B 0: 167182557
B 1: 167182313
B 2: 167182340
B 3: 167182557
B 4: 167182265
B 5: 167182433
== 7 Buckets ==
B 0: 143299046
B 1: 143299221
B 2: 143299149
B 3: 143299129
B 4: 143299211
B 5: 143299062
B 6: 143299647
== 8 Buckets ==
B 0: 125386712
B 1: 125386523
B 2: 125386705
B 3: 125386924
B 4: 125386796
B 5: 125386884
B 6: 125386863
B 7: 125387058
== 9 Buckets ==
B 0: 111454553
B 1: 111454869
B 2: 111454913
B 3: 111455091
B 4: 111455295
B 5: 111454920
B 6: 111455227
B 7: 111454728
B 8: 111454869
== 10 Buckets ==
B 0: 100310005
B 1: 100309239
B 2: 100309152
B 3: 100309773
B 4: 100309302
B 5: 100309426
B 6: 100309664
B 7: 100309043
B 8: 100309174
B 9: 100309687
== 11 Buckets ==
B 0: 91190261
B 1: 91190226
B 2: 91190237
B 3: 91190581
B 4: 91190611
B 5: 91190609
B 6: 91190424
B 7: 91190478
B 8: 91190297
B 9: 91190296
B 10: 91190445
== 12 Buckets ==
B 0: 83590998
B 1: 83590844
B 2: 83591296
B 3: 83591532
B 4: 83591424
B 5: 83591210
B 6: 83591474
B 7: 83590860
B 8: 83591479
B 9: 83590819
B 10: 83591068
B 11: 83591461
== 13 Buckets ==
B 0: 77161163
B 1: 77161609
B 2: 77160934
B 3: 77160765
B 4: 77160862
B 5: 77160928
B 6: 77161113
B 7: 77161483
B 8: 77161218
B 9: 77161049
B 10: 77161589
B 11: 77160724
B 12: 77161028
== 14 Buckets ==
B 0: 71649427
B 1: 71649767
B 2: 71649457
B 3: 71649925
B 4: 71650053
B 5: 71649080
B 6: 71649436
B 7: 71649646
B 8: 71649244
B 9: 71649272
B 10: 71649073
B 11: 71649528
B 12: 71650522
B 13: 71650035
== 15 Buckets ==
B 0: 66872833
B 1: 66872638
B 2: 66872621
B 3: 66872461
B 4: 66873383
B 5: 66873017
B 6: 66873879
B 7: 66872825
B 8: 66873127
B 9: 66873532
B 10: 66872524
B 11: 66872741
B 12: 66872901
B 13: 66873389
B 14: 66872594
== 16 Buckets ==
B 0: 62693281
B 1: 62693471
B 2: 62693806
B 3: 62692993
B 4: 62693442
B 5: 62693959
B 6: 62693837
B 7: 62693029
B 8: 62692832
B 9: 62692821
B 10: 62693783
B 11: 62693756
B 12: 62693880
B 13: 62692805
B 14: 62692906
B 15: 62693864
== 17 Buckets ==
B 0: 59005800
B 1: 59005610
B 2: 59005351
B 3: 59005727
B 4: 59005292
B 5: 59005663
B 6: 59005870
B 7: 59005371
B 8: 59005289
B 9: 59005519
B 10: 59005419
B 11: 59006010
B 12: 59005559
B 13: 59005467
B 14: 59005383
B 15: 59005478
B 16: 59005657
== 18 Buckets ==
B 0: 55727022
B 1: 55727544
B 2: 55727094
B 3: 55727678
B 4: 55728071
B 5: 55727041
B 6: 55727417
B 7: 55727869
B 8: 55727482
B 9: 55726840
B 10: 55727751
B 11: 55727979
B 12: 55727307
B 13: 55727346
B 14: 55727725
B 15: 55727745
B 16: 55726997
B 17: 55727557
== 19 Buckets ==
B 0: 52794098
B 1: 52794453
B 2: 52795076
B 3: 52794203
B 4: 52794141
B 5: 52794292
B 6: 52794757
B 7: 52794425
B 8: 52794484
B 9: 52794543
B 10: 52794269
B 11: 52794270
B 12: 52794338
B 13: 52794458
B 14: 52794269
B 15: 52794443
B 16: 52794751
B 17: 52794344
B 18: 52794851
== 20 Buckets ==
B 0: 50154017
B 1: 50155001
B 2: 50154405
B 3: 50153969
B 4: 50154032
B 5: 50155200
B 6: 50155553
B 7: 50155589
B 8: 50154752
B 9: 50154291
B 10: 50155095
B 11: 50154987
B 12: 50154056
B 13: 50154309
B 14: 50155540
B 15: 50155269
B 16: 50155372
B 17: 50154023
B 18: 50155159
B 19: 50153846
== 21 Buckets ==
B 0: 47766320
B 1: 47766141
B 2: 47766473
B 3: 47766525
B 4: 47766250
B 5: 47766257
B 6: 47766487
B 7: 47766100
B 8: 47766109
B 9: 47766978
B 10: 47766561
B 11: 47766599
B 12: 47766476
B 13: 47766637
B 14: 47766526
B 15: 47766207
B 16: 47766223
B 17: 47766452
B 18: 47766446
B 19: 47766122
B 20: 47766576
== 22 Buckets ==
B 0: 45594870
B 1: 45596156
B 2: 45594664
B 3: 45594381
B 4: 45596330
B 5: 45594756
B 6: 45596064
B 7: 45596048
B 8: 45595850
B 9: 45596109
B 10: 45594458
B 11: 45595441
B 12: 45595045
B 13: 45594665
B 14: 45595981
B 15: 45594823
B 16: 45595663
B 17: 45594398
B 18: 45594369
B 19: 45595047
B 20: 45594976
B 21: 45594371
== 23 Buckets ==
B 0: 43613453
B 1: 43612299
B 2: 43612334
B 3: 43613451
B 4: 43612022
B 5: 43612958
B 6: 43612258
B 7: 43613184
B 8: 43612265
B 9: 43612385
B 10: 43613080
B 11: 43613239
B 12: 43613140
B 13: 43613176
B 14: 43612708
B 15: 43612729
B 16: 43613397
B 17: 43613267
B 18: 43612547
B 19: 43611876
B 20: 43613119
B 21: 43612062
B 22: 43613516
== 24 Buckets ==
B 0: 41795091
B 1: 41795182
B 2: 41795662
B 3: 41796159
B 4: 41795679
B 5: 41795224
B 6: 41796508
B 7: 41795156
B 8: 41795141
B 9: 41795646
B 10: 41796412
B 11: 41795391
B 12: 41795128
B 13: 41796475
B 14: 41795132
B 15: 41796371
B 16: 41796444
B 17: 41796535
B 18: 41795185
B 19: 41795275
B 20: 41795167
B 21: 41795167
B 22: 41795169
B 23: 41795166
== 25 Buckets ==
B 0: 40124492
B 1: 40122677
B 2: 40122776
B 3: 40124908
B 4: 40124083
B 5: 40123107
B 6: 40124396
B 7: 40124769
B 8: 40124128
B 9: 40123821
B 10: 40123587
B 11: 40122333
B 12: 40124417
B 13: 40124148
B 14: 40125131
B 15: 40122464
B 16: 40122486
B 17: 40122554
B 18: 40124250
B 19: 40123125
B 20: 40124710
B 21: 40124999
B 22: 40123010
B 23: 40124003
B 24: 40124091
== 26 Buckets ==
B 0: 38581495
B 1: 38580263
B 2: 38582029
B 3: 38579372
B 4: 38581160
B 5: 38581401
B 6: 38581371
B 7: 38580098
B 8: 38581681
B 9: 38579697
B 10: 38580290
B 11: 38579366
B 12: 38581953
B 13: 38580969
B 14: 38581290
B 15: 38579568
B 16: 38579421
B 17: 38579823
B 18: 38581825
B 19: 38579488
B 20: 38579504
B 21: 38581308
B 22: 38579343
B 23: 38580758
B 24: 38581686
B 25: 38579306
== 27 Buckets ==
B 0: 37150824
B 1: 37151247
B 2: 37152358
B 3: 37152169
B 4: 37151942
B 5: 37151505
B 6: 37151498
B 7: 37151873
B 8: 37151109
B 9: 37151429
B 10: 37151343
B 11: 37152193
B 12: 37150879
B 13: 37152210
B 14: 37151425
B 15: 37152164
B 16: 37150960
B 17: 37152166
B 18: 37152095
B 19: 37151659
B 20: 37151447
B 21: 37152327
B 22: 37151396
B 23: 37151611
B 24: 37152317
B 25: 37151454
B 26: 37150865
== 28 Buckets ==
B 0: 35823841
B 1: 35823993
B 2: 35825852
B 3: 35824505
B 4: 35825969
B 5: 35825796
B 6: 35825004
B 7: 35824348
B 8: 35823968
B 9: 35823511
B 10: 35824095
B 11: 35825615
B 12: 35823960
B 13: 35824501
B 14: 35825440
B 15: 35825370
B 16: 35823781
B 17: 35825498
B 18: 35823686
B 19: 35825335
B 20: 35825391
B 21: 35825593
B 22: 35823749
B 23: 35826146
B 24: 35825374
B 25: 35825218
B 26: 35825444
B 27: 35823482
== 29 Buckets ==
B 0: 34587742
B 1: 34590766
B 2: 34589843
B 3: 34590534
B 4: 34589779
B 5: 34590333
B 6: 34588809
B 7: 34588614
B 8: 34590913
B 9: 34590176
B 10: 34588234
B 11: 34590599
B 12: 34588016
B 13: 34588048
B 14: 34588106
B 15: 34590962
B 16: 34589310
B 17: 34587856
B 18: 34588772
B 19: 34589541
B 20: 34590011
B 21: 34589708
B 22: 34590938
B 23: 34589912
B 24: 34587799
B 25: 34588356
B 26: 34590944
B 27: 34589668
B 28: 34590176
== 30 Buckets ==
B 0: 33436122
B 1: 33435959
B 2: 33436829
B 3: 33436227
B 4: 33435928
B 5: 33436850
B 6: 33436785
B 7: 33436150
B 8: 33436877
B 9: 33437126
B 10: 33436732
B 11: 33437138
B 12: 33436328
B 13: 33437154
B 14: 33435974
B 15: 33436146
B 16: 33436352
B 17: 33436600
B 18: 33436123
B 19: 33436141
B 20: 33436476
B 21: 33436123
B 22: 33436287
B 23: 33436814
B 24: 33437155
B 25: 33435961
B 26: 33436145
B 27: 33436833
B 28: 33437041
B 29: 33436089
== 31 Buckets ==
B 0: 32356529
B 1: 32358862
B 2: 32359433
B 3: 32356545
B 4: 32357220
B 5: 32358167
B 6: 32356440
B 7: 32358834
B 8: 32358927
B 9: 32356430
B 10: 32358099
B 11: 32356725
B 12: 32358454
B 13: 32357811
B 14: 32357877
B 15: 32357856
B 16: 32357613
B 17: 32358913
B 18: 32356687
B 19: 32357429
B 20: 32358379
B 21: 32358608
B 22: 32356699
B 23: 32358813
B 24: 32357927
B 25: 32356692
B 26: 32357744
B 27: 32358084
B 28: 32358837
B 29: 32358902
B 30: 32358929
== 32 Buckets ==
B 0: 31345396
B 1: 31345417
B 2: 31347917
B 3: 31347755
B 4: 31347449
B 5: 31347194
B 6: 31347808
B 7: 31347769
B 8: 31346244
B 9: 31347025
B 10: 31345558
B 11: 31346609
B 12: 31345583
B 13: 31346023
B 14: 31347810
B 15: 31348263
B 16: 31345075
B 17: 31345277
B 18: 31347799
B 19: 31345122
B 20: 31347592
B 21: 31346746
B 22: 31346838
B 23: 31347037
B 24: 31345167
B 25: 31346539
B 26: 31345369
B 27: 31346678
B 28: 31347395
B 29: 31347776
B 30: 31346424
B 31: 31347811
== 33 Buckets ==
B 0: 30396524
B 1: 30396724
B 2: 30397291
B 3: 30396704
B 4: 30396547
B 5: 30397221
B 6: 30396814
B 7: 30396582
B 8: 30397352
B 9: 30396423
B 10: 30396773
B 11: 30396422
B 12: 30397293
B 13: 30396741
B 14: 30396472
B 15: 30397026
B 16: 30396494
B 17: 30396448
B 18: 30396603
B 19: 30396470
B 20: 30396714
B 21: 30396790
B 22: 30397607
B 23: 30396515
B 24: 30396584
B 25: 30396540
B 26: 30397494
B 27: 30397651
B 28: 30396435
B 29: 30397625
B 30: 30396565
B 31: 30396558
B 32: 30396463
== 34 Buckets ==
B 0: 29502840
B 1: 29504312
B 2: 29501942
B 3: 29502421
B 4: 29504156
B 5: 29503653
B 6: 29502184
B 7: 29504023
B 8: 29502136
B 9: 29501888
B 10: 29501990
B 11: 29503543
B 12: 29502331
B 13: 29501826
B 14: 29502804
B 15: 29503325
B 16: 29502654
B 17: 29502226
B 18: 29503598
B 19: 29501821
B 20: 29501868
B 21: 29501838
B 22: 29504023
B 23: 29501875
B 24: 29501885
B 25: 29503781
B 26: 29502154
B 27: 29501924
B 28: 29503869
B 29: 29503719
B 30: 29504351
B 31: 29501898
B 32: 29501936
B 33: 29503671
== 35 Buckets ==
B 0: 28659755
B 1: 28659523
B 2: 28659724
B 3: 28659466
B 4: 28659903
B 5: 28660307
B 6: 28659481
B 7: 28659443
B 8: 28659612
B 9: 28660130
B 10: 28660140
B 11: 28659818
B 12: 28659462
B 13: 28659898
B 14: 28660046
B 15: 28659733
B 16: 28659889
B 17: 28659705
B 18: 28659526
B 19: 28659438
B 20: 28659430
B 21: 28660376
B 22: 28659761
B 23: 28660144
B 24: 28660165
B 25: 28659784
B 26: 28660122
B 27: 28659891
B 28: 28660817
B 29: 28659760
B 30: 28660330
B 31: 28659410
B 32: 28660118
B 33: 28659844
B 34: 28659514
== 36 Buckets ==
B 0: 27863828
B 1: 27863820
B 2: 27863153
B 3: 27863703
B 4: 27863638
B 5: 27863722
B 6: 27864367
B 7: 27864386
B 8: 27863501
B 9: 27863630
B 10: 27863165
B 11: 27863820
B 12: 27864651
B 13: 27863597
B 14: 27863412
B 15: 27864560
B 16: 27862998
B 17: 27864374
B 18: 27863838
B 19: 27863656
B 20: 27863704
B 21: 27862953
B 22: 27863238
B 23: 27864433
B 24: 27864662
B 25: 27864678
B 26: 27862968
B 27: 27862797
B 28: 27863453
B 29: 27863726
B 30: 27863596
B 31: 27863219
B 32: 27863604
B 33: 27863833
B 34: 27863542
B 35: 27864240
== 37 Buckets ==
B 0: 27110292
B 1: 27110246
B 2: 27111348
B 3: 27110276
B 4: 27110269
B 5: 27110720
B 6: 27110509
B 7: 27110570
B 8: 27111288
B 9: 27110133
B 10: 27110545
B 11: 27111329
B 12: 27110532
B 13: 27111222
B 14: 27110563
B 15: 27111636
B 16: 27110489
B 17: 27111044
B 18: 27110331
B 19: 27110335
B 20: 27110336
B 21: 27110550
B 22: 27110178
B 23: 27110248
B 24: 27110521
B 25: 27111260
B 26: 27110496
B 27: 27110339
B 28: 27111104
B 29: 27110559
B 30: 27110396
B 31: 27111375
B 32: 27110644
B 33: 27110590
B 34: 27110644
B 35: 27111346
B 36: 27110202
== 38 Buckets ==
B 0: 26397499
B 1: 26397259
B 2: 26397481
B 3: 26397307
B 4: 26397539
B 5: 26397030
B 6: 26397301
B 7: 26397305
B 8: 26397251
B 9: 26397642
B 10: 26398015
B 11: 26397554
B 12: 26397555
B 13: 26397151
B 14: 26396896
B 15: 26397471
B 16: 26397011
B 17: 26396718
B 18: 26396881
B 19: 26397443
B 20: 26397512
B 21: 26396989
B 22: 26396854
B 23: 26397344
B 24: 26397454
B 25: 26396654
B 26: 26397340
B 27: 26397044
B 28: 26397247
B 29: 26396638
B 30: 26396854
B 31: 26397622
B 32: 26397455
B 33: 26396941
B 34: 26397005
B 35: 26396832
B 36: 26396848
B 37: 26397523
== 39 Buckets ==
B 0: 25720504
B 1: 25721293
B 2: 25721573
B 3: 25719852
B 4: 25720026
B 5: 25720532
B 6: 25721431
B 7: 25719480
B 8: 25721277
B 9: 25719490
B 10: 25720056
B 11: 25720346
B 12: 25720075
B 13: 25721500
B 14: 25719784
B 15: 25719773
B 16: 25719588
B 17: 25721874
B 18: 25719586
B 19: 25721560
B 20: 25719875
B 21: 25719840
B 22: 25721228
B 23: 25719478
B 24: 25721260
B 25: 25721029
B 26: 25719483
B 27: 25719482
B 28: 25721399
B 29: 25720087
B 30: 25719982
B 31: 25719513
B 32: 25721686
B 33: 25719892
B 34: 25721938
B 35: 25719784
B 36: 25719805
B 37: 25719543
B 38: 25719561
== 40 Buckets ==
B 0: 25078492
B 1: 25078497
B 2: 25077234
B 3: 25077777
B 4: 25077264
B 5: 25078588
B 6: 25077033
B 7: 25078464
B 8: 25076206
B 9: 25078526
B 10: 25076246
B 11: 25076244
B 12: 25077303
B 13: 25076390
B 14: 25078825
B 15: 25076250
B 16: 25077290
B 17: 25076131
B 18: 25077673
B 19: 25078243
B 20: 25078423
B 21: 25076693
B 22: 25076198
B 23: 25076097
B 24: 25077454
B 25: 25078766
B 26: 25077727
B 27: 25077015
B 28: 25077687
B 29: 25076929
B 30: 25077690
B 31: 25077143
B 32: 25077824
B 33: 25077678
B 34: 25077167
B 35: 25077044
B 36: 25076150
B 37: 25077332
B 38: 25077677
B 39: 25077095
== 41 Buckets ==
B 0: 24465790
B 1: 24465144
B 2: 24465088
B 3: 24466791
B 4: 24465391
B 5: 24466727
B 6: 24465109
B 7: 24466478
B 8: 24466466
B 9: 24464917
B 10: 24465203
B 11: 24465723
B 12: 24465208
B 13: 24465052
B 14: 24465040
B 15: 24465054
B 16: 24465106
B 17: 24465109
B 18: 24465276
B 19: 24465848
B 20: 24465903
B 21: 24466412
B 22: 24465102
B 23: 24465858
B 24: 24466206
B 25: 24465515
B 26: 24466860
B 27: 24466584
B 28: 24466843
B 29: 24464818
B 30: 24466304
B 31: 24465741
B 32: 24465003
B 33: 24466604
B 34: 24466573
B 35: 24466430
B 36: 24465140
B 37: 24465131
B 38: 24465160
B 39: 24466710
B 40: 24465048
== 42 Buckets ==
B 0: 23883767
B 1: 23883855
B 2: 23883132
B 3: 23883180
B 4: 23882796
B 5: 23882964
B 6: 23882795
B 7: 23883510
B 8: 23883585
B 9: 23883509
B 10: 23883014
B 11: 23883295
B 12: 23883520
B 13: 23882566
B 14: 23882831
B 15: 23882847
B 16: 23883259
B 17: 23882964
B 18: 23883012
B 19: 23883890
B 20: 23883498
B 21: 23883268
B 22: 23883546
B 23: 23882602
B 24: 23883642
B 25: 23882689
B 26: 23882693
B 27: 23883575
B 28: 23883554
B 29: 23882695
B 30: 23883318
B 31: 23883883
B 32: 23883464
B 33: 23882595
B 34: 23883467
B 35: 23882999
B 36: 23882672
B 37: 23883604
B 38: 23882876
B 39: 23882686
B 40: 23883602
B 41: 23883246
== 43 Buckets ==
B 0: 23327250
B 1: 23327926
B 2: 23326699
B 3: 23328145
B 4: 23329422
B 5: 23327930
B 6: 23329169
B 7: 23327094
B 8: 23326788
B 9: 23326894
B 10: 23327118
B 11: 23329065
B 12: 23327896
B 13: 23329160
B 14: 23326693
B 15: 23326781
B 16: 23327202
B 17: 23329222
B 18: 23328090
B 19: 23326787
B 20: 23328907
B 21: 23327460
B 22: 23326559
B 23: 23326881
B 24: 23328830
B 25: 23328077
B 26: 23329157
B 27: 23328663
B 28: 23329295
B 29: 23326600
B 30: 23326776
B 31: 23329379
B 32: 23327891
B 33: 23328781
B 34: 23326845
B 35: 23326692
B 36: 23326497
B 37: 23328109
B 38: 23327535
B 39: 23326707
B 40: 23326940
B 41: 23328860
B 42: 23327693
== 44 Buckets ==
B 0: 22797279
B 1: 22797347
B 2: 22798359
B 3: 22796186
B 4: 22797502
B 5: 22799181
B 6: 22796439
B 7: 22796332
B 8: 22797001
B 9: 22797250
B 10: 22798218
B 11: 22798169
B 12: 22796189
B 13: 22797680
B 14: 22797964
B 15: 22799246
B 16: 22795911
B 17: 22798330
B 18: 22797673
B 19: 22796005
B 20: 22798199
B 21: 22797413
B 22: 22796221
B 23: 22796799
B 24: 22796111
B 25: 22797999
B 26: 22799265
B 27: 22796289
B 28: 22798388
B 29: 22797120
B 30: 22798878
B 31: 22799378
B 32: 22799070
B 33: 22796491
B 34: 22799025
B 35: 22798337
B 36: 22796020
B 37: 22798200
B 38: 22799125
B 39: 22797813
B 40: 22798110
B 41: 22796331
B 42: 22796495
B 43: 22799127
== 45 Buckets ==
B 0: 22289521
B 1: 22291358
B 2: 22290750
B 3: 22290047
B 4: 22292361
B 5: 22289748
B 6: 22289702
B 7: 22290664
B 8: 22289773
B 9: 22290959
B 10: 22291668
B 11: 22291112
B 12: 22291643
B 13: 22291712
B 14: 22289744
B 15: 22291697
B 16: 22292359
B 17: 22292440
B 18: 22289721
B 19: 22291282
B 20: 22290213
B 21: 22292390
B 22: 22290664
B 23: 22292499
B 24: 22292671
B 25: 22290780
B 26: 22291509
B 27: 22289631
B 28: 22292485
B 29: 22292167
B 30: 22290701
B 31: 22291677
B 32: 22289584
B 33: 22290442
B 34: 22292593
B 35: 22289887
B 36: 22291776
B 37: 22290957
B 38: 22291655
B 39: 22290567
B 40: 22289552
B 41: 22290098
B 42: 22289833
B 43: 22291715
B 44: 22290158
== 46 Buckets ==
B 0: 21806114
B 1: 21805121
B 2: 21805200
B 3: 21805895
B 4: 21806599
B 5: 21806012
B 6: 21805326
B 7: 21807878
B 8: 21805783
B 9: 21806044
B 10: 21806303
B 11: 21807621
B 12: 21807594
B 13: 21807611
B 14: 21807312
B 15: 21806539
B 16: 21805564
B 17: 21805649
B 18: 21807315
B 19: 21805303
B 20: 21805813
B 21: 21805235
B 22: 21805436
B 23: 21806449
B 24: 21806297
B 25: 21806317
B 26: 21806433
B 27: 21805366
B 28: 21807520
B 29: 21806214
B 30: 21805990
B 31: 21805742
B 32: 21807106
B 33: 21806483
B 34: 21805911
B 35: 21806432
B 36: 21805806
B 37: 21807335
B 38: 21806549
B 39: 21806572
B 40: 21806018
B 41: 21807871
B 42: 21807936
B 43: 21807779
B 44: 21805801
B 45: 21807271
== 47 Buckets ==
B 0: 21341783
B 1: 21341603
B 2: 21342464
B 3: 21342256
B 4: 21342288
B 5: 21342151
B 6: 21342625
B 7: 21342741
B 8: 21341866
B 9: 21343363
B 10: 21342743
B 11: 21342015
B 12: 21342656
B 13: 21341878
B 14: 21341611
B 15: 21342743
B 16: 21341633
B 17: 21343028
B 18: 21342035
B 19: 21342607
B 20: 21342010
B 21: 21342621
B 22: 21342422
B 23: 21342752
B 24: 21342091
B 25: 21343370
B 26: 21342749
B 27: 21342227
B 28: 21342983
B 29: 21341632
B 30: 21342725
B 31: 21342270
B 32: 21342326
B 33: 21343357
B 34: 21342951
B 35: 21342650
B 36: 21342445
B 37: 21342608
B 38: 21341784
B 39: 21343162
B 40: 21342416
B 41: 21342688
B 42: 21342158
B 43: 21341835
B 44: 21342705
B 45: 21342813
B 46: 21342626
== 48 Buckets ==
B 0: 20897782
B 1: 20897814
B 2: 20898024
B 3: 20898050
B 4: 20897244
B 5: 20897763
B 6: 20897970
B 7: 20897824
B 8: 20897187
B 9: 20899056
B 10: 20897680
B 11: 20898512
B 12: 20898063
B 13: 20897833
B 14: 20897281
B 15: 20897612
B 16: 20897303
B 17: 20897079
B 18: 20898909
B 19: 20896995
B 20: 20898013
B 21: 20897779
B 22: 20897337
B 23: 20898015
B 24: 20897425
B 25: 20897723
B 26: 20898032
B 27: 20897116
B 28: 20897554
B 29: 20897625
B 30: 20897368
B 31: 20897834
B 32: 20898062
B 33: 20897261
B 34: 20897683
B 35: 20897856
B 36: 20898995
B 37: 20897004
B 38: 20898994
B 39: 20897757
B 40: 20897530
B 41: 20897803
B 42: 20897127
B 43: 20897827
B 44: 20897867
B 45: 20897076
B 46: 20899082
B 47: 20898739
== 49 Buckets ==
B 0: 20471636
B 1: 20471794
B 2: 20470406
B 3: 20472519
B 4: 20470526
B 5: 20471546
B 6: 20471011
B 7: 20470071
B 8: 20470143
B 9: 20470037
B 10: 20470411
B 11: 20470395
B 12: 20469860
B 13: 20471377
B 14: 20470028
B 15: 20472629
B 16: 20470436
B 17: 20470334
B 18: 20471664
B 19: 20470496
B 20: 20471553
B 21: 20472754
B 22: 20472497
B 23: 20471240
B 24: 20472397
B 25: 20471490
B 26: 20470646
B 27: 20469911
B 28: 20470516
B 29: 20472488
B 30: 20470244
B 31: 20471645
B 32: 20472707
B 33: 20472516
B 34: 20471049
B 35: 20472229
B 36: 20472704
B 37: 20472669
B 38: 20470418
B 39: 20472152
B 40: 20471934
B 41: 20470184
B 42: 20471205
B 43: 20471735
B 44: 20471774
B 45: 20471462
B 46: 20472485
B 47: 20471465
B 48: 20471077
1.211 secs elasped
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment