最优化方法在计算机业的应用
动态规划方法在计算机专业的应用科目:最优化方法姓名:***专业:计算机科学与技术学号:201320405指导老师:***日期:2014/1/9动态规划方法在计算机专业的应用摘要:最优化方法是一门很有用的学科,本文结合计算机专业,讨论了用动态规划方法解决计算最长公共子序列、最大字段和、背包问题的过程,并对比其它算法以说明动态规划方法的高效、实用。关键词:动态规划,最优化,算法分析Abstract: The optimization method is a useful discipline, this paper, a computer professional, discusses the process used to calculate the dynamic programming method to solve the longest common subsequence, the maximum field and, knapsack problem, and compared to other algorithms to illustrate the dynamic programming method efficient and practical.Keywords: dynamic programming, optimization, algorithm analysis动态规划(dynamic programming)是通过结合子问题的解而解决整个问题的。(此处“programming”是指一种规划,而不是指写计算机代码。)动态规划适用于子问题不是独立的情况,也就是各子问题包含公共的子子问题。在这种情况下,若用分治法则会做很多不必要的工作,即重复地求解公共的子子问题。动态规划算法对每个公共的子子问题只求解一次,将其结果保存在一张表中,从而避免了每次遇到各个子问题时重新计算答案。算法设计与优化动态规划通常应用于最优化问题。此类问题可能有很多可行解。每个解有一个值,而我们希望找出一个具有最优(最大或最小)值的解。称这样的解为该问题的“一个”最优解(而不是“确定的”最优解),因为可能存在多个取最优值的解。 动态规划算法的设计可以分为如下4个步骤:描述最优解的结构。递归定义最优解的值。按自底向上的方式计算最优解的值。由计算出的结果构造一个最优解。第1~3步构成问题的动态规划解的基础。第4步在只要求计算最优解的值时可以略去。如果的确做了第4步,则有时要在第3步的计算中记录一些附加信息,使构造一个最优解变得容易。 接下来的各节利用动态规划方法来求解一些最优化问题。比如包括两个汽车装配线的调度问题,在经过每个装配站后,组装中的汽车可以留在同一条装配线上,或者移动到另外一条装配线。如何通过做一连串的矩阵乘法,使得所做的标量乘法总次数最少。此外,例如如何在已知待搜索的关键字分布的情况下,如何利用动态规划构造最优的二叉查找树,这些算法问题都可利用动态规划方法来解决。(一)最长公共子序列1、具体问题(1)、若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。(2)、给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。(3)、给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。2、分析设序列X={x1,x2,…,xm}和Y={y1,y2,…,yn}的最长公共子序列为Z={z1,z2,…,zk} ,则(1)若xm=yn,则zk=xm=yn,且zk-1是xm-1和yn-1的最长公共子序列。(2)若xm≠yn且zk≠xm,则Z是xm-1和Y的最长公共子序列。(3)若xm≠yn且zk≠yn,则Z是X和yn-1的最长公共子序列。由此可见,2个序列的最长公共子序列包含了这2个序列的前缀的最长公共子序列。因此,最长公共子序列问题具有最优子结构性质。3、子问题的递归结构由最长公共子序列问题的最优子结构性质建立子问题最优值的递归关系。用c[i][j]记录序列和的最长公共子序列的长度。其中, Xi={x1,x2,…,xi};Yj={y1,y2,…,yj}。当i=0或j=0时,空序列是Xi和Yj的最长公共子序列。故此时C[i][j]=0。其它情况下,由最优子结构性质可建立递归关系如下:由于在所考虑的子问题空间中,总共有θ(mn)个不同的子问题,因此,用动态规划算法自底向上地计算最优值能提高算法的效率。计算最优