问题描述
- 如下图,给定偶数个点,两两之间连线,规则为:
- 每个点仅能与另外一个点连接,如图:不准有1与3类似的连接
- 不能有剩余的点未与其他点连接。要求输入偶数个点,输出有多少中连接方式?
问题分解
- 当有两个点时:只有1-2连接的情况
- 当有四个点时:会有1-2、3-4与1-4、2-3连接的情况,不能出现1-3这种交叉连接的情况
- 当有六个点时:
- 首先固定点1,按照规则,能与1连接的点分别为:2、4、6,从以上三步总结下来,能与1点连接的点都是编号为偶数的节点
- 假设1、2连接,那剩下的就是3、4、5、6节点,即固定1和2两个点,把6个点分隔成两个点(1, 2)和另外四个点(3, 4, 5, 6)的子问题
- 假设1、4连接,那剩下的就是(2, 3)、(5, 6)节点连接的问题
- 问题分解到这里,我们便能想到:这是一个把复杂问题分解成子问题的需求,应用动态规划即可,动态规划的关键点在于找到子问题的解如何组合才能得到最终的结果
- 有了上述的思路,那接下来的分析便是要找到分解复杂问题的公式,分解到6个点的时候,可以得出一个公式:f(6) = 2*f(4)*f(2) + f(2)*f(2) ,即:步骤3的分析
- 从F部推到出的公式显然还不能得到解决,因为还不能用其解决8个、10个点的问题,那继续分析8个点的场景: