import json from collections import deque import numpy as np def comps(adj, allowed=None): unseen=set(range(len(adj)) if allowed is None else allowed); out=[] while unseen: s=unseen.pop(); q=[s] for v in q: for w in adj[v]: if w in unseen: unseen.remove(w); q.append(w) out.append(q) return out def jordan(adj, c): C=set(c); ans={} for x in c: unseen=C-{x}; best=0 while unseen: s=unseen.pop(); q=[s]; z=1 for v in q: for w in adj[v]: if w!=x and w in unseen: unseen.remove(w); q.append(w); z+=1 best=max(best,z) ans[x]=best return ans def percolate_candidates(adj,p,R=8,K=3,L=8,seed=0): rng=np.random.default_rng(seed); n=len(adj); counts=np.zeros(n,dtype=int) edges=[(v,w) for v in range(n) for w in adj[v] if v=100 survival.append(hit/trials) # Prediction 2: 1-(1-x)^q = qx + O((qx)^2), so relative error grows with qx. xs=[.001,.005,.01,.02,.05]; q=20; rel=[] for x in xs: exact=1-(1-x)**q; rel.append(abs(exact-q*x)/exact) # Empirical probability check for the blob shortcut formula. nblob=100; p=.01; lam2=2.; pairs=[(1,1),(2,3),(5,5),(10,10)]; N=40000 shortcut=[] for wi,wj in pairs: prob=1-(1-p*lam2/nblob)**(wi*wj); hits=0 rr=np.random.default_rng(100+wi*10+wj) for _ in range(N): hits += rr.random()