15.2 动态规划
2013-10-05 11:47
155 查看
15.2.1
为了计算,实现了书中的代码。
15.2.2
写出伪代码很简单,但是实现上因为不清楚如何返回一个二维的数组,所以暂未实现。
15.2.3
15.3中有,所谓替换法似乎就是类似于归纳法的东西?
15.2.4
直接按照TATRIX-CHAIN-ORDER的代码统计第9行的执行次数,然后*2就可以了。
15.2.5
每加一个括号就少一个元素,因此最后剩下一个元素时候,加了n-1个括号。
为了计算,实现了书中的代码。
#include <iostream> #include <cstdio> #include <cstdlib> #include <string> #include <vector> #include <cassert> #include <cmath> #include <algorithm> using namespace std; #define MAX 110 #define INFINITE 1111111 int m[MAX][MAX]; int s[MAX][MAX]; void matrix_chain_order(int *p, int len_p) { int len = len_p - 1; for (int i = 0; i < len; i++) m[i][i] = 0; for (int length = 2; length <= len; length++) { for (int i = 0; i <= len - length; i++) { int j = length + i - 1; m[i][j] = INFINITE; for (int k = i; k <= j - 1; k++) { int tmp = m[i][k] + m[k + 1][j] + p[i] * p[k + 1] * p[j + 1]; if (tmp < m[i][j]) { m[i][j] = tmp; s[i][j] = k; } } } } } void print_result(int i, int j) { if (i == j) { printf(" A%d ", i + 1); return; } else { int k = s[i][j]; printf("("); print_result(i, k); //printf(")("); print_result(k + 1, j); printf(")"); } } int main(int argc, const char * argv[]) { //int p[] = {30, 35, 15, 5, 10, 20, 25}; int p[] = {5, 10, 3, 12, 5, 50, 6}; matrix_chain_order(p, sizeof(p) / sizeof(p[0])); printf("%d\n", m[0][sizeof(p) / sizeof(p[0]) - 2]); print_result(0, sizeof(p) / sizeof(p[0]) - 2); return 0; }
15.2.2
写出伪代码很简单,但是实现上因为不清楚如何返回一个二维的数组,所以暂未实现。
15.2.3
15.3中有,所谓替换法似乎就是类似于归纳法的东西?
15.2.4
直接按照TATRIX-CHAIN-ORDER的代码统计第9行的执行次数,然后*2就可以了。
15.2.5
每加一个括号就少一个元素,因此最后剩下一个元素时候,加了n-1个括号。
相关文章推荐
- H264 RTP payload
- Mysql常用命令大全
- 有趣直观的排序算法
- 快速排序,选择排序
- 设计模式学习之Singleton模式
- 模块化系统开发 一
- JavaScript(Jquery)中让网页停顿几秒或按时间循环执行(定时器,已解决,可直接执行!)
- 模块化系统开发 一
- 西游记的情节如果倒过来这么看。。。貌似更合理了
- hdu 4090 GemAnd Prince DFS+启发剪枝
- 排序算法--插入排序
- windows初始化后做了哪些事情
- A. Jeff and Digits(cf)
- 网络中各层协议
- 排序算法--选择排序
- 帝国cms中 调用内容页评论
- 排序算法--冒泡排序
- Android BaseAdapter
- PHP Warning: date() [function.date]: It is not safe to rely on the system's timezone
- Linux挂载卸载光盘&实践