算法:动态规划,贪心算法和NP完全性

动态规划

动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。

动态规划基本步骤

找出最优解的性质,并刻划其结构特征。

递归地定义最优值。

以自底向上的方式计算出最优值。

根据计算最优值时得到的信息,构造最优解

矩阵连乘问题

将矩阵连乘积A_iA_i+1...A_j,简记为A[i:j] ,这里i≤j  

考察计算A[i:j]的最优计算次序。设这个计算次序在矩阵A_k和A_k+1之间将矩阵链断开,i≤k<j,则其相应完全加括号方式为(A_iA_i+1...A_k)(A_k+1A_k+2...A_j)

计算量:A[i:k]的计算量加上A[k+1:j]的计算量,再加上A[i:k]和A[k+1:j]相乘的计算量

矩阵连乘计算次序问题的最优解包含着其子问题的最优解。这种性质称为最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法求解的显著特征。

动态规划算法的基本要素

一、最优子结构

二、重叠子问题

三、备忘录方法

最优二叉搜索树

在表示S的二叉搜索树T中,设存储元素x_i的节点深度为c_i;叶节点(x_j,x_j+1)的节点深度为d_j,则

打不出来

表示在二叉搜索树中进行以此搜索需要的平均比较次数,又称为T的平均路长

最优二叉搜索树问题是指对于S及其存取概率分布(a_0,b_1,a_1,⋯,b_n,a_n),在所有表示S的二叉搜索树中找出一棵具有最小平均路长的二叉搜索树。


贪心算法

贪心算法的设计思想:

(1) 从某一个初始状态出发

依据当前局部的最优决策,而不是全局的最优决策

以满足约束方程为条件,以使得目标函数的值增加最慢或者最快为准则,选择一个最快达到要求的输入元素

贪心法的优势:

算法简单,时间和空间复杂性低.

适于用贪心算法求解的条件

1)贪婪选择性质:所求问题的全局最优解,可以通过一系列局部最优的选择来达到

2)最优子结构:问题的最优解,包含它的子问题的最优解

的选择来达到

例子:

例:从 10 张 10 元、10 张 5 元、10 张 1 元、10 张 5角、10 张 2 角、10 张 1 角的货币中兑付 57 元 8 角。 用集合P={p_1,p_2,⋯,p_60}表示出纳手中的货币,而集合中的元素分别顺序表示货币手中的10张10元,10张5元,…

向量X=(x_1,x_2,⋯,x_60)表示支付给客户的货币

为了尽快付清57元8角,第一步挑出的货币集合为S_1={p_1},局部解为Y_1=(1,0,⋯)     

问题简化为:在集合 P_1={p_2,⋯,p_60}中挑选货币,支付47 元 8 角

在以后的步骤中,可以用同样的方法进行挑选,并能得到问题的全局最优解

付给客户的货币集合的最优解是

S_n={p_1,p_2,p_3,p_4,p_5,p_11,p_21,p_22,p_31,p_41,p_51}

      第一步所简化了的子问题的最优解是

S_n−1={p_2,p_3,p_4,p_5,p_11,p_21,p_22,p_31,p_41,p_51}

      所以,出纳员付钱问题具有最优子结构性质

S_n−1⊂  S_n

S_n−1∪{p_1}=S_n


NP完全性

----就是易解的问题与难解的问题

如果存在函数 f :N®N使得, 对任意的规模为 n的实例 I, 算法 A对 I 的运算在 f(n)步内停止, 则称算法 A的时间复杂度为 f(n).

多项式时间算法:  以多项式为时间复杂度.

易解的问题:  有多项式时间算法.

难解的问题:  不存在多项式时间算法.

易解的问题. 如排序、最小生成树、单源最短路径等

已证明的难解问题.

一类是不可计算的, 即根本不存在求解算法, 如希尔伯特第十问题¾¾丢番图方程是否有整数解.  

另一类是有算法, 但至少需要指数时间, 或指数空间, 甚至更多的时间或更大的空间. 如带幂运算的正则表达式的全体性, 即任给字母表 A上的带幂运算的正则表达式 R, 问: áRñ=A*?  这个问题至少需要指数空间.    

既没有找到多项式时间算法、又没能证明是难解的问题. 如哈密顿回路问题、货郎问题、背包问题等

判定问题

所有多项式时间可解的问题组成的问题类称作 P类.

设判定问题 P = < D,Y >, 如果存在两个输入变量的多项式时间算法 A和多项式 p, 对每一个实例 IÎD, IÎY 当且仅当存在 t, | t |£ p(|I|), 且 A对输入 I 和 t 输出“Yes”,  则称P 是多项式时间可验证的,  A是P 的多项式时间验证算法,  而当 IÎY 时, 称 t  是 IÎY 的证据.

由所有多项式时间可验证的判定问题组成的问题类称作NP类.

NP 完全问题是 NP 中最难的问题.

合式公式  是由变元, 逻辑运算符以及圆括号按照一定的规则组成的表达式. 变元和它的否定称作文字. 有限个文字的析取称作简单析取式. 有限个简单析取式的合取称作合取范式. 给定每一个变元的真假值称作一个赋值. 如果赋值 t 使得合式公式 F 为真, 则称 t 是 F 的成真赋值. 如果 F 存在成真赋值, 则称 F 是可满足的.   

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值