Skip to content

Instantly share code, notes, and snippets.

@pimlock
Forked from colmmacc/shardcalc.py
Created September 12, 2018 18:42
Show Gist options
  • Save pimlock/b4279264a034f4095f4f0f618b318954 to your computer and use it in GitHub Desktop.
Save pimlock/b4279264a034f4095f4f0f618b318954 to your computer and use it in GitHub Desktop.
Calculate the blast radius of a shuffle shard
import sys
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
def choose(n, m):
return factorial(n) / (factorial(m) * factorial(n - m))
def overlap(n, m, o):
return (choose(m, o) * choose(n - m, m - o)) / choose(n, m)
def usage():
print "shard.py n m"
print
print " n: The total number of elements"
print " m: The number of elements per shard"
print
if __name__ == "__main__":
if len(sys.argv) != 3:
usage()
try:
n = int(sys.argv[1])
m = int(sys.argv[2])
except:
usage()
if m > n:
usage()
print "n = ", n
print "m = ", m
print
for i in range(0, m + 1):
print 'overlap: %-4d %0.20f' % (i, overlap(float(n), float(m), float(i)) * 100)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment