pure python for comparison
This commit is contained in:
parent
39cfb20f13
commit
f420690041
|
@ -0,0 +1,75 @@
|
|||
import itertools
|
||||
from math import inf
|
||||
|
||||
n = 16
|
||||
k = 6
|
||||
p = 2
|
||||
|
||||
def in_set_a(x):
|
||||
return x.bit_count() == k
|
||||
|
||||
def in_set_b(y):
|
||||
return y.bit_count() == k + 1
|
||||
|
||||
def related(a, b):
|
||||
return (x ^ y).bit_count() == 1
|
||||
|
||||
|
||||
m = inf
|
||||
m_prime = inf
|
||||
|
||||
window = (1 << p) - 1
|
||||
l = 0
|
||||
l_prime = 0
|
||||
|
||||
# Look at all the `x`s, find the `x` with least number of relations, and
|
||||
# what is the `x` with most relations (under the window condition)
|
||||
for x in range(2**n):
|
||||
if not in_set_a(x):
|
||||
continue
|
||||
|
||||
relations_count = 0
|
||||
|
||||
for y in range(2**n):
|
||||
if not in_set_b(y):
|
||||
continue
|
||||
|
||||
if not related(x, y):
|
||||
continue
|
||||
|
||||
relations_count += 1
|
||||
|
||||
if (x & window) != (y & window):
|
||||
l += 1
|
||||
|
||||
# This `x` has less relations than all `x` we've looked at so far
|
||||
if relations_count < m:
|
||||
m = relations_count
|
||||
|
||||
for y in range(2**n):
|
||||
if not in_set_b(y):
|
||||
continue
|
||||
|
||||
relations_count = 0
|
||||
|
||||
for x in range(2**n):
|
||||
if not in_set_a(x):
|
||||
continue
|
||||
|
||||
if not related(x, y):
|
||||
continue
|
||||
|
||||
relations_count += 1
|
||||
|
||||
if (x & window) != (y & window):
|
||||
l_prime += 1
|
||||
|
||||
# This `y` has less relations than all `y` we've looked at so far
|
||||
if relations_count < m_prime:
|
||||
m_prime = relations_count
|
||||
|
||||
# Finally, see if we can get a better `l_max` under this window than
|
||||
# what we've seen so far
|
||||
l_max = l * l_prime
|
||||
|
||||
print(m, m_prime, l_max)
|
Loading…
Reference in New Issue