(Python)
来自itertools导入产品
从数学导入prod
从集合导入defaultdict
adjacent_ok=λu,v:不(u==v==2或u+v<=1)
apex_config_ok=lambda x:范围(3)中i的所有(相邻_确定(x[i][(i+1)%3],x[(i+1)%3][i]))
coeffs=defaultdict(lambda:defaultdic(int))#要在v(n)的递归中使用的预计算系数。
对于产品中的x(产品(范围(3),重复=3),重复=3):
#每个三重x[i]表示H_n的三个子三角形之一的“几乎最大”独立集(顶点节点及其相邻节点可能都在集之外)。
#三元组的元素表示顶点节点的配置:
#0:顶点节点不在集合中,也不在其任何邻居中;
#1:顶点节点不在集合中,但它的一个相邻节点在集合中;
#2:顶点节点在集合中。
如果x[0][0]<=x[1][1]<=x[2][2]和apex_config_ok(x):
xsort=元组(x中t的排序(元组(排序(t)))
系数[(x[0][0],x[1][1],x[2][2])][xsort]+=1
定义v(n):
如果n==1:
w={c:0表示系数中的c}
w[(0,0,0)]=w[(1,1,2)]=1
返回w
v0=v(n-1)
返回{c:sum(coeffs[c][x]*prod(v0[k]代表k in x)代表x in coeffs[c])代表c in coefs}
vn=v(n)
|