第三章动态规划

 

 

 

 1.最长公共子序列(LCS)

    若用蛮力法,效率为n*2^m,用动态规划求解LCS,假如Xm=Yn,那么Zk=Xm=Yn,和Zk-1是Xm-1和Yn-1的LCS,假如XM!=Yn,那么若Zk!=Xm,则有Z是Xm-1和Yn的LCS,假如,Xm!=Yn,那么若Zk!=Yn,则有Z 是Xm和Yn-1的LCS

 递归解,假如Xi=Yj,找Xi-1和Yj-1的LCS,然后将Xi追加到之后

 假如Xi!=Yj,找Xi-1和Yj的LCS及,找Xi和Yj-1的LCS,取两者较长的LCS,得状态转移方程:

c[i,j]={ 0(i=0或j=0)   c[i-1,j-1]+1(i,j>0 and Xi=Yj)  max{c[i-1,j],c[i,j-1]}(i,j>0 andXi!=Yj),要求解的问题在c[m,n]复杂度:O(m+n).

2.最大子段和:

求序列A的最大连续子段和,单看问题不满足最优子结构,但可以转化,记b[i]为从起始位置开始包含第i个元素的最大子段和的长度,此时满足最优子结构,得状态转移方程为:b[i]=A[i](b[i-1]<0) ||b[i-1]+A[i](b[i-1]>=0),即若在求第i个元素时,若包含第i-1个的和的小于0,即加上的代价就大,则直接用第i个元素的值替换,否则,加上第i个元素,复杂度为O(n)

3.背包问题

第i件物品的价值是v[i],重量是w[i],实质就是决定第i个物品装与不装的问题,若装,那应该为前i-1件物品空出j-w[i]的空间,此时a[i][j]是a[i-1][j-w[i]]+v[i],若不装,还是原来的价值和空间,为a[i-1[j],从第一个遍历到最后一个物品,空间复杂度为n*W,n是物品的件数,W是背包的重量。时间复杂度为O(n*W)

4图像压缩

引入两个固定位数的值来表示,①用3位数字来表示当前组的每一位像素的的位数②引入8位数字来表示当前组中像素点的个数,压缩的原理就是把序列{p1,p1,……pn}进行设断点,将其分割成一段一段的。分段的过程就是要找出断点,让一段里面的像素的最大灰度值比较小,那么这一段像素(本来需要8位)就可以用较少的位(比如7位)来表示,从而减少存储空间。 b代表bits,l代表length,b[i]表示每段一个像素点需要的最少存储空间(少于8位才有意义),l[i]表示每段里面有多少个像素点,s[i]表示从0到i压缩为一共占多少存储空间。所以存储s[i]段需要内存=本段像素个数*本段像素位数+表示本段像素个数的内存和表示本段像素位数的内存即b[i]*l[i]+3+8。s[i](1<=i<=n)是像素序列(p1,p2……pi)的最优分段所需的存储位数,则s[i]=min{s[i-k]+k*bmax(i-k+1,i)}+11,(1<=k<=min(256,i)。时间复杂度为O(N)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值