每日一题:动态规划解不同的子序列

问题描述:

给定一个字符串s 和一个字符串 t,计算在s的子序列中 t 出现的个数。

字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置 所组成的新字符串。(例如,"ACE"是"ABCDE"的一个子序列,而"AEC"不是)。

题目数据保证答案符合32位带符号整数范围。

0<=s . length, t. length<=1000, s和t由英文字母组成。

 

动态规划解决:

题目中说“计算在s的子序列中 t 出现的个数。”,翻译就是“在所有s 的子序列中 字符串 t 出现的次数”。

首先,我们定义状态变量,设dp[i][j]表示 字符串t 的前 i 个字符在 s 的前 j 个字符的子序列中出现的次数(也可以说是字符 串s 的前j个字符组成的子序列中,和字符串t 的前i个字符组成的字符串一样的有多少 个)。

那么最终我们只需要求出dp[tlen][ slen]即可(其中tlen和slen分 别表示字符串t和s的长度)。

然后列出递推方程:

1,如果t 的第 i 个字符等于 s 的第 j 个字符,即t.at(i)==s.at(j) 

便有两种情况:

a,若使字符串 s 的第j 个字符 与 字符串 t 的 第i 个字符 匹配,那我们就只需要在 s 的 前 j-1个字符的子序列中找 t 的前 i -1个字符出现的次数 。

b,若使两者不匹配,那么我们就需要在 s 的前 j-1 个字符的子序列中找 t 的前i 个字符 出现的次数。如下图:

 2,如果 t.at(i) ! = s.at(j) ,则只需要在 s 的前 j-1 个字符中 找 t 前i 个字符出现的次数,即 dp[i][j]=dp[i][j-1].

代码:

