Ruby,58个字节
这是释放氦核C答案中算法的直接实现。
g=->m,n{n>m ?g[n,m]:m*~m*n*~n/4+n*((2*m-n)*(4*n*n-1)-3)/6}
我一直在研究为什么这个公式有效,但效果有限。很容易确认直立矩形的数量等于(m+1)*m/2 * (n+1)*n/2
,对角矩形的数量则难以捉摸。
尼尔(Neil)已经确认,m==n
正方形中的倾斜矩形数量n*n
为(4*n**4-n*n-3*n)/6
,并且当 m>n
您需要添加一个额外的矩形时(m-n)(n*(4*n*n-1)/3)
(与OEIS A000447有关),尽管这不能解释这两个公式的来源。我找到了答案的一部分。
因为m==n
,网格内部的形状是阿兹台克人的钻石。
矩形的在阿兹特克金刚石的数量大的矩形的数目的总和叠加,使其(用于第四金刚石,这是在一发现5x5
网格,2x8
,4x6
,6x4
,和8x2
)减去矩形的数目计数两次(数量前一个 Aztec菱形中的矩形)。
公式为(TeX将在以后添加):
# superimposed rectangles, 2x(2n-2), 4*(2n-4), ...
f = lambda n: sum( (2*k)*(2*k+1)/2 * (2*n-2*k)*(2*n-2*k+1)/2 for k in range(1, n) )
aztec_rect = f(n) - f(n-1)
根据Wolfram Alpha的说法,f
is 1/30*(n-1)*n*(4*n**3+14*n**2+19*n+9)
的闭合形式和aztec_rect
is 的闭合形式,如尼尔所发现的1/6*n*(n-1)*(4*n**2+4*n+3) == 1/6*(4*n**4-n**2-3*n)
。
我还没有发现,为什么(m-n)(n*(4*n*n-1)/3)
作品,但我怀疑这是因为一个定义A000447是binomial(2*n+1, 3)
。我会及时向大家发布。
更新:我有理由相信,扩展的Aztec钻石中矩形数目的函数与钻石负m>n
号中重叠的2k*2(n-k)
矩形数目有关F(m-1,n-1)
。当我有它们时,会有更多结果。
更新:我尝试了一条不同的路线,并得出了另一种扩展阿兹台克人(Aztec)钻石的公式,该公式大部分是可以解释的,但其中一个术语我还不了解。头晕!:D
def f(m,n):
if n > m:
return f(n,m)
if n == 0:
return 0
else:
return(m-n+1)*(4*n**4-n*n-3*n)/6-f(m-1,n-1)+(m-n)*2+(m-n)*(n-2)-(m-n-1)*f(n-1,n-1)
最后一个公式的快速分解:
(m-n+1)*(4*n**4-n*n-3*n)/6
是n
结构中大小重叠的Aztec钻石的数量,如f(n,n) = (4*n**4-n*n-3*n)/6
。f(7,3)
有5颗重叠的阿兹台克人钻石3
,而f(3,3)
只有1颗钻石。
-f(m-1,n-1)
从叠加的菱形的中间删除一些重复的矩形。
+(m-n)*2
占了2个额外的2
-by- (2n-1)
每个额外的钻石矩形。
+(m-n)*(n-2)
占额外n
-by- n
每个额外的钻石广场。
-(m-n-1)*f(n-1,n-1)
这是一个令人费解的新名词。显然,我在计算时没有考虑一些额外的平方,但是我还没有弄清楚它们在扩展菱形中的位置。
注意:m==n
,,时m-n-1 = -1
,表示此最后一项在计数中增加平方。我的常规公式中可能缺少一些内容。完全公开,这仅是对该公式的早期草稿的补丁,而该草稿恰好起作用。显然,我仍然需要深入了解发生了什么,这可能是我的公式中存在一些错误。我会及时向大家发布。
罗素(Russell),加里(Gary)和韦斯斯坦(Weisstein),埃里克·W(Eric W.)。来自MathWorld-Wolfram Web资源。http://mathworld.wolfram.com/AztecDiamond.html