动态规划实例(四):二项式系数问题
来源:互联网 发布:python写入excel 编辑:程序博客网 时间:2024/05/17 01:17
以下是常见的二项式系数的定义:
1) 一个二项式系数 C(n, k) 可以被定义为(1 + X)^n 的展开式中 X^k 的系数。
2) 二项式系数对组合数学很重要,因它的意义是从n件物件中,不分先后地选取k件的方法总数,因此也叫做组合数.
问题
写一个函数,它接受两个参数n和k,返回二项式系数C(n,k)。例如,你的函数应该返回6 当n = 4 k = 2时,返回10当 n = 5 k = 2时。
1) 最优子结构
C(n,k)的值可以递归地使用以下标准公式计算,这个应该是高二的数学:
1) 一个二项式系数 C(n, k) 可以被定义为(1 + X)^n 的展开式中 X^k 的系数。
2) 二项式系数对组合数学很重要,因它的意义是从n件物件中,不分先后地选取k件的方法总数,因此也叫做组合数.
问题
写一个函数,它接受两个参数n和k,返回二项式系数C(n,k)。例如,你的函数应该返回6 当n = 4 k = 2时,返回10当 n = 5 k = 2时。
1) 最优子结构
C(n,k)的值可以递归地使用以下标准公式计算,这个应该是高二的数学:
1. C(n, k) = C(n-1, k-1) + C(n-1, k)
2. C(n, 0) = C(n, n) = 1
2) 重叠子问题
具体实例及实现代码如下:
/** * @Title: BinomialCoeff.java * @Package dynamicprogramming * @Description: TODO * @author peidong * @date 2017-6-8 上午8:32:16 * @version V1.0 */package dynamicprogramming;/** * @ClassName: BinomialCoeff * @Description: 二项式系数 * @date 2017-6-8 上午8:32:16 * */public class BinomialCoeff { /** * * @Title: binomialCieffRecursion * @Description: 递归求解组合数 * @param n * @param k * @return * @return int * @throws */ public static int binomialCieffRecursion(int n, int k){ //边界条件判断 if(k == 0 || n == k){ return 1; } //递归 return binomialCieffRecursion(n-1, k-1) + binomialCieffRecursion(n-1, k); } public static int binomialCoeff(int n, int k){ //创建状态转移矩阵 int[][] tc = new int[n+1][k+1]; //从上到下构建状态转移矩阵 for(int i = 0; i <= n; i++){ for(int j = 0; j <= Math.min(i, k); j++){ //边界条件判断 if(j == 0 || j == i){ tc[i][j] = 1; }else{ tc[i][j] = tc[i-1][j-1] + tc[i-1][j]; } System.out.print(tc[i][j] + " "); } System.out.println(); } return tc[n][k]; } /** * @Title: main * @Description: 测试用例 * @param args * @return void * @throws */ public static void main(String[] args) { // TODO Auto-generated method stub int n =5, k = 2; System.out.println("利用递归求解组合个数为:" + binomialCieffRecursion(n, k)); System.out.println("利用动态规划求解组合个数为:" + binomialCoeff(n, k)); }}
阅读全文
0 0
- 动态规划实例(四):二项式系数问题
- 动态规划 计算二项式系数
- 动态规划之二项式系数
- 动态规划 计算二项式系数
- 动态规划-计算二项式系数
- 动态规划 计算二项式系数
- 动态规划 — 计算二项式系数
- 动态规划-求二项式系数
- 动态规划 —— 求解二项式系数
- 动态规划——二项式系数
- 动态规划——1 计算二项式系数
- uva-10883(二项式系数)
- 二项式系数
- poj2249 Binomial Showdown(二项式系数)
- 动态规划实例(十四):划分问题
- 【Algothrim】动态规划实例四(Business investment)
- 动态规划 - 计算二项式系统 ---MATLAB代码
- (四)动态规划
- [Github]msysgit的使用&Git常用命令
- 圆角样式
- mycati缓存cache
- akka实例
- 仿手机通讯录
- 动态规划实例(四):二项式系数问题
- 线程终止的方法
- Valid Triangle Number (第十六周 数组)
- 开源派
- JAVA 基础定义 day1
- 微信小程序实战篇-下拉刷新与加载更多
- 元编程结构控制
- python及scikit-learn的安装
- fastjson 使用 string字符串转换成java的各种类型