一. 问题描述
设给定n个变量x1,x2,-----xn.将这些变量依序作底和各层幂,可得n重幂如下:
,这里将上述n重幂看作是不确定的,当在其中加入适当的括号后,才能成为确定的n重幂。不同的加括号方式导致不同的n重幂。例如,当n=4时,全部4重幂有5个。试着设计一个动态规划算法,对n个变量计算出有多少个不同的n重幂。
二.问题分析及算法描述(包含主要变量和函数功能介绍)

方法一:一位数组
问题分析:该题目看似复杂,实则可以理解为给x1-xn添加括号,使其最终结果不同,求加括号的个数。
算法思想:由分析可知当n=1或者n=2时,其个数为1,由此为突破口。
构造数组m[n+1]用来存放结果,第0位不放。假设n>2且加括号方式在xk,xk+1之间断开,1<=k<n,则m[n]= m[k]*m[n-k]
从而m[n]可递归定义为:
m[n]= 1 n=1 or n=2
m[k]m[n-k] n>2
方法二:(二维数组)
将序列Xi,Xi+1, … xj的加括号问题简记为X[i:j],我们来看计算X[1:n]的不同加括号个数。
设计算xi:j],1<=i<=j<=n, 所得的不同加括号个数为m[i][j],原问题的最优值为m[1][n]。
当i=j时,m[i][j]=1;
当i+1=j时,m[i][j]=1;
当i+1<j时,若加括号方式在Xk,Xk+1之 间断开,i<=k<j,
则m[i][j]= m[i][k]
m[k+1][j]。
从而m[i][j]可递归地定义为

三. 源程序及程序说明文件

