如果这个问题更适合mathoverflow或其他一些姊妹网站,请原谅我。
我有兴趣计算(不一定是二分)平面图中完美匹配的加权和。这是一个标准问题;它经常使用FKT algorithm解决。我想找一些Python代码来解决这个问题(而且我不想自己编写它,因为算法有点复杂)。
如果失败了,是否有其他(相对主流)语言可用的代码?
下面的用户sabbahillel建议我列出一些我发现不起作用的软件,以避免重复工作。为此:
答案 0 :(得分:0)
FKT Alpha Count perfect matchings in planar graphs.
描述:该项目提供了FKT的实现 用于计算平面图中完美匹配数的算法。 源代码是用Forth语言编写的,需要Gforth 跑。可以通过命令行工具进行计算 通过可与Gforth一起使用的库。
答案 1 :(得分:-1)
我是sourceforge上FKT项目的作者。 FKT 确实支持加权图。 FKT安装一个命令行程序,该程序将图形的ASCII描述作为输入,并在stdout上输出计算的匹配数。该接口允许与其他编程语言(如Python)轻松集成。当然,您需要在系统上安装Gforth,但这应该不是问题,所有主流Linux发行版都在其存储库中都有Gforth软件包。
FKT在有限域上以整数运算进行所有计算(以所选整数N为模)。整数N的宽度限制为31或63位,具体取决于您的操作系统。如果需要更长的结果,您可以使用不同的(共)素数N_1..N_k多次调用FKT,然后使用Chinese Remainder Theorem确定图形模数N_1 * ... *的实际加权匹配数N_k。
请注意,FKT算法不确定匹配总和的实际符号。它只保证所有匹配都用相同的符号相加。因此FKT输出-m或m(mod N),并且在应用中国剩余定理之后,输出为-m或m(mod N_1 * ... * N_k)。通常你对图表有足够的了解,知道要用什么标志。