行列式的一些妙用
我们知道 ,这是行列式的定义。
我们定义 积和式为 。
积和式的计算是 NP 的。但是有的时候我们可以用行列式来完成一些积和式可以完成的东西。
比如最简单的,给定一个两边分别有 个点的二分图,问是否存在完美匹配。算邻接矩阵 积和式的值就可以得到完美匹配的数量。但是由于是判定性问题,我们可以考虑用行列式做,做法如下:
将每条边附一条 范围内的随机边权, 是带权邻接矩阵。那么我们只需要判断行列式的值是否为 就可以了。考虑感受这个做法的正确性:首先如果不存在完美匹配,算出来的行列式肯定是 。这个做法本质上来说相当于是对每个完美匹配赋予了一个随机权值,算出来的值就是所有完美匹配的权值和。故由于随机化,大部分情况的判断是正确的。概率证明可以看 Schwartz–Zippel 引理。
但是你会说这个东西我直接匈牙利就算完了呀。确实,不过因为匈牙利在这一方面并不是万能的。考虑下面一个问题:
还是上述二分图,但是边有 的边权。对于所有 求是否有完美匹配使得其边权按位与和是 。
用容斥的方法肯定就是算边权按位与和为 的超集的方案数,再减去超集的答案数。这下匈牙利就无能为力了。而由于行列式方法相当于是对每个完美匹配赋予一个权值,所以这道题还是能够把行列式的值当作前面提到的方案数来计算。在时间复杂度 内解决了这个问题。
本文作者:TulipeNoire
本文链接:https://www.cnblogs.com/TulipeNoire/p/18650850/Determinant
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步