法一:

  public class multiplePower {public static int compute(int [] m,int n){//由分析可知: 当n=1/n=2时,输出的个数只有1个if(n==1||n==2) return 1;m[1]=1;m[2]=1;//从第三个开始 由分析推导可知m[n]+= m[k]*m[n-k] (k从1---(n-1))for (int i = 3; i <=n; i++) {for (int k = 1; k < i; k++) {//p[i]表示前i个数不同加括号方法的个数 i个数可以划分为前k个数和后i-k个数m[i]+=m[k]*m[i-k];}}return m[n];}public static void main(String[] args) {System.out.println("请输入您希望输入的n重幂");Scanner scanner=new Scanner(System.in);//n重幂int x=scanner.nextInt();int [] m=new int[x+1];System.out.println("所得的结果:");System.out.println(compute(m,x));}
}

法二:

public class multiplePower {public static int compute(int i,int j,int[][] m){if(i==j||i+1==j) return 1;if(m[i][j]>0) return m[i][j];for ( int k = i; k < j; k++) {m[i][j]+=compute(i,k,m)*compute(k+1,j,m);}return m[i][j];}public static void main(String[] args) {System.out.println("请输入您希望输入的n重幂");Scanner scanner=new Scanner(System.in);int x=scanner.nextInt();int [][] m=new int[x+1][x+1];System.out.println("所得的结果:");System.out.println(compute(1,x,m));}
}

四. 调试过程及分析
1> 假设在主函数中输入的n=1或者n=2,则直接返回1.
2> 当输入的值大于2,这里假设输入4.分析其运行过程,利用两个for循环,则可以更加快速的计算出需要的值,比如求n=4的值,拿k在中间断点,先求m[3]的值:m[3]=m[1]*m[2]+m[2]*m[1],已知m[1]=m[2]=1,则m[3]=2,
m[4]=m[1]*m[3]+m[2]*m[2]+m[3]*m[1],m[3]=2,即可算出m[4]=5.其他数字也是如此。
五. 窗口展示

六. 算法分析(T(n)和S(n))
法一:
T(n) =O(n^2) (使用了两个for循环)
S(n)=O(n) (使用的是一维数组)
法二:
S(n)=O(n^2) (使用的是二维数组)

求n重幂详细过程代码及思路(java)相关推荐

  1. Go语言_数据结构_栈(包括入栈和出栈,表达式的入栈出栈详细过程代码实现)

    入栈和出栈代码实现如下: package main import ("fmt""errors" )//使用数组来模拟一个栈的使用 type Stack stru ...

  2. 表达式求值(最详细分析+代码实现+表达式之间的相互转换)

    目录 一.概念 二.前缀表达式的逻辑和实现方式 1.定义 2.前缀表达式的计算机求值 3.例子 4.代码实现 三.中缀表达式的逻辑和实现方式 1.定义 2.中缀表达式规则 3.中缀表达式的计算机求值 ...

  3. pypinyin |将得到的中文转化成拼音形式的字符串(详细过程+代码)

    为了获得所爬数据对应的网页url,我要将输入的城市中文名转换成对应拼音形式 如:输入"重庆",我需要的到的是'chongqing' 过程描述: 1.重庆->['chong', ...

  4. JAVA冒泡排序算法(含详细过程代码讲解及优化)

    冒泡排序算法拆分讲解及优化 java冒泡排序 一.代码的拆分讲解 从上面步骤,可以观察到每次的j都相对于前一趟进行-1操作,所以可以把这些操作套在一个for循环里来控制j即可. 二.冒泡排序的代码 优 ...

  5. DevExpress 11.1.6 重编译详细过程

    编译需要准备的内容如下: 1.DevExpress 11.1.6 官方安装包 2.DevExpress 11.1.6 源代码 3.DevExpress 11.1 编译脚本 4.安装 NNuit 安装包 ...

  6. 2023年电工杯数学建模B题 人工智能对大学生学习影响的评价 具体建模过程 代码以及思路

    人工智能简称AI,最初由麦卡锡.明斯基等科学家于1956年在美国达特茅斯学院开会研讨时提出. 2016年,人工智能AlphaGo 4:1战胜韩国围棋高手李世石,期后波士顿动力公司的人形机器人Atlas ...

  7. 利用前三年的数据预测2018年NBA常规赛东西部前八的详细过程和解决思路(19年类似)

    NBA预测16强的实训报告 思路: 说明:截屏的最上面的数字(1-30)是真实比赛中的排名,第二层是根据模型得到的对应队伍的预测胜率,根据大小排好了序. 可以发现,只有一个队伍预测失误. 以上就是,利 ...

  8. Hadoop-HDFS的数据读写过程(详细过程与图解)

    目录 网络拓扑-节点距离 读过程 HDFS客户端与NameNode通信 HDFS客户端与DataNode通信 HDFS读数据的详细过程 代码实现 写数据 HDFS客户端与NameNode通信 HDFS ...

  9. C++ 源代码到可执行代码的详细过程 ?

    C++ 源代码到可执行代码的详细过程 编译 编译预处理(Preprocessing) [析] 伪指令主要包括以下四个方面 (1)宏定义指令,如#define Name TokenString,#und ...

  10. 数据加密标准DES详细过程总结、代码(自运行可实现)

    1.公开征集密码算法标准的主要要求 算法必须是安全的:具有加密保护信息安全的能力 算法必须是公开的:有完整的算法说明.容易理解.能为所有用户使用 能够经济.有效的硬件实现:性能好 能够得到批准:合法 ...

最新文章

  1. AJAX技术其实就是多年前我就使用过的XMLHTTP
  2. Swift5.x使用纯代码创建NavigationTab控制器设置启动图Wb第1部分
  3. 项目管理知识体系指南_PMP考前冲刺丨项目管理知识体系指南(PMBOK)串讲(4)...
  4. 基于JAVA+SpringMVC+MYSQL的宿舍管理系统
  5. 10项技能让前端开发者价值百万!
  6. 《电子元器件的可靠性》——3.4节失效分布类型的检验
  7. 配置HistoryServer
  8. 题解 BZOJ 1912 luogu P3629 [APIO2010]巡逻 (树的直径)
  9. 算法笔记_面试题_10.所有可能的满二叉树
  10. 7.24实习培训日志-Docker-Compose
  11. VMware安装时出现 “您无权输入许可证密钥,请使用系统管理员账户重试”解决方案
  12. Nginx源码编译安装
  13. Mac 设置终端命令快捷方式
  14. java给链表赋值_java链表的各种操作
  15. SAP中 关于BAPI_MATERIAL_SAVEDATA创建物料报错:字段MARA-MEINS/BAPI_MARA-BASE_UOM(_ISO)被定义为必需的字段; 它不包含条目
  16. AR--基本原理实现科普
  17. EasyAR 插件使用简介
  18. 超实用的Mac快捷键神器:CheatSheet Mac中文免费版
  19. matlab打开F90文件,ifort编译f90程序命令
  20. idea提示java.sql.SQLException: Access denied for user ‘‘@‘localhost‘ (using password: NO)

热门文章

  1. java jar apktool,gradle 构建apktool.jar
  2. 复合型网络拓扑结构图_网络拓扑结构大全和图片(星型、总线型、环型、树型、分布式、网状拓扑结构)...
  3. JAVA学习48_Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法!
  4. sqrt函数java_Java BigDecimal sqrt()用法及代码示例
  5. 超简单 Python 汉字拼音转换工具
  6. Windows 文件系统格式 Raw格式转换NTFS
  7. 美国大数据工程师面试指南(建议收藏)
  8. c++链表——银行账户管理系统
  9. linux电子数码相册实验报告,电子相册实训报告.docx
  10. 使用html2canvas生成海报,阿里云oss图片或网络图片报跨域问题