关于动态规划的一点理解
2016-03-17 21:32
417 查看
最近在学习Andrew Ng的机器学习过程,过于非监督学习一些算法的证明过程中用到了动态规划知识,做毕设涉及到字符串的匹配问题,也需要动态规划,所以今天特意去查资料看了动态规划的一些内容。动态规划我觉得可以结合一些例子来帮助自己理解动态规划,比如01背包问题,国王挖金矿问题,然后看看自己需要解决的问题和这些典型的问题对比有没有一些共性(其实也就是你的问题符不符合动态规划问题的一些特点),关于动态规划问题的特点,总结起来有六个。
6.时间分析
今天时间不够了,先写到这里,有时间再完善
附上求解字符串相似度的动态规划的C++实现:
#include<stdio.h>
#include<string.h>
#define MAX 1000
int dp[MAX][MAX]; ///dp[i][j]表示当前a[0..i-1]与b[0..j-1]的编辑距离
char *a="agbgd";
char *b="ggd";
int min(int t1,int t2,int t3) ///求三个数的最小值
{
int min;
min=t1<t2?t1:t2;
min=min<t3?min:t3;
return min;
}
int main()
{
int i,j;
int lena=strlen(a),lenb=strlen(b);
memset(dp,0,sizeof(dp));
for(i=0;i<=lena;i++) ///a作为行,当b为空串时
dp[0][i]=i;
for(i=0;i<=lenb;i++) ///b作为列,当a为空串时
dp[i][0]=i;
for(i=1;i<=lena;i++)
{
for(j=1;j<=lenb;j++)
{
if(*(a+i)==*(b+j)) ///相等时
dp[i][j]=dp[i-1][j-1];
else
dp[i][j]=1+min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]); ///不相等时,取三种可能操作的最小数值+1
}
}
printf("编辑距离为:dis=%d\n",dp[lena][lenb]);
return ;
}
1.最优子结构
2.子问题重叠
3.边界是否存在
4.子问题独立
5.做备忘录
6.时间分析
今天时间不够了,先写到这里,有时间再完善
附上求解字符串相似度的动态规划的C++实现:
#include<stdio.h>
#include<string.h>
#define MAX 1000
int dp[MAX][MAX]; ///dp[i][j]表示当前a[0..i-1]与b[0..j-1]的编辑距离
char *a="agbgd";
char *b="ggd";
int min(int t1,int t2,int t3) ///求三个数的最小值
{
int min;
min=t1<t2?t1:t2;
min=min<t3?min:t3;
return min;
}
int main()
{
int i,j;
int lena=strlen(a),lenb=strlen(b);
memset(dp,0,sizeof(dp));
for(i=0;i<=lena;i++) ///a作为行,当b为空串时
dp[0][i]=i;
for(i=0;i<=lenb;i++) ///b作为列,当a为空串时
dp[i][0]=i;
for(i=1;i<=lena;i++)
{
for(j=1;j<=lenb;j++)
{
if(*(a+i)==*(b+j)) ///相等时
dp[i][j]=dp[i-1][j-1];
else
dp[i][j]=1+min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]); ///不相等时,取三种可能操作的最小数值+1
}
}
printf("编辑距离为:dis=%d\n",dp[lena][lenb]);
return ;
}
相关文章推荐
- LA2963
- Paper Reading 3:Continuous control with Deep Reinforcement Learning
- LightOJ - 1003 Drunk
- POJ-1160 Post Office (DP+四边形不等式优化)
- 24Pointgame-----24点游戏
- iOS开发--项目内存优化
- 18. 4Sum LeetCode
- KVM原理与架构系列之三 CPU虚拟化篇
- 《leetCode》:Maximum Product Subarray
- 浅谈 C++ 中的 new/delete
- Android自定义弹出框AlertDialog
- 使用FreeMarker的Web Project例子
- Reverse Linked List II
- PB事件:pbm_enupdate
- python标准库学习1-SYS
- 从客户端中检测到有潜在危险的 Request.Form 值 设置 ValidateRequest="false" 不管用
- IBM Bluemix试用到期后绑定信用卡继续免费使用
- PowerDesigner 学习笔记
- noip2011普及组:统计单词
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法----细节决定成败 (sort用法)