第7章,动态规划,Dynamic Programming
  又是动态规划,上一次想整理动态规划,结果还没有整理完,实际上是没有整理的动力了,整理一道题都好费时间的。
  现在又要整理,这次能整理多少了?已经开始写了,那至少有些成果吧。

  最长公共子序列问题
  书上例题,先简单分析一下,然后看与之类似的一个问题。
  给出两个长度为n和m的字符串A=a1a2..an和B=b1b2..bm,确定A和B的最长公共子序列的长度。其中,子序列的定义是形式为ai1,ai2,..aik的字符串,ij满足1<i1<i2<..<ik<n,也就是没有要求子序列是元字符串中连续的字符序列。
  为了使用动态规划技术,就需要找到最长公共子序列长度的递推公式。令L(i,j)表示A的前i个字符和B的前j个字符中最大公共子序列长度,如果i或j为0,那么L(i,j)=0,这是初始条件。当ai=bj时,最长公共子序列长度应该增加1,当ai!=bj时呢?
      i-1         i
j-1      L(i-1,j-1)    L(i,j-1)
j       L(i-1,j)     if ai=bj,   L(i,j)=L(i-1,j-1)+1
             else,     L(i,j)=max(L(i,j-1),L(i-1,j))
  这就是动态规划二维矩阵的递推关系。有了这个之后,求出最大长度就是很简单的事情,但是如果要求出最长公共子序列呢?
  如果需要求出最长公共子序列的内容,需要在填写矩阵的过程这个中记录当前单元格的数字来自哪个地方,分别用左上,向左,向上的箭头表示,矩阵填写完之后,通过回溯,找出对角线上最长的箭头连线,回溯过程中箭头的优先级需要一致。
  发现下面一篇blog讲解的十分详细,给出链接http://www.cnblogs.com/zhangchaoyang/articles/2012070.html。
  另一篇也不错,http://blog.csdn.net/yysdsyl/article/details/4226630

  Google Code Jam 2012 Round 1C
  Problem C. Box Factory
  http://code.google.com/codejam/contest/1781488/dashboard#s=p2&a=2
  这是Google编程挑战赛2012年第一轮C回的第三道题,盒子工厂。题目意思是有两条生产线A和B,分别生产盒子和玩具。现在给出两条生产线上产品的数量和类型,如果两条生产线上的产品类型一致,那么把玩具放入盒子,如果不一致,你就要求选择是把盒子还是把玩具扔掉,然后继续匹配装箱。要求给出一种方案,使得最后得到的产品最多。并且只要求给出最多的这个数,不要求具体的方案。
  这道题与最长公共子序列类似,下面分析它的解法。
  f(x,y)表示两条生产线上前x个盒子和前y个玩具得到的最大的产品数,递推关系如下,
      x-1         x
y-1      f(x-1,y-1)    f(x,y-1)
y       f(x-1,y)     if x.type=y.type,   f(x,y)=f(x-1,y-1)+min(x.num,y.num)
               else,          f(x,y)=max(f(x-1,y),f(x,y-1))
  代码如下,

# BoxFactory.pyimport sysdef ReadInt(fin):return int(fin.readline().rstrip("\n"))def ReadInts(fin):return list(int(v) for v in fin.readline().rstrip("\n").split())def BoxFactory(na,nb,A,B):L = [[0 for j in range(nb+1)] for i in range(na+1)]for i in range(1,na+1):for j in range(1,nb+1):if A[2*i-1]==B[2*j-1]:L[i][j] = L[i-1][j-1] + min(A[2*i-2],B[2*j-2])else:L[i][j] = max(L[i-1][j],L[i][j-1])return L[na][nb]fname = ""
if len(sys.argv)<2:fname = raw_input("please input the test input:")
else:fname = sys.argv[1]fin = open(fname)
fout = open("result.txt","w")
caseNum = ReadInt(fin)
for case in range(caseNum):(na,nb) = ReadInts(fin)A = ReadInts(fin)B = ReadInts(fin)r = BoxFactory(na,nb,A,B)answer = "Case %d: %d\n" %(case+1,r)fout.write(answer)fin.close()
fout.close()

  这是没有做任何修改的LCS的过程,但是测试结果中存在一些问题,页面给出的示例的第二个结果就不对,需要继续改进。

转载于:https://www.cnblogs.com/Frandy/archive/2012/06/16/algorithm_course_7_1.html

