几年前在知乎上有这么 一个问题:
问题: 有哪些 \(\mathbb{Z}[x]\) 中的多项式,它们在有理数域 \(\mathbb{Q}\) 上是不可约的,而对任意素数 \(p\),模 \(p\) 以后在 \(\mathbb{Z}_p[x]\) 上都是可约的?
当时我给了回答,后来账号注销了,答案也一并删除了。现在把我的原答案贴在这里:
今天我要介绍一个 Markov 链采样中的精彩算法,叫做 coupling from the past (CFTP)。这个算法看似简单,实则充满玄机。我相信你可以在五分钟内理解算法的步骤,然后再花五分钟左右看懂算法的证明,但是我打赌你需要几个星期甚至更久的时间来细细回味其中奥妙。
作为启发,我们从一个计数问题开始:
问题: 下图是一个边长分别为 \(a,b,c\) 的平行六边形,其中 \(a,b,c\) 都是正整数,内角均为 120 度:
请问:用边长为 1 的菱形密铺它,有多少种不同的方法?
问题: 给定一个有限、无向的连通图 \(G= ( V,E )\),设 \(\mathcal{T}\) 是 \(G\) 的所有生成树组成的集合,怎样在 \(\mathcal{T}\) 中按照均匀分布进行采样?即设计一个算法,能够随机地给出 \(G\) 的一个生成树,并且 \(\mathcal{T}\) 中每个生成树被取到的概率是相等的。
常见的生成树算法如 DFS/BFS 算法、Prim 算法、Kruskal 算法等给出的生成树都不是完全随机的。例如,取 \(G\) 为 \(\mathbb{Z}^2\) 中 \(m\times n\) 的网格图,\(G\) 的任何生成树都是一个迷宫,把背景平面涂黑,把生成树的边涂白,就可以清楚地看到迷宫的结构。迷宫的任何两个房间 ( 即顶点 ) 可以通过生成树中唯一的路径相连,这样的迷宫叫做完美迷宫。
DFS 算法 ( 每次将新顶点的顺序打乱再入栈 ) 倾向于尽可能深地探索整个图,因此得到的迷宫往往包含长且蜿蜒的路径,死角 ( 即叶节点 ) 是很少的:
如果你对 Lie 代数有所了解的话,相信很大概率你会见过下面的图案: ( 参考维基百科的 Lie algebra 词条 )
它展示的是 Lie 代数 \(E_8\) 的根系图。\(E_8\) 的根系由 8 维欧式空间 \(\mathbb{R}^8\) 中的 240 个向量组成,将这 240 个向量投影到一个特殊的 2 维平面 ( 叫做 Coxeter 平面 ) 上就会呈现出一个具有旋转对称的图案。在上图中可以看到,240 个投影点分布在 8 个圆周上,每个圆周包含 30 个均匀分布的点,整个图案在角度为 \(\frac{2\pi}{30}\) 的旋转下是不变的。\(h=30\) 正是 \(E_8\) 的 Coxeter 数。
本文目的是介绍 Coxeter 元的一些基础知识,然后教大家怎样在 Python 中编写一个程序绘制上面的投影图案。我主要参考了 (Humphreys 1990) 和 (Casselman 2017)。虽然这里面涉及的数学并不复杂,但是真正动手编程实现的时候会有一些魔鬼藏在细节中,而这些细节是仅凭念书很难发现的。
本文的代码在 Github 上 。David Madore 也有一个很棒的 交互式网页 可以绘制 \(E_8\) 的多种不同风格的图案。
我念研究生时的高等概率论课用的是 Durrett 的教材 “Probability: Theory and Examples”。这本书的好处我就不再介绍了,院长陈大岳老师在世图影印版的前言中已经夸了一遍。我个人的体会是,Durrett 的书在讲解证明的时候非常简练,很少写为什么要这样证,我有时候读了半天也没搞明白思路。Birkhoff 遍历定理算是其中一个,于是我重新整理了一下书中的证明,作此文留念。
Birkhoff 遍历定理最初由 Birkhoff 本人在 1931 年发表,原文长达 50 页。随后在 1939 年 K.Yosida (吉田耕作) 和 S.Kakutani (角谷) 利用极大遍历定理给出了一个 10 页的简洁证明,不过他们关于极大遍历定理的证明还是啰嗦了点,后来 Garsia 给出了极大遍历定理的一个仅有寥寥数行的惊人证明,这也是当前大多数教材采用的途径,本文就来介绍这一证明。
当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器