(Python)代码计算加权完美匹配?

时间:2014-03-13 13:33:02

标签: python math graph-theory

如果这个问题更适合mathoverflow或其他一些姊妹网站,请原谅我。

我有兴趣计算(不一定是二分)平面图中完美匹配的加权和。这是一个标准问题;它经常使用FKT algorithm解决。我想找一些Python代码来解决这个问题(而且我不想自己编写它,因为算法有点复杂)。

如果失败了,是否有其他(相对主流)语言可用的代码?

下面的用户sabbahillel建议我列出一些我发现不起作用的软件,以避免重复工作。为此:

  • fkt似乎只适用于未加权图表,并且位于Gforth。
  • Knuth(!)的
  • OBDD仅用于未加权的二分图,并且在CWEB中。
  • vaxmaple需要Maple,vaxmacs是Emacs模式(?!?!);既不支持加权图也不支持非二分图。

2 个答案:

答案 0 :(得分:0)

谷歌是你的朋友。我找到了一个在FORTH

中实现此功能的sourceforge项目

FKT Alpha Count perfect matchings in planar graphs.

  

描述:该项目提供了FKT的实现   用于计算平面图中完美匹配数的算法。   源代码是用Forth语言编写的,需要Gforth   跑。可以通过命令行工具进行计算   通过可与Gforth一起使用的库。

Source Code

答案 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)。通常你对图表有足够的了解,知道要用什么标志。