【生成树计数】Matrix-tree定理学习笔记
2015-06-06 16:27
375 查看
学完了矩阵和行列式基础知识,终于可以去学矩阵数定理~(≧▽≦)/~
———————————–线割分是我>w<———————————————–
Matrix-tree定理,又叫Kirchhoff矩阵定理,于1847年首次被基尔霍夫先生证明,后来被广泛应用于生成树的计数问题.
要用它,需要先知道几个重要概念:
无向图的度数矩阵和邻接矩阵.
假定有无向图G,图中共有n个点.
G的度数矩阵称D[G],邻接矩阵称A[G].这两个矩阵的大小都是n*n的.
对于D[G],他满足:
di,j={0, i≠jvi的度数, i=jd_{i,j}=\begin{cases}
0,\ \ \ \ \ \ \ \ \ \ \ \ i\neq j\\
v_i的度数,\ \ \ i=j
\end{cases}
而邻接矩阵就是平时用的那种i,j有边为1无边为0的那个.
然后我们定义图G的基尔霍夫矩阵C[G]=D[G]-A[G].
基尔霍夫矩阵的性质:
①对于任意一个图,他的基尔霍夫矩阵C的行列式的值为0.
因为显然基尔霍夫矩阵的每一行或者列上元素的和都是0啊= =
②如果图G不连通,其基尔霍夫矩阵的任意主子式行列式值为0.
补充:关于主子式:在一个n阶的行列式中,选取几行,再选取列号与被选行号相同的几列,这两个被选取部分相交的元素组成的新的行列式,就是原n阶行列式的i阶主子式(这个i阶主子式是一个i*i的行列式).
如:
A=⎡⎣⎢⎢⎢1231311530227543⎤⎦⎥⎥⎥A=\begin{bmatrix}
1&3&3&7\\
2&1&0&5\\
3&1&2&4\\
1&5&2&3\\
\end{bmatrix}从A中找一个2阶主子式.选择的数分别是1,3那么对应的主子式就是:
A′=[1332]A'=\begin{bmatrix}
1&3\\
3&2\\
\end{bmatrix}
既然前提是G不连通,那么我们假设G中有k个连通分量(称为G1,⋯,GkG_1,\cdots,G_k).一开始这个矩阵是散乱的:
C=⎡⎣⎢⎢⎢⎢⎢Gi10⋮00Gi2⋮0⋯⋯⋱⋯00⋮Gik⎤⎦⎥⎥⎥⎥⎥C=\begin{bmatrix}
G_{i_1}&0&\cdots&0\\
0&G_{i_2}&\cdots&0\\
\vdots&\vdots&\ddots&\vdots\\
0&0&\cdots&G_{i_k}
\end{bmatrix}
我们通过交换矩阵的行和列使得矩阵中每个G按下标顺序排列.这个过程交换次数是偶数次(行交换了x次,列必定也要交换x次),所以行列式的值不变(由之前行列式的性质).如:
C[G]=⎛⎝⎜⎜⎜⎜⎜G10⋮00G2⋮0⋯⋯⋱⋯00⋮Gk⎞⎠⎟⎟⎟⎟⎟C[G]=\begin{pmatrix}
G_1&0&\cdots&0\\
0&G_2&\cdots&0\\
\vdots&\vdots&\ddots&\vdots\\
0&0&\cdots&G_k
\end{pmatrix}
由于任意两个不同联通分量之间不相连,所以除了主对角线上的元素,其他元素都是0.
定义Cr[G]C_r[G]为将C[G]去掉第r行第r列剩下的那个n-1阶矩阵.
令r为第i个联通分量里的第j个顶点.这时候Cr[G]C_r[G]只是一个主子式,因此还暂时不能用性质①得到结论.
那么
Cr[G]C_r[G]不是完整矩阵,其他的C[Gi]C[G_i]是啊= =所以上面那个式子的正确性就不言而喻,性质②得证(≧▽≦)/~
③若图G是一棵树,则C[G]的任意一个n-1阶主子式的行列式的值为1.
这条性质和Matrix-tree定理本体息息相关…所以在这里写下Matrix-tree定理的内容:
G 的所有不同的生成树的个数等于其基尔霍夫矩阵C[G]任何一个 n-1 阶主子式的行列式的绝对值。
证明过程好长好长…我还没全弄明白,没法复述下来了…
贴一下论文里的图吧QAQ
到这里定理证明完毕(虽然并不是我证的> A <)
所以Matrix-tree定理也算是学完了吧…(至少知道怎么用了…第三个性质的证明以后多看几遍早晚会看懂的!0w0)
———————————–线割分是我>w<———————————————–
Matrix-tree定理,又叫Kirchhoff矩阵定理,于1847年首次被基尔霍夫先生证明,后来被广泛应用于生成树的计数问题.
要用它,需要先知道几个重要概念:
无向图的度数矩阵和邻接矩阵.
假定有无向图G,图中共有n个点.
G的度数矩阵称D[G],邻接矩阵称A[G].这两个矩阵的大小都是n*n的.
对于D[G],他满足:
di,j={0, i≠jvi的度数, i=jd_{i,j}=\begin{cases}
0,\ \ \ \ \ \ \ \ \ \ \ \ i\neq j\\
v_i的度数,\ \ \ i=j
\end{cases}
而邻接矩阵就是平时用的那种i,j有边为1无边为0的那个.
然后我们定义图G的基尔霍夫矩阵C[G]=D[G]-A[G].
基尔霍夫矩阵的性质:
①对于任意一个图,他的基尔霍夫矩阵C的行列式的值为0.
因为显然基尔霍夫矩阵的每一行或者列上元素的和都是0啊= =
②如果图G不连通,其基尔霍夫矩阵的任意主子式行列式值为0.
补充:关于主子式:在一个n阶的行列式中,选取几行,再选取列号与被选行号相同的几列,这两个被选取部分相交的元素组成的新的行列式,就是原n阶行列式的i阶主子式(这个i阶主子式是一个i*i的行列式).
如:
A=⎡⎣⎢⎢⎢1231311530227543⎤⎦⎥⎥⎥A=\begin{bmatrix}
1&3&3&7\\
2&1&0&5\\
3&1&2&4\\
1&5&2&3\\
\end{bmatrix}从A中找一个2阶主子式.选择的数分别是1,3那么对应的主子式就是:
A′=[1332]A'=\begin{bmatrix}
1&3\\
3&2\\
\end{bmatrix}
既然前提是G不连通,那么我们假设G中有k个连通分量(称为G1,⋯,GkG_1,\cdots,G_k).一开始这个矩阵是散乱的:
C=⎡⎣⎢⎢⎢⎢⎢Gi10⋮00Gi2⋮0⋯⋯⋱⋯00⋮Gik⎤⎦⎥⎥⎥⎥⎥C=\begin{bmatrix}
G_{i_1}&0&\cdots&0\\
0&G_{i_2}&\cdots&0\\
\vdots&\vdots&\ddots&\vdots\\
0&0&\cdots&G_{i_k}
\end{bmatrix}
我们通过交换矩阵的行和列使得矩阵中每个G按下标顺序排列.这个过程交换次数是偶数次(行交换了x次,列必定也要交换x次),所以行列式的值不变(由之前行列式的性质).如:
C[G]=⎛⎝⎜⎜⎜⎜⎜G10⋮00G2⋮0⋯⋯⋱⋯00⋮Gk⎞⎠⎟⎟⎟⎟⎟C[G]=\begin{pmatrix}
G_1&0&\cdots&0\\
0&G_2&\cdots&0\\
\vdots&\vdots&\ddots&\vdots\\
0&0&\cdots&G_k
\end{pmatrix}
由于任意两个不同联通分量之间不相连,所以除了主对角线上的元素,其他元素都是0.
定义Cr[G]C_r[G]为将C[G]去掉第r行第r列剩下的那个n-1阶矩阵.
令r为第i个联通分量里的第j个顶点.这时候Cr[G]C_r[G]只是一个主子式,因此还暂时不能用性质①得到结论.
那么
Cr[G]C_r[G]不是完整矩阵,其他的C[Gi]C[G_i]是啊= =所以上面那个式子的正确性就不言而喻,性质②得证(≧▽≦)/~
③若图G是一棵树,则C[G]的任意一个n-1阶主子式的行列式的值为1.
这条性质和Matrix-tree定理本体息息相关…所以在这里写下Matrix-tree定理的内容:
G 的所有不同的生成树的个数等于其基尔霍夫矩阵C[G]任何一个 n-1 阶主子式的行列式的绝对值。
证明过程好长好长…我还没全弄明白,没法复述下来了…
贴一下论文里的图吧QAQ
到这里定理证明完毕(虽然并不是我证的> A <)
所以Matrix-tree定理也算是学完了吧…(至少知道怎么用了…第三个性质的证明以后多看几遍早晚会看懂的!0w0)
相关文章推荐
- File not Found:DockForm.dcu的解决办法
- 算法编程(JAVA)--八皇后问题
- LOADRUNNER性能测试中的验证码问题
- workflow_phpcms
- workflow_phpcms
- RTP 和 RTSP的区别
- 【矩阵乘】【DP】【codevs 1305】Freda的道路
- leetcode ---双指针+滑动窗口
- 【建模+强连通分量】POJ1904 King's Quest
- Computed Styles
- cocos2d-x-3.6 开篇说明
- C实现 LeetCode->Longest Substring Without Repeating Characters
- C++中动态申请二维数组并释放方法
- java学习【课后笔记】
- hive udaf 用maven打包执行create temporary function 时报错
- Android 广播的生命周期
- LAMP+LVS+KEEPALIVED(四)
- 上车
- 算法导论实验七_回溯法求最佳调度(简易实现)
- 算法导论实验六_哈夫曼编码