Algorithm Course Review(7.1)相关推荐

  1. Algorithm Course Review(1.1)

    算法课要考试了.没想到一晃就到学期末了.一开始是打算边上课边整理算法的学习笔记的,结果拖到现在了.如果现在复习的时候不整理,估计以后都不会整理了.那就现在整理吧. 课本,算法设计技巧与分析. 先来看第 ...

  2. ​使用端到端立体匹配网络进行单次 3D 形状测量,用于散斑投影轮廓测量

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:Single-shot 3D shape measurement using an end-to ...

  3. 每周学算法/读英文/知识点心得分享 2.25 - 3.1

    每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西! Algorithm: 学习算法 本周完成五题,为自己鼓个掌!? 题目: ...

  4. 每周学算法/读英文/知识点心得分享 3.4 - 3.8

    每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西! Algorithm: 学习算法 题目:Generate Parenth ...

  5. 第 16 章 string类和标准模板库

    第 16 章 string类和标准模板库 16.1 string类 C语言在 string.h(C++中为cstring)提供了一系列的字符串函数. 16.1.1 构造字符串 string 实际上是模 ...

  6. 左耳听风 第二十一周

    左耳听风 第二十一周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  7. ARTS-第二周(2019.07.08)

    每周完成一个ARTS:(Algorithm.Review.Tip.Share, ARTS) Algorithm 每周至少做一个 leetcode 的算法题-主要是为了编程训练和学习 Review 阅读 ...

  8. 微服务连载(一)微服务技术体系和六大组件

    如何学习 学习是一个人的核心竞争力,终生持续学习是别人离不开你的秘诀,如果能分享和教会别人,你的收获可能是双边甚至更多.就技术领域的学习,我还是一个在海边玩耍的小孩,时不时因为捡到一块漂亮的石头就开心 ...

  9. 如何看待软件开发 ?

    题记 今年的总结主要想和读者聊聊如何看待软件开发,回答去年年终总结文末的问题.这个话题也比较大,每个开发人员也都有自己的答案.笔者根据自己刚刚从业几年的经验说说自己的看法,作为一个开发萌新,见解略短浅 ...

最新文章

  1. .Net Discovery 系列之六--深入浅出.Net实时编译机制(下)
  2. 线程访问 DevExpress控件异常时 解决方法
  3. 网站程序数据库怎么上传到服务器上,网站的数据库怎么上传到服务器
  4. SVDchapter14 机器学习之利用SVD简化数据
  5. java String 常用方法集合
  6. Servlet+Jsp实现图片或文件的上传功能
  7. C#中如何获取一个二维数组的两维长度,即行数和列数?
  8. 篮球比赛JAVA代码_Java编程实现NBA赛事接口调用实例代码
  9. 算法4第6章后缀数组讲解
  10. AcWing120 防线
  11. java包裹邮费计算_猿实战16——承运商之搭建你的运费基石
  12. 【软件测试】离开“浪浪山“测试人迎来的春天......
  13. C语言把分钟数转换成小时和分钟
  14. ionic3应该善用组件和指令 (实用、赞)
  15. mysql金额数字转成中文_数字金额大写转换(可以处理整数,小数,负数)
  16. JQuery 中load、ready 和 onload 的区别
  17. Exception in thread “main“ java.lang.NoSuchMethodError: scala.Predef$
  18. iOS 14摊上事:新隐私功能遭欧洲16家广告协会反对
  19. v1 中兴f450g_上海电信中兴F450G v2.0 改桥接
  20. 【微电网优化】基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题【含Matlab源码 2283期】

热门文章

  1. NIO中的SelectionKey
  2. html导入错误 wordpress,纯代码为WordPress压缩前端html代码 附BUG修复
  3. 关于mysql服务器3306端口不能远程连接的解决
  4. AES加密解密算法Java实现
  5. Java实现算法导论中快速傅里叶变换FFT递归算法
  6. 元素垂直水平居中布局
  7. 曾经案例中问题 与 工厂模式解耦
  8. 在方法的形参位置使用@Qualifier注解||@Autowired 与@Resource的区别
  9. DbVisualizer Personal 7.0 数据库连接工具免安装版本获取,直接解压即可使用!
  10. PyQt5 技术篇-设置输入框的placeholder方法,Qt Designer设置Line Edit、Text Edit编辑框的placeholder