整数划分问题

题目:

将正整数n表示成一系列正整数之和:n=n1+n2+…+nk ,其中 ,k≥1。正整数n的这种表示称为正整数n的划分。请设计一个算法,求正整数n的不同划分个数或方案。例如正整数6有以下11种不同的划分个数或方案:
{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}。

ps:这是课程实验报告中的一道题目,小编在做完报告解完题目之后将之梳理总结于此。若小伙伴未看完题目作出自己的一番思考,建议认真理解题目思索一番再观看本文噢~ *

**

正文开始(思路分析)

整数划分问题,将正整数n表示成一系列正整数之和,我们不妨将划分而成的一系列正整数称为分整数,而在这些分整数中,存在着一个最大分整数。依据题目的定义 , 以及给出的具体例子,可以知道一个正整数n可能存在着多种划分情况,而划分情况的最大分整数,可能是不一样的,并且可知的是最大分整数的上界是n,下界是1

因此我们可以假设一个函数f(n,m),n为待划分的正整数,且最大分整数不超过m,函数总体表示在正整数n的最大分整数不超过m的划分情况下,一共有多少种划分的方案。
因此,求题目的解就可以转化为求f(n,n)的值
算法核心部分在于讨论n和m的关系。

☆· 当n>m>1时
若正整数n的分整数中包含m,即划分的时候其中一个分整数取了m,那么现在正整数n的值就变为了n-m,而我们还需要求f(n-m,m)的划分个数,即在取了m的条件下,有多少种划分方案。因此本情况的划分总数为f(n-m,m)的值;
若正整数n的分整数中不包含m,即最大分整数不为m,那么最大分整数就尝试取m-1,故我们要看看f(n,m-1)的划分个数。因此本情况的划分总数为f(n,m-1)的值。
综合:f(n,m)= f(n-m,m)+ f(n,m-1)

☆· 当n=m时
若正整数n的分整数中包含m,那么划分情况就只有一种,即n=m;
若正整数n的分整数中不包含m,即最大分整数不为m,那么最大分整数就尝试取m-1,故我们要看看f(n,m-1)的划分个数。因此本情况的划分总数为f(n,m-1)的值。
综合:f(n,m)=1+f(n,m-1)

☆· 当n<m时
由题目设定我们可知m的上界是n,不能够大于n,因此本情况转化为求f(n,n)的值。

☆边界:当n=1或者m=1时,均有一种划分情况,即分整数为1或者为n个1。

由此我们可以写出f(n,m)的递归式:

依据此递归式以及上文的思路分析,在深入认识了题目、了解其解决方法后,我们可以进行编程,代码实现思想。

**

代码实现(JAVA)

