整数划分定义与解析(递归)

原创 2015年07月09日 10:34:58

1.背景:整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。
2.定义:所谓整数划分,是指把一个正整数n写成如下形式:
n=m1+m2+…+mi; (其中mi为正整数,并且1 <= mi <= n),则{m1,m2,…,mi}为n的一个划分。
如果{m1,m2,…,mi}中的最大值不超过m,即max(m1,m2,…,mi)<=m,则称它属于n的一个m划分。这里我们记n的m划分的个数为F(n,m);
例如当n=4时,他有5个划分,{4},{3,1},{2,2},{2,1,1},{1,1,1,1};
注意4=1+3 和 4=3+1被认为是同一个划分。
该问题是求出n的所有划分个数,即f(n, n)。下面我们考虑求f(n,m)的方法;
3.递归法:
根据n和m的关系,考虑以下几种情况:
(1)当n=1时,不论m的值为多少(m>0),只有一种划分即{1};
(2)当m=1时,不论n的值为多少,只有一种划分即n个1,{1,1,1,…,1};
(3) 当n=m时,根据划分中是否包含n,可以分为两种情况:
(a). 划分中包含n的情况,只有一个即{n};
(b). 划分中不包含n的情况,这时划分中最大的数字也一定比n小,即n的所有(n-1)划分。
因此 F(n,n) =1 + F(n,n-1);
(4) 当n

—————上半部分转载自http://blog.csdn.net/niushuai666/article/details/6600977

4.解析:
当n=6的时候
{6}
{5,1}
{4,2}{4,1,1}
{3,3}{3,2,1}{3,1,1,1}
{2,2,2}{2,2,1,1}{2,1,1,1,1}
{1,1,1,1,1,1}
总共11种划分方法;
程序第一步调用F(6,6):这个时候将整数的划分数目为1(即{6})+F(6,5);//第一步作用将{6}集合与6的5划分分开
程序第二步调用F(6,5):这个时候此部分的划分数目为F(1,5)(即{5,1})+F(6,4);//第二步作用将{5,1}集合与6的4划分分开
程序第三步调用F(6,4):这个时候此部分的划分数目为F(2,2)(即{4,2}{4,1,1})+F(6,3);//第三步将{4,2}{4,1,1}集合与6的3划分分开

程序第六步调用F(6,1):满足条件if(n==1||m==1)直接return 1;
///////////////////////////////////////////////////////
//
//注:由此看出F(n-m, m)与F(n,m-1)两个函数的作用
// F(n,m-1)的作用是逐步递归,使其逐步接近终点
// F(n-m, m)的作用是对6的5划分中的第5行、6的4划分中的第4行
// 等进行排序
// 例:6的4划分的第4行是{4,2}{4,1,1},即F(2,2)是
// {2}{1,1}
// 于是便通过一个递归函数从复杂至简单,一个每行排序的函数,
// 从6->5->4->3->2->1一直排序得出最终的结论,11种
//
///////////////////////////////////////////////////////

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

NYOJ 279 队花的烦恼二和NYOJ 176 整数划分(二)【dp问题或递归】

原题链接:点击。。279         点击。。    176      这两个题 意思基本一样的,就是测试数据的范围不一样。。176数据比较水的,一般不会超时的,但279 你用递归可能就会超时了...

递归之整数划分问题和排列问题

整数划分问题:将正整数n表示成一系列正整数之和;将最大加数n1不大于m的划分个数记作q(n,m)  递归式如下:q(n,m) = 1     n=1,m=1  = q(n,n) n  = 1...

nyoj 571 整数划分(三)(递归)

整数划分(三)描述 整数划分是一个经典的问题。请写一个程序,完成以下要求。输入 每组输入是两个整数n和k。(1 <= n <= 50, 1 <= k <= n) 输出 对于输入的 n,k; ...

算法(1)整数划分问题之递归解决

今日,阅读《ACM/ICPC 算法训练》时,发现一道名为“整数划分”的题,书上解释极为模糊,自己研究了一下此题,将其解决,记录下解题思路,以备以后有用时快速理解;   一,题意简述   将整数表示...

整数划分问题(递归)

整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数n写成如下形式:     n=m1+m2+...+mi; (其中mi为正整数,...

整数划分问题(递归&递推)

1:问题描述: 整数划分问题是将正整数n表示成一系列正整数之和:n=n1+n2+n3+...+nk,其中n1>=n2>=n3>=...nk>=1,这种表示方法称为整数划分。求正整数n的不同划分个数。 ...

0002算法笔记——【递归】排列问题,整数划分问题,Hanoi问题

递归的概念想必大家都清楚,概念神马的直接略过。这里介绍递归相关的几个问题。     1、排列问题     设R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}。集合x中元素...

poj 3181 Dollar Dayz (整数划分问题---递归+DP)

题目:http://poj.org/problem?id=3181 思路:将整数N划分为一系列正整数之和,最大不超过K。称为整数N的K划分。 递归:直接看代码: 动态规划:dp[i][j]:=将...

11088 整数划分的扩展问题(递归,分治)

11088 整数划分的扩展问题 时间限制:1000MS  内存限制:65535K 提交次数:0 通过次数:0 题型: 编程题   语言: C++;C;VC;JAVA ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)