根据给定文件的信息,我们可以提炼出与“prettyprint动态规划算法”相关的几个核心知识点: ### 知识点一:PrettyPrint 函数 在文件中,`PrettyPrint` 函数用于以一种美观的方式打印动态规划矩阵中的元素。此函数接受三个参数: - `int x`: 打印范围的终点(不包括此值)。 - `int y`: 打印范围的起点(包含此值)。 - `bool shade_only`: 是否仅以阴影形式显示正值。 如果 `x` 和 `y` 的值设置为 `-1`,则默认打印整个矩阵。`PrettyPrint` 函数首先检查 `x` 和 `y` 的值,并将它们调整为合适的范围。然后,它遍历矩阵中的每个元素,并根据 `shade_only` 参数决定是打印具体的值还是用简单的字符来表示正负值。如果 `shade_only` 为 `true`,那么所有大于0的值都会被打印为 "X",否则小于1且大于0的值会被打印为1,并限制打印的最大值为99。 ### 知识点二:动态规划类 CDynamicProgramming #### 类构造与销毁 `CDynamicProgramming` 类是实现动态规划算法的核心类。其构造函数初始化了一些关键变量,如最大间隔 `m_maxGap`、无效分数 `m_badScore` 和分数是否为正 `m_bScoresPos`。 #### 设置最大间隔 `SetMaxGap` 方法用于设置两个状态之间的最大间隔,这对于限定状态转移的范围非常有用。 #### 设置分数属性 `SetScoresArePos` 方法用于设置分数是否总是正数。如果设置为 `true`,则 `m_badScore` 将被设置为 `DP_BADSCORE_NEG`,反之则为 `DP_BADSCORE`。 #### 获取最佳路径 `GetBestPath` 方法是该类的关键方法之一,它用于计算并返回动态规划过程中的最佳路径以及对应的分数。这个方法通过构建一个表格来确定每个状态的最佳前驱状态,从而找到最优路径。该方法首先清空 `indices` 和 `m_scores`,然后初始化表格中的各个元素。接下来,根据设置的最大间隔或通过计算得到的最大间隔来填充 `m_firstValid` 向量,这个向量记录了从当前状态可以回溯到的最早状态。通过动态规划的过程填充 `m_scores` 和 `m_paths` 向量。 ### 知识点三:动态规划算法原理 动态规划是一种用于解决具有重叠子问题和最优子结构特征的问题的方法。具体来说,在这个问题中,我们关注的是寻找一系列状态的最佳路径,其中每个状态的分数可以通过前驱状态的分数计算得出。该算法通过构建一个二维矩阵来表示状态空间,并使用递推关系式逐步填充这些矩阵的单元格。在此过程中,每个单元格都存储了一个状态及其对应的最优解,以便于后续的状态转移。 ### 总结 “prettyprint动态规划算法”主要涉及如何以美观的方式打印动态规划矩阵的内容以及实现动态规划算法的基本框架。通过对 `PrettyPrint` 函数的理解,我们可以知道它是如何以特定格式展示矩阵中的数据。而 `CDynamicProgramming` 类则封装了动态规划算法的核心逻辑,包括设置算法参数、构建状态空间以及获取最佳路径等功能。理解这些知识点有助于更好地掌握动态规划算法的实际应用。
#include "math/Functions.h"
#include "ueberal/DynProg.h"
void CScoreMatrix::PrettyPrint( int x, int y, bool shade_only )
{
int i, j;
if (x == -1)
x = m_size;
if (y == -1)
y = 0;
cout << "Printing elements from x=" << x << " to y=" << y << "\n";
for (i=y; i<x; i++) {
cout << "\n";
for (j=y; j<x; j++) {
double val_orig = Get( i, j );
if ( shade_only )
cout << ( val_orig > 0 ? "X" : "." );
else {
if ( val_orig > 0 && val_orig < 1.0 )
val_orig = 1.0;
int val = Min( 99, (int)val_orig );
cout << setw( 3 ) << val << " ";
}
}
cout << "\n";
}
CDynamicProgramming::CDynamicProgramming()
{
m_maxGap = -1;
m_badScore = DP_BADSCORE;
m_bScoresPos = false;
}
CDynamicProgramming::~CDynamicProgramming()
{
}
void CDynamicProgramming::SetMaxGap(int x)
{
m_maxGap = x;
}
void CDynamicProgramming::SetScoresArePos(bool b)
{
m_bScoresPos = b;
if (b)
m_badScore = DP_BADSCORE_NEG;
else
剩余6页未读,继续阅读
- 粉丝: 6
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- yolo算法-麻将检测数据集-13687张图像带标签-西风.zip
- yolo算法-跌倒检测数据集-10787张图像带标签-检测到跌倒.zip
- 软考冲刺资源之软考系统架构设计师笔记一起努力吧
- delphi 读取多种格式的图像,并实现互转
- Wordpress简约大气昼夜切换导航主题模板NDNAV主题
- gcc-8.5.0.tar.gz
- Python爬取、存储、分析、可视化豆瓣电影Top250
- 应对期末考试时,所准备的学习仓库 主要是研一的期末课程-数值分析
- yolo算法-跌倒检测数据集-10792张图像带标签-检测到跌倒.zip
- yolo算法-道路旁边树木检测测试数据集-6898张图像带标签-.zip