动态规划

动态规划(dynamic programming):是运筹学的一个分支,是求解决策过程最优化的数学方法。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式。
模式匹配:给定一个子串,要求在某个字符串中找出与该子串相同的所有子串。KMP算法的关键是利用匹配失败后的信息,消除朴素的模式匹配算法中的主串指针回溯问题;减少模式串与目标串的匹配次数以达到快速匹配。可以在O(n+m)的时间上完成。具体实现就是实现一个next()函数:已经匹配的模式子串中,找出最长的相同的前缀(除了最后一个字符以外,一个字符串的全部头部组合)和后缀(除了第一个字符以外,一个字符串的全部尾部组合);然后移动使它们重叠。next(j)表明当模式中第j个字符与主串中相应字符失配时,在模式中需要重新和主串中该字符进行比较的字符位置。
next函数


/*
*dynamic programming:动态规划 
*/
#include <stdlib.h>

/*
*Longest Common Length(LCS) 
*函数功能:最长公共子串(在原字符中连续)
*输入:两个字符串
*返回:最长公共子串
*/
#define LEN1 7   //字符串1的长度,横向
#define LEN2 7   //字符串2的长度,纵向
char* LCS(char* str1, char</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值