public int Divide (int n,int m) {if(n<1 || m<1)     //边界,当n或者m小于1时,不满足题目正整数的要求,故划分情况为0return 0;if(n==1 || m==1)   //边界,当n为1时只有一种划分情况即{1};当m为1时只有一种划分情况即{1,1,…,1},有n个1return 1;if(n==m)         //当n等于m时候,考虑划分的时候取不取m,将这两个途径的情况相加return 1+Divide (n,n-1);if(n<m)           //当n小于m时,m突破上界,其最大只能为m,因此将m拉低回与n相等,求其划分情况return Divide (n,n);return Divide (n-m,m)+ Divide (n,m-1);   //这种情况是当n>m>1的时候,考虑划分的时候取不取m,将这两个途径的情况相加}

/ / Divide()方法即为思路分析中的 f () 方法

实验结果

**

写在后面

本文可以说是【递归】算法的一次实践性运用,在解答题目、编写算法时,巩固了递归算法的掌握度。
如果对【递归算法】仍有存疑的地方,可以参照观看上一篇博文的关于递归算法的浅显讲解《谈谈递归》

跟我一起回顾递归吧~~(点击链接即可)


本文旨在解决整数划分问题一共能有多少种不同的划分方案,即求得划分方案总数量,但未设计算法实现将每一种划分方案以可见的结果显示出来,姑且将其留在下一篇博文中介绍讲解。
学习讲究一个循序渐进的过程,唯有将基础的思想内化吸收,深究拓展探索才有意义。希望大家能够理解完全本文的思想内涵,有所收获。❀

整数划分问题 java相关推荐

  1. java整数划分递归_整数划分问题(递归法)

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

  2. 整数划分问题(分治算法经典)

    题目描述: 整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n. 即:n=n1+n2+-+nk; n1>=n2>=n3->=nk 如整数的6划分为 ...

  3. 整数划分java_整数划分问题及其算法

    整数划分问题及其算法 一.问题描述 整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n.如整数的6划分为: 6 5 + 1 4 + 2, 4 + 1 + 1 3 + ...

  4. LeetCode(13.罗马数字转整数) JAVA Hashmap

    LeetCode(13.罗马数字转整数) JAVA Hashmap 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D ...

  5. 递归--整数划分问题

    问题描述: 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk,其中n1≥n2≥-≥nk≥1,k≥1.正整数n的这种表示称为正整数n的划分. 问题1: 输出整数n的所有可能的划分,如: 输入: ...

  6. 整数划分问题(续)(非递归法)

    上一篇讨论的是整数划分问题递归方法,下面来讨论下非递归方法: 一般情况下,遇到递归问题,若能直接求得递推式,则可以很容易用数组模拟来实现递归,根据已经得出的递归关系,可以设置一个二维数组S[][]来存 ...

  7. 整数划分问题(递归法)

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

  8. 整数划分问题(路径输出)【递归求解方式】

    简述 具体的算法解释可以参照下面链接,非常详细~ 整数划分问题[递归以及递推求解方式] 代码 #include <iostream> using namespace std; #inclu ...

  9. 整数划分问题【递归以及递推求解方式】

    简述 用一系列正整数之和来表示一个整数,称之为整数划分.而整数划分问题则对于某个数字,输出对应整数划分的数量. 先写递归,有了递归之后,就换用递推来加快速度. 算法思路 q(n, m)表示,n这个整数 ...

最新文章

  1. 机器学习入门一定要避开的3个陷阱
  2. java.线程池 线程数_如何在线程“ main”中修复异常java.lang.NoClassDefFoundError:Java中的org / slf4j / LoggerFactory...
  3. Java中的Type接口和Class类有什么区别
  4. Android官方技术文档翻译——ApplicationId 与 PackageName
  5. Star Schema完全参考手册读书笔记四
  6. visio 科学图形包_【数据科学的python系列3】Python数据科学环境设置
  7. 如何制作SCI论文中的Figures(一)
  8. 数学与泛型编程:高效编程的奥秘pdf_Java 泛型与类型擦除
  9. 多商家点餐小程序源码
  10. 目前可以用的短信验证码平台有哪些?
  11. c语言编程开发app,C语言编程app
  12. 蓝桥web模拟赛:时间管理大师
  13. dajngo 初始化数据报错 django.db.utils.DataError: value too long for type character varying(32)
  14. 网站被劫持怎么办?别着急看完这篇文章您就知道如何应对了!
  15. BackTrack5 (BT5)无线password破解教程WPA/WPA2-PSK无线password皴
  16. 智能语音机器人语音识别系统
  17. 微信小程序开发笔记 支付篇③——微信支付JSAPI下单和微信小程序调起支付(V2版本)
  18. 【PyTorch】nn.Conv2d函数详解
  19. 李宗盛——给自己的歌,两个版本吉他谱
  20. [书籍精读]《响应式Web设计 HTML5和CSS3实战(第二版)》精读笔记分享

热门文章

  1. 瑞星微RK3288开发板 (ARM Cortex-A17架构)
  2. 用计算机计算圆的面积,周长直径换算器在线(圆的面积在线计算器)
  3. kotlin作用域函数let run whith apply also 的区别takeIf 的用法
  4. conda安装包时提示当前用户没有权限
  5. git 删除git管理_使用Git管理多媒体文件
  6. 为什么要进行软件验收测试?如何获得软件验收测试报告
  7. JavaScript模块机制
  8. win10如果虚拟化服务器,win10虚拟化服务器配置
  9. 2020年度广东学法普法平台开始了
  10. DDSM数据库——LJPEG转PNG格式