for (int j = 1; j <= sLength; j++)
{
    if (t.charAt(i - 1) == s.charAt(j - 1)) {
    //如果字符串t的第i个字符和s的第j个字符一样,
    //那么有两种选择,并且两种选择同时发生,所以要相加。
    dp[i][j] = dp[i - 1][j - 1] + dp[i][j - 1];
}
else 
{
    //如果字符串t的第i个字符和s的第j个字符不一样,
    //我们只能用字符串s的前j-1个字符来计算他包含的数量
    dp[i][j] = dp[i][j - 1];
}

最后,找出边界条件。因为空字符串“ ” 是任何字符串的子序列 ,所以 边界条件是:

           dp[0][j] =0

最终代码:

class Solution {
public:
    int numDistinct(string s, string t) 
    {
        int slen=s.size();
        int tlen=t.size();
        if(slen<tlen)
        {
            return 0;
        }
        vector<vector<unsigned long>> dp(tlen+1,vector<unsigned long>(slen+1,0)); 
        for(int j=0;j<=slen;j++)
        {
            dp[0][j]=1;
        }
        for(int i=1;i<=tlen;i++)
        {
            for(int j=1;j<=slen;j++)
            {
                if(t.at(i-1)==s.at(j-1))
                {
                    dp[i][j]=dp[i-1][j-1]+dp[i][j-1];
                }
                else
                {
                    dp[i][j]=dp[i][j-1];
                }
            }
        }
        return dp[tlen][slen];


    }
};

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
内容推荐 预测是作决策、规划之前的必不可少的重要环节 ,是科学决 策、规划的重要前提。混沌时间序列预测是预测领域 内的一个重 要研究方向。基于小波和人工神经网络的混沌时间序 列预测研究 是近几年来的研究热点,受到了特别的重视。小波神 经网络是结 合小波变换理论与人工神经网络的思想而构造的一种 新的神经网 络模型,它结合了小波变换良好的时频局域化性质及 神经网络的 自学习功能,因而具有较强的逼近能力和容错能力。 自从小波神 经网络被提出以后,它在非线性函数或信号逼近、信 号表示和分 类、系统辨识和动态建模、非平稳时间序列预测与分 析等许多领域 中被较为广泛地应用。尽管如此,将小波和人工神经 网络理论应 用到预测还有许多不尽如人意和有待进一步研究的地 方,还有很 大的研究余地。姜爱萍编著的《混沌时间序列的小波 神经网络预测方法及其优化研究》对此进行了深入分 析和研究,主要研究了小 波神经网络的构造、学习和优化以及小波神经网络在 混沌时间序 列预测中的应用,构建了适应于混沌时间序列短期预 测的模型,并 将其应用于中国股票价格预测。《混沌时间序列的小 波神经网络预测方法及其优化研究》主要研究成果与 创新点分述 如下: (1)用混沌理论及其分析方法对非线性时间序 列进行了研 究,为混沌时间序列的短期预测性提供了理论基础。 并以上证综 合指数为例,通过对其进行相空间重构,反映了股指 序列具有吸引 结构。同时,对股指序列进行了确定性检验,求取 最大李雅普诺 夫指数。根据最大李雅普诺夫指数,确定了上证综合 指数序列具 有混沌特性,这为探求股指变化规律和正确建立其短 期预测模型 奠定了基础。 (2)从小波神经网络构造理论出发,详细介绍 了小波神经网 络的数学基础和性质,对目前广泛应用的四种小波神 经网络的结 构进行了深入分析,根据网络算法、逼近细节能力、 包含频域信息 广等方面因素,提出多分辨小波神经网络更适合混沌 时间序列预 测,因为多分辨小波神经网络既能逼近混沌时间序列 的整体变化 趋势,又能捕捉细节的变化。 (3)利用相空间重构技术,把消噪后得到的状 态矢量作为多 分辨小波神经网络的多维输入,构建了多维多分辨小 波神经网络 预测模型,将其应用于混沌时间序列预测,并给出了 实现方法。针 对多分辨小波神经网络提出了BP和多分辨率学习组合 算法, 决了传统学习算法网络隐层节点数难以确定的问, 克服了BP 网络单尺度学习算法很难学习复杂的时间序列的不足 。以上证综 合指数为例,分别采用具有相同结构的MRA—WNN和 RBF_ VJNN预测模型对股价时序进行预测,仿真结果表明, 多分辨小波 神经网络具有较高的预测精度。 (4)给出了小波神经网络的优化的两类非单调 的方法。一类 是非单调的滤方法,并且证明了该算法是全局收敛 到一阶临界 点。这个算法不同于传统的滤信赖域方法,因为它 使用了试探 步的切向和法向的分;也不同于Gould提出的非单 调方法,因为 本书提出的非单调性更为松弛。这使得在不引入二阶 校正步的情 况下改进了滤方法。同时也不再定义支配区域的边 界,而直接 使用面积,这样也相应简化了算法。另一类是非单调 的无罚函数 方法,该方法利用非单调线搜索和对于约束违反度函 数的可行性 恢复阶段来达到目标函数和约束违反度函数之间的平 衡,而非单 调的方法在M一1时是等价于单调方法的,非单调方法 从M步看 来仍然是单调的。当然,在这种方法中,也可以采用 试探步分的 技术,然后利用滤来做接受性的检验。进一步地, 我们还可以将 非单调的滤方法推广到一般的约束最小化问之中 ,数值结果 表明这种方法也是可执行的且是有效的,并用此两种 方法作为训 练小波神经网络的优化新算法。 (5)提出将无罚函数方法与非线性互补问相 结合用于小波 神经网络的优化,将互补问转化为约束优化问, 应用约束优化 问的策略和技巧对其求,融入无罚函数的概念, 并得到了算法 的收敛性。同时,其数值结果也表明这类算法和同类 的其他方法 比起来更为灵活,且具有更好的数值效果。 (6)提出基于修正的SQP滤方法的小波神经网 络的优化, 修正了序列二次规划,使得二次规划在 每个迭代处 总是可的,同时不用线搜索,提出了修正的滤方 法。另外,引 入积极集策略,减小运算量。当第一次得到的搜索方 向不被滤 接受时,不是直接舍弃它,而是转而以这个方向为基 础,构造另一 个可行下降的搜索方向。并在此基础上加入了线搜索 ,得到了带 线搜索的滤方法,其数值结果也说明基于修正的 SQP滤方法 的小波神经网络的优化是有效的。 (7)提出基于新的无罚函数方法的小波神经网 络的优化,应 用NCP函数把约束优化问转化为非线性非光滑方程 的求。运用分裂的思想将其分裂为光滑函数和非光滑函 数之和, 同时将NCP函数的信息融入了滤对中,改造了原有 的滤对 的形式,最终得到了算法的全局收敛性和局部超线性 收敛性。 另外,为了求大规模问,结合积极集策略,提出 了积极集滤 方法,得到了非单调的滤方法简化小波神经网络 优化运算 的目的。 (8)用全局优化方法——填充函数法研究了小 波神经网络 的优化方法,构造了一种新的易于计算的单参数的填 充函数,不 仅证明了新构造的函数具有填充函数的性质,还把填 充函数和 BP算法相结合,提出一种训练小波神经网络的混合型 全局优化 新算法。 (9)在退火遗传算法的基础上提出一个新的自 适应退火策 略,将自适应退火策略用于选择概率的计算以增强算 法的收敛性, 在交叉和变异概率的选取上也进行了自适应处理,以 进一步改善 算法的稳定性和收敛性,并将此自适应退火遗传算法 应用于小波 神经网络权值的优化。
计算机算法设计与分析 期末试 一。选择 1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( A )。 A、找出最优的性质 B、构造最优 C、算出最优 D、定义最优 3、最大效益优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4、在下列算法中有时找不到问的是( B )。 A、蒙特卡罗算法 B、拉斯维加斯算法 C、舍伍德算法 D、数值概率算法 5. 回溯法旅行售货员问时的空间树是( A )。 A、集树 B、排列树 C、深度优先生成树 D、广度优先生成树 6.下列算法中通常以自底向上的方式求最优的是( B )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 7、衡量一个算法好坏的标准是(C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 8、以下不可以使用分治法求的是(D )。 A 棋盘覆盖问 B 选择问 C 归并排序 D 0/1背包问 9. 实现循环赛日程表利用的算法是( A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 10、下列随机算法中运行时有时候成功有时候失败的是(C ) A 数值概率算法 B 舍伍德算法 C 拉斯维加斯算法 D 蒙特卡罗算法 11.下面不是分支界限法搜索方式的是( D )。 A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先 12.下列算法中通常以深度优先方式系统搜索问的是( D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 13.备忘录方法是那种算法的变形。( B ) A、分治法 B、动态规划法 C、贪心法 D、回溯法 14.哈弗曼编码的贪心算法所需的计算时间为( B )。 A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 15.分支限界法最大团问时,活结点表的组织形式是( B )。 A、最小堆 B、最大堆 C、栈 D、数组 16.最长公共序列算法利用的算法是( B )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 17.实现棋盘覆盖算法利用的算法是( A )。 A、分治法 B、动态规划法 C、贪心法 D、回溯法 18.下面是贪心算法的基本要素的是( C )。 A、重叠 B、构造最优 C、贪心选择性质 D、定义最优 19.回溯法的效率不依赖于下列哪些因素( D ) A.满足显约束的值的个数 B. 计算约束函数的时间 C. 计算限界函数的时间 D. 确定空间的时间 20.下面哪种函数是回溯法中为避免无效搜索采取的策略( B ) A.递归函数 B.剪枝函数 C。随机数函数 D.搜索函数 21、下面关于NP问说法正确的是(B ) A NP问都是不可能决的问 B P类问包含在NP类问中 C NP完全问是P类问集 D NP类问包含在P类问中 22、蒙特卡罗算法是( B )的一种。 A、分支界限算法 B、概率算法 C、贪心算法 D、回溯算法 23.下列哪一种算法不是随机化算法( C ) A. 蒙特卡罗算法B. 拉斯维加斯算法C.动态规划算法D.舍伍德算法 24. ( D )是贪心算法与动态规划算法的共同点。 A、重叠 B、构造最优 C、贪心选择性质 D、最优结构性质 25. 矩阵连乘问的算法可由( B)设计实现。 A、分支界限算法 B、动态规划算法 C、贪心算法 D、回溯算法 26. 分支限界法旅行售货员问时,活结点表的组织形式是( A )。 A、最小堆 B、最大堆 C、栈 D、数组 27、Strassen矩阵乘法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 29、使用分治法求不需要满足的条件是(A )。 A 必须是一样的 B 不能够重复 C 可以合并 D 原问使用相同的方法 30、下面问(B )不能使用贪心法决。 A 单源最短路径问 B N皇后问 C 最小花费生成树问 D 背包问 31、下列算法中不能决0/1背包问的是(A ) A 贪心法 B 动态规划 C 回溯法 D 分支限界法 32、回溯法搜索状态空间树是按照(C )的顺序。 A 中序遍历 B 广度优先遍历 C 深度优先遍历 D 层次优先遍历 33、下列随机算法中运行时有时候成功有时候失败的是(C ) A 数值概率算法 B 舍伍德算法 C 拉斯维加斯算法 D 蒙特卡罗算法 34.实现合并排序利用的算法是( A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 35.下列是动态规划算法基本要素的是( D )。 A、定义最优 B、构造最优 C

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别抢我的辣条~

老板大气!祝老板身体健康!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值