1737

来源:互联网 发布:2017网络流行语盘点 编辑:程序博客网 时间:2024/05/05 10:24

      楼教主推荐的“男人八题”的第一题,要用到组合数学+大数运算。

 

      大意就是给你n个点,可以组成多少个连通图。解题思路是这样:设n个点的集合V可以组成G(n)个连通图,V分割成分别有m个点和n-m个点的两个子集V1、V2,如果两个子集内部都组成了连通图,那么V1、V2之间只要有若干个点连在一起就是一个大的连通图。为了避免重复,V1、V2各选定一点分别为p1、p2,V1至少一点连向p2,总共有2^m-1种情况。由于p1、p2都是选定的,所以V1、V2的分割的情况有C(m-1,n-2)种。所以这样最后的公式就是G(n)=sum(G(m)*G(m-n)*C(m-1,n-2)*(2^m-1)),1<=m<=n-1。

 

      排列组合的题目找出一个不重复的方案有时真的不容易。如果V1、V2之间任意两点都可以连,就会有重复。因为假设V分成3个子集V1'、V2'、V3',第一次V1'、V2'分在V1并组成连通图,V3'在V2,然后V1、V2之间任一点互联;第二次V1'、V3'分在V1,V2'在V2,然后。。。。就重复了。所以最彻底的做法,指定两个点p1、p2分别放在V1、V2,其他点选择“依附”于其中之一。然后V1所有点选择与p2连或不连(不过至少连一个)。不同子集的点只能通过p2相连,或者被分在同一子集时就可以直接连了。这避免了重复。

 

       因为里面的数字都是天文数字,所以要用到大数运算,基本上等于把1002重做一遍。不过任意位整数的加减乘除做成一个库也蛮好。

 

 

原创粉丝点击