整数划分问题算法 能看得懂的 详解

整数划分问题是递归的一个典型问题


题目设定大家应该清楚,我就不重复了


各种书,各种教程都是用6的划分来举例子


这里我就把我的理解还有需要注意的地方说明白

帮助你更清楚的弄清楚这个算法


需要注意的地方:

这个问题主要分为四种情况来解释,首先有个前提条件

正整数n的所有不同划分中,将最大加数x不大于m的情况记为q(n,m),这个称作n的m划分


然后就是算法的四种情况,前三种比较好理解,这里简单说一下


1)n=m=1时

这种情况显而易见,q(n,m)=1

2)n

在n

由于题设要求n拆分为的整数大于0,所以显而易见,q(3,6)=q(3,3),即nq(n,m)=q(n,n)

3)n=m时

n=m的时候,可以分为两种情况,一种情况是有一个加数等于n,另外一种情况是加数都小于n。

对于第一种情况,可以知道,只有一种情况,举个例子,也就是可以把3拆分成3=3。

对于第二种情况,也就可以把m减去1,代表剩下的情况

所以对于n=m 的时候,q(n,m)=1+q(n,m-1),即q(n,m)=1+q(n,n-1)

4)n>m>1的时候,也就是最普通的情况,这种情况比较难于理解

这个也分为两种情况

第一种情况是加数中包含m的时候,如果加数中包含m,则对于n来说,就是拆分剩下的n-m这些大小的数字,所以此时情况就是q(n-m,m)

第二种情况就是加数中不包含m的时候,不包含m的时候,则同3)中的第二种情况,使m-1,这时候就不会有m这个加数在了,所以这时候就是q(n,m-1)

所以n>m>1的时候得到公式:q(n,m)=q(n,m-1)+q(n-m,m)




你可能感兴趣的:(算法)