标签:
一个 $n$ 阶的 Aztec Diamond 图,是指依次将 $2,4,\ldots,2n,2n,\ldots,4,2$ 个单位方格摞在一起得到的对称图形(于是图中一共有 $2n(n+1)$ 个单位方格)。下图是 $n=5$ 时候的例子:
对一个 $n$ 阶的 Aztec Diamond 图,用 $1\times 2$ 的多米诺骨牌铺砌它,总共有 $2^{n(n+1)}$ 种不同的方法。(这里不考虑对称性,比如全部用水平的骨牌铺砌和全部用竖直的骨牌铺砌,两种方法是不同的)
一个有趣的问题是,对给定的 $n$ 阶 Aztec Diamond,怎样从它的所有 $2^{n(n+1)}$ 种铺砌中等概率地任选一种?当 $n$ 很大时,这个事情并不好做。
下面这个图显示了 $n=80$ 时 Aztec Diamond 图的一个随机铺砌,它使用的是 Propp 论文中的 Domino Shuffling 算法:
你可以看到图中出现了一个近似圆形的区域,在区域的内部,骨牌的排列是变化的,而区域外部则是 "冻结" 的,这就是所谓的 "北极圈" 现象。
这个图是我用 Python + Matplotlib 绘制的,代码在这里下载:domino.py。你可以把程序最后的参数 80 改成其它的整数(最好不要超过 200)。Matplotlib 库绘图的效率并不高,$n$ 很大时比较吃力,用 Cairo 库效率要高很多,但是 Cairo 的代码不如 Matplotlib 简洁。
一点注意事项:
关于这个算法的更多故事,我会在后面的文章中介绍。
Python + Matplotlib 绘制 Aztec Diamond 图的随机铺砌
标签:
原文地址:http://www.cnblogs.com/xida/p/4563411.html