正整数的无序分拆
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正整数的无序分拆
这一篇主要来介绍有关无序分拆的计数问题。
比如,4 可以表示成如下形式:
4=4
4=3+1
4=2+2
4=2+1+1
4=1+1+1+1
因此,4 的无序分拆数就是5。那么,对于一个任意给定的正整数n,其无序分拆数是多少呢?
下面我将用三个算法来分别解决这个问题。
算法一:
仔细观察上面4 的分拆,可以发现,对于一个分拆,由于是无序的,因此对这个分拆起决定作用的就是这个分拆中的最大数。那么这个最大数与正整数n 的无序分拆数之间有什么关系呢?
设一个分拆中的最大数是m,那么对于n 的无序分拆,当最大数是m 时,分拆数就等于”n-m 的分拆数“。之所以要加一个引号,是因为并不是真正的n-m 的分拆数。因为对于n 来说,分拆的最大数是m,因此,n-m 的分拆中的最大数就不能超过m。
记F(n,m) 表示n 的分拆中最大数为m 的分拆个数,根据上面的分析,可以得到如下公式:
那么,n 的分拆总数F(n) 可以用如下公式计算:
初始条件:F(n,1)=F(n,n)=1。
算法二:
在算法一中,F(n,m) 表示n 的分拆中最大的数就是m,那么,我们能不能放宽一下限制呢?记F(n,m) 表示n 的分拆中最大的数不超过m。
(1) m=n:也就是n 的分拆中,最大数不超过n 的个数。当然,最大数为n 的分拆只有一个,也就是它自己。除了这一个之外,最大数就不可能为n 了,最多是n-1 而已。因此,求出n 的分拆中最大数是n-1 的分拆个数,再加上n=n 这一个分拆,就是F(n,n)。即F(n,n)=1+F(n,n-1)。
(2) n (3) n>m:在n 的分拆中,如果最大数最大可以为m,那么这不外乎分拆中有一个或若干个m,或者是根本就没有m。比如,在 4 的分拆中,说最大数最大可以到2,那么因为4=2+2=2+1+1=1+1+1+1,于是有m=2 的就是2+2 与2+1+1,完全没有 2 的则是1+1+1+1。如果n 的反拆中根本就没有m,那么它的个数不就与n 的分拆中最大数最大可以到m-1 的个数(即F(n,m-1) )相同吗?如果n 的分拆中至少有一个m,亦 即n=m+”......“,于是n-m=”......“,所以”......“的部分正好是n-m 的一个分拆,它的最大数最多可以到m。因为n-m 的分拆中最大数最多可以到m 的有F(n-m,m) 个,再加上F(n,m-1),这就是所有的情况。即F(n,m)=F(n,m-1)+F(n-m,m)。 这样,n 的分拆数仍可用算法一中的第二个公式进行计算。 初始条件:F(n,1)=F(1,m)=1。 算法三: 在前面的两个算法中都是把注意力放在一个分拆中的最大数上,那么能不能换一个角度,看看一个分拆中的最小数与分拆个数之间是什么关系呢? 记F(n,m) 表示将n 分拆成m 部分的分拆个数。考虑分拆中的最小数,如果它等于1,那么剩下的数就被分拆成m-1 部分,其个数为F(n-1,m-1);如果它不等于1,那么分拆成的m 部分中的每一个数一定都大于等于2,将这m 部分中的每个数都减去1,则得到一个新的分拆,即n-m 的分拆,也是被分成m 部分,其个数为F(n-m,m)。根据加法原理,有F(n,m)=F(n-1,m-1)+F(n-m,m)。 这样,n 的分拆数依然可以采用算法一中的第二个公式进行计算。 初始条件:F(n,1)=F(n,n)=1。