Matlab实现生成树计数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab 实现生成树计数
摘要
在信息学竞赛中,有关生成树的最优化问题如最小生成树等是我们经常遇到的,而对生成树的计数及其相关问题则少有涉及。事实上,生成树的计数是十分有意义的,在许多方面都有着广泛的应用。本文首先介绍了行列式的基本概念、性质,并在此基础上引入Matrix Tree -定理。
关键字:生成树的计数、Matrix Tree -定理
Matrix Tree -定理(Kirchhoff 矩阵-树定理)。Matrix Tree -定理是解决生成树计数问题最有力的武器之一。它首先于1847年被Kirchhoff 证明。在介绍定理之前,我们首先明确几个概念:
1、G 的度数矩阵[]D G 是一个n 阶矩阵,并且满足:0;()
.ij G i i j d d v i j =⎧=⎨≠⎩ ,()G i d v 为
顶点i v 的度数(度数即与顶点i v 关联的边的个数)。 2、G 的邻接矩阵[]A G 也是一个n 阶矩阵, 并且满足:01
i j ij i j v v a v v ⎧=⎨⎩;;
没直接连接直接连接 我们定义G 的Kirchhoff 矩阵(也称为拉普拉斯算子)[]C G 为[][][]C G D G A G =-,则Matrix Tree -定理可以描述为:G 的所有不同的生成树的个数等于其Kirchhoff 矩阵[]C G 任何一个1n -阶主子式的行列式的绝对值。所谓1n -阶主子式,就是对于()1r r n ≤≤,将[]C G 的第r 行、第r 列同时去掉后得到的新矩阵,用[]Cr G 表示。
Matlab 程序:
function n=STREEC( D,A )
C=D-A;
,
n=size(C);
C(:,n)=[]; %删除矩阵C 的第n 列
C(n,:)=[]; %删除矩阵C 的第n 行,形成了Cr ,为了节约空间,这里没有定义新的变量Cr,用C 代替Cr
n=abs(det(C)); %这里C 表示Cr.
end