2.1.1问题描述
使用备忘录的方法计算组合,例如计算C(n,k).
2.1.2程序使用说明
Java version:1.8.0_111
IDE:eclipse
直接运行CombinedCalculation.java文件,在控制台查看结果。
2.1.3简要分析和设计
此题主要步骤可以分为两个,递归的过程,记录的过程,计算C(n,k)可以有两种情况假设第一个因子存在于被选择的K个点之中,则只需要在剩下的C-1个因子中选择K-1个因子,假设第一个因子没有存在于K个被选因子中,则需要计算在C-1个因子中选择K个元素。则递归表达式可以写成
公式1
上面分析的是递归的过程,下面分析备忘录记录的过程,在程序最开始的时候创建一个矩阵,此处矩阵在程序中的表现为一个二维数组大小为R(n*k),在计算C(N,K)之前先判断二维数组中是否已经存在该值,如果存在,则将该值直接返回回去若不存在,则使用上面的递归表达式计算该值。并保存在数组n,k位置。
伪代码:
输入:需要求解问题c(i,j)中的i,j
输出:问题解出c(i,j)的值
Memorand(M[1...n,1...n],i,j)
If(M[i][j]<0)
M[i][j]=Memorand(M[1...n,1...n],i-1,j)+Memorand(M[1...n,1...n],i-1,j-1)
Return M[i][j]
2.1.4测试用例
测试用例一:(8,1)
结果:8
测试用例二:(8,0)
结果:1
测试用例三:(-8,1)
结果:0