分析最优解的结构特征

合集下载

算法分析复习题目及答案.

算法分析复习题目及答案.

一、选择题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 )。

《算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末复习题一、选择题1.算法必须具备输入、输出和( D )等4个特性。

A.可行性和安全性 B.确定性和易读性C.有穷性和安全性 D.有穷性和确定性2.算法分析中,记号O表示( B ),记号Ω表示( A )A.渐进下界B.渐进上界C.非紧上界D.紧渐进界3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。

在某台计算机上实现并完成概算法的时间为t秒。

现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题?( B )解题方法:3*2^n*64=3*2^xA.n+8 B.n+6C.n+7 D.n+54.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1,T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。

A.O(logN) B.O(N)C.O(NlogN) D.O(N²logN)5.直接或间接调用自身的算法称为( B )。

A.贪心算法 B.递归算法C.迭代算法 D.回溯法6.Fibonacci数列中,第4个和第11个数分别是( D )。

A.5,89 B.3,89C.5,144 D.3,1447.在有8个顶点的凸多边形的三角剖分中,恰有( B )。

A.6条弦和7个三角形 B.5条弦和6个三角形C.6条弦和6个三角形 D.5条弦和5个三角形8.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。

A.重叠子问题 B.最优子结构性质C.贪心选择性质 D.定义最优解9.下列哪个问题不用贪心法求解( C )。

A.哈夫曼编码问题 B.单源最短路径问题C.最大团问题 D.最小生成树问题10.下列算法中通常以自底向上的方式求解最优解的是( B )。

A.备忘录法 B.动态规划法C.贪心法 D.回溯法11.下列算法中不能解决0/1背包问题的是( A )。

A.贪心法 B.动态规划C.回溯法 D.分支限界法12.下列哪个问题可以用贪心算法求解( D )。

动态规划算法应用场景

动态规划算法应用场景

动态规划算法应用场景动态规划(Dynamic Programming)在数学上属于运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法,同时也是计算机科学与技术领域中一种常见的算法思想。

动态规划算法与我们前面提及的分治算法相似,都是通过组合子问题的解来求解原问题的解。

但是两者之间也有很大区别:分治法将问题划分为互不相交的子问题,递归的求解子问题,再将他们的解组合起来求解原问题的解;与之相反,动态规划应用于子问题相互重叠的情况,在这种情况下,分治法还是会做很多重复的不必要的工作,他会反复求解那些公共的子问题,而动态规划算法则对相同的每个子问题只会求解一次,将其结果保存起来,避免一些不必要的计算工作。

Tips: 这里说到的动态规划应用于子问题相互重叠的情况,是指原问题不同的子问题之间具有相同的更小的子子问题,他们的求解过程和结果完全一样。

动态规划算法更多的时候是用来求解一些最优化问题,这些问题有很多可行解,每个解都有一个值,利用动态规划算法是希望找到具有最优值的解。

接下来,就让我们具体看看动态规划算法的求解思路及相关应用场景。

1. 动态规划算法求解分析1.1 适用问题首先,在利用动态规划算法之前,我们需要清楚哪些问题适合用动态规划算法求解。

一般而言,能够利用动态规划算法求解的问题都会具备以下两点性质:最优子结构:利用动态规划算法求解问题的第一步就是需要刻画问题最优解的结构,并且如果一个问题的最优解包含其子问题的最优解,则此问题具备最优子结构的性质。

因此,判断某个问题是否适合用动态规划算法,需要判断该问题是否具有最优子结构。

Tips: 最优子结构的定义主要是在于当前问题的最优解可以从子问题的最优解得出,当子问题满足最优解之后,才可以通过子问题的最优解获得原问题的最优解。

重叠子问题:适合用动态规划算法去求解的最优化问题应该具备的第二个性质是问题的子问题空间必须足够”小“,也就是说原问题递归求解时会重复相同的子问题,而不是一直生成新的子问题。

动态规划法的基本思想

动态规划法的基本思想

一、动态规划的‎基本思想在比较基本‎的算法设计‎思想里,动态规划是‎比较难于理‎解,难于抽象的‎一种,但是却又十‎分重要。

动态规划的‎实质是分治‎思想和解决‎冗余,因此它与分‎治法和贪心‎法类似,它们都是将‎问题的实例‎分解为更小‎的、相似的子问‎题,但是动态规‎划又有自己‎的特点。

贪心法的当‎前选择可能‎要依赖于已‎经作出的选‎择,但不依赖于‎还未做出的‎选择和子问‎题,因此它的特‎征是由顶向‎下,一步一步地‎做出贪心选‎择,但不足的是‎,如果当前选‎择可能要依‎赖子问题的‎解时,则难以通过‎局部的贪心‎策略达到全‎局最优解。

相比而言,动态规划则‎可以处理不‎具有贪心实‎质的问题。

在用分治法‎解决问题时‎,由于子问题‎的数目往往‎是问题规模‎的指数函数‎,因此对时间‎的消耗太大‎。

动态规划的‎思想在于,如果各个子‎问题不是独‎立的,不同的子问‎题的个数只‎是多项式量‎级,如果我们能‎够保存已经‎解决的子问‎题的答案,而在需要的‎时候再找出‎已求得的答‎案,这样就可以‎避免大量的‎重复计算。

由此而来的‎基本思路是‎,用一个表记‎录所有已解‎决的子问题‎的答案,不管该问题‎以后是否被‎用到,只要它被计‎算过,就将其结果‎填入表中。

比较感性的‎说,其实动态规‎划的思想是‎对贪心算法‎和分治法的‎一种折衷,它所解决的‎问题往往不‎具有可爱的‎贪心实质,但是各个子‎问题又不是‎完全零散的‎,这时候我们‎用一定的空‎间来换取时‎间,就可以提高‎解题的效率‎。

二、动态规划的‎基本步骤动态规划算‎法通常用于‎求解具有某‎种最优性质‎的问题。

在这类问题‎中,可能会有许‎多可行解。

每一个解都‎对应于一个‎值,我们希望找‎到具有最优‎值(最大值或最‎小值)的那个解。

设计一个动‎态规划算法‎,通常可以按‎以下几个步‎骤进行:(1)找出最优解‎的性质,并刻画其结‎构特征。

(2)递归地定义‎最优值。

(3)以自底向上‎的方式计算‎出最优值。

算法设计与分析历年期末试题整理_含答案_

算法设计与分析历年期末试题整理_含答案_

《算法设计与分析》历年期末试题整理(含答案)(1)用计算机求解问题的步骤:1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制(2)算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程(3)算法的三要素1、操作2、控制结构3、数据结构算法具有以下5 个属性:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。

确定性:算法中每一条指令必须有确切的含义。

不存在二义性。

只有一个入口和一个出口可行性:一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。

输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。

输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。

算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。

效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。

一般这两者与问题的规模有关。

经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。

利用迭代算法解决问题,需要做好以下三个方面的工作:一、确定迭代模型。

在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。

二、建立迭代关系式。

所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。

迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。

三、对迭代过程进行控制。

在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。

不能让迭代过程无休止地重复执行下去。

动态规划(生产和存储问题)

动态规划(生产和存储问题)

动态规划(生产和存储问题)一、动态规划法的发展及其研究内容动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法。

20世纪50年代初美国数学家R.E.BELLMAN等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,把多阶段问题转化为一系列的单阶段问题,逐个求解创立了解决这类过程优化问题的新方法——动态规划。

1957年出版的他的名著《Dynamic Proggramming》,这是该领域的第一本著作。

动态规划问世以来,在经济管理·生产调度·工程技术和最优控制等方面得到了广泛的应用。

例如最短路线·库存管理·资源分配·设备更新·组合·排序·装载等问题,采用动态规划法求解比用其他方法更为简便。

二、动态规划法基本概念一个多阶段决策过程最优化问题的动态规划模型通常包括以下几个要素:1.阶段阶段(stage)是对整个过程的自然划分。

通常根据时间顺序或是空间特征来划分阶段,对于与时间,空间无关的“静态”优化问题,可以根据其自然特征,人为的赋予“时段”概念,将静态问题动态化,以便按阶段的顺序解优化问题。

阶段变量一般用k=1.2….n.表示。

1.状态状态(state)是我们所研究的问题(也叫系统)在过个阶段的初始状态或客观条件。

它应能描述过程的特征并且具有无后效性,即当某阶段的状态给定时,这个阶段以后的过程的演变与该阶段以前各阶段的状态无关。

通常还要求状态是可以直接或者是间接可以观测的。

描述状态的变量称为状态变量(State Virable)用s 表示,状态变量的取值集合称为状态集合,用S表示。

变量允许取值的范围称为允许状态集合(set of admissble states).用x(k)表示第k阶段的状态变量,它可以是一个数或者是一个向量。

用X(k)表示第k阶段的允许状态集合。

n 个阶段的决策过程有n+1个状态变量,x(n+1)是x(n)的演变的结果。

递归算法的优缺点

递归算法的优缺点

递归算法得优缺点:3优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法得正确性,因此它为设计算法、调试程序带来很大方便。

3缺点:递归算法得运行效率较低,无论就是耗费得计算时间还就是占用得存储空间都比非递归算法要多。

边界条件与递归方程就是递归函数得二个要素应用分治法得两个前提就是问题得可分性与解得可归并性以比较为基础得排序算法得最坏倩况时间复杂性下界为0(n I o g2n)。

回溯法以深度优先得方式搜索解空间树T,而分支限界法则以广度优先或以最小耗费优先得方式搜索解空间树T。

舍伍德算法设计得基本思想:设A就是一个确定性算法,当它得输入实例为x时所需得计算时间记为tA(x)。

设Xn就是算法A得输入规模为n得实例得全体,则当问题得输入规模为n时,算法A所需得平均时间为这显然不能排除存在x€Xn使得得可能性。

希望获得一个随机化算法B,使得对问题得输入规模为n得每一个实例均有拉斯维加斯(Las Vegas )算法得基本思想:设p(x)就是对输入x调用拉斯维加斯算法获得问题得一个解得概率。

一个正确得拉斯维加斯算法应该对所有输入x均有p(x)>0。

设t(x)就是算法obst in ate找到具体实例x得一个解所需得平均时间,s(x)与e(x)分别就是算法对于具体实例x求解成功或求解失败所需得平均时间,则有:解此方程可得:蒙特卡罗(Monte Carlo)算法得基本思想:设p就是一个实数,且1/2<p<1。

如果一个蒙特卡罗算法对于问题得任一实例得到正确解得概率不小于p,则称该蒙特卡罗算法就是p正确得,且称p1/2就是该算法得优势。

如果对于同一实例,蒙特卡罗算法不会给出2个不同得正确解答,则称该蒙特卡罗算法就是一致得。

线性规划基本定理:如果线性规划问题有最优解,则必有一基本可行最优解。

单纯形算法得特点就是:(1) 只对约束条件得若干组合进行测试,测试得每一步都使目标函数得值增加;(2) 一般经过不大于m或n次迭代就可求得最优解。

练习——简答题

练习——简答题

练习——简答题1.什么是算法?算法有哪些特征?答:算法是求解问题的⼀系列计算步骤。

算法具有有限性、确定性、可⾏性、输⼊性和输出性5个重要特征。

2.算法设计应满⾜的⼏个⽬标答:算法设计应满⾜正确性、可使⽤性、可读性、健壮性和⾼效率与低存储量需求。

3.算法设计的基本步骤答:算法设计的基本步骤是:(1)分析求解问题(2)选择数据结构和算法设计策略(3)描述算法(4)证明算法正确性(5)算法分析各步骤之间存在循环和反复过程。

4.什么是算法复杂性?它主要有哪两个⽅⾯构成?答:算法复杂性是算法运⾏时所需要的计算机资源的量,它包括两个⽅⾯:时间复杂性(需要时间资源的量)和空间复杂性(需要空间资源的量)。

5.分析算法复杂性的意义是什么?算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。

⼀个算法的复杂性的⾼低体现在运⾏该算法所需要的计算机资源的多少上⾯,所需的资源越多,我们就说该算法的复杂性越⾼;反之,所需的资源越低,则该算法的复杂性越低。

6.f(n)=O(g(n))答:f(n)=O(g(n))当且仅当存在正常量c和n0,使当n≥n0时,f(n)≤cg(n),即g(n)为f(n)的上界。

7.f(n)=W(g(n))答:f(n)=W(g(n))当且仅当存在正常量c和n0,使当n≥n0时,f(n)≥cg(n),即g(n)为f(n)的下界。

8.f(n)=Q(g(n))答:f(n)=Q(g(n))当且仅当存在正常量c1、c2和n0,使当n≥n0时,有c1g(n)≤f(n)≤c2g(n),即g(n)与f(n)的同阶。

9.算法的平均情况、最好情况、最坏情况,哪种情况的可操作性最好,最具有实际价值?答:设⼀个算法的输⼊规模为n,Dn是所有输⼊的集合,任⼀输⼊I∈Dn,P(I)是I出现的概率,有 =1,T(I)是算法在输⼊I下所执⾏的基本语句次数,则该算法的平均执⾏时间为:A(n)=算法的最好情况为:G(n)= ,是指算法在所有输⼊I下所执⾏基本语句的最少次数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j 是相容的。即当si≥fj或sj≥fi时,活动i与活动j相容.

问题:选出最大的相容活动子集合。
4
2018/11/5
University of Science and Technology of China
10.1 活动安排问题
2018/11/5 5
University of Science and Technology of China
10.1 活动安排问题
— 证明原问题具有最优子结构性质。即:若已知问题Sij
的最优解Aij中包含活动ak,则在Sij最优解中的针对Sik的 解Aik和针对Skj的解Akj也必定是最优的。(反证法即可 !) — 证明可以根据子问题的最优解来构造出原问题的最优
10.1 活动安排问题

问题: k有j-i-1种选择,每种选择会导致2个完全不同的子问 题产生,因此,动态规划算法的计算量比较大!!! 一个直观想法是直接选择k的值,使得一个子问题为空 ,从而加快计算速度!这就导致了贪心算法!
2018/11/5
8
University of Science and Technology of China
算法基础
主讲人: 吕敏
Email: { lvmin05@ }
Spring 2012,USTC
University
of
Science
and
Technology
of
China
第十讲 贪心算法内容提要:来自 理解贪心算法的概念 掌握贪心算法的基本要素
理解贪心算法与动态规划算法的差异 通过范例学习贪心算法设计策略
2018/11/5 3
University of Science and Technology of China
10.1 活动安排问题

设有n个活动的集合E={1,2,…,n},

每个活动都要求使用同一资源,如演讲会场等,而
在同一时间内只有一个活动能使用这一资源。

每个活动i都有一个要求使用该资源的起始时间si和 一个结束时间fi,且si <fi 。如果选择了活动i,则它在 半开时间区间[si, fi)内占用资源。
10.1 活动安排问题

(用贪心算法) 贪心策略:对输入的活动以其完成时间的非减序排列,算法每次 总是选择具有最早完成时间的相容活动加入最优解集中。直观上 ,按这种方法选择相容活动为未安排活动留下尽可能多的时间。 也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极 大化,以便安排尽可能多的相容活动。
解。一个非空子问题Sij的任意解中必包含了某项活动ak
,而Sij的任一最优解中都包含了其子问题实例Sik和Skj的 最优解(根据最优子结构性质!)。因此,可以构造 出Sij的最大兼容子集。
2018/11/5 6
University of Science and Technology of China
能的k值,就可以找到最好的一个。因此,c[i, j]的完整递归定义
为:
0 c[i, j ] max{c[i, k ] c[k , j ] 1} ik j
2018/11/5 7
Sij Sij
University of Science and Technology of China

(用动态规划方法)
步骤1:分析最优解的结构特征 — 构造子问题空间: Sij={ ak∈S: fi≤sk<fk≤sj} Sij包含了所有与ai和aj相兼容的活动,并且与不迟于ai
结束和不早于aj开始的活动兼容。此外,虚构活动a0和
an+1,其中f0=0, Sn+1=≦。原问题即为寻找S0,n+1中最大 兼容活动子集。
例:设待安排的11个活动的开始时间和结束时间按结束时间的非减 序排列如下:
i S[i] f[i] 1 1 4 2 3 5 3 0 6 4 5 7 5 3 8 6 5 9 7 6 10 8 8 11 9 8 12 10 2 13 11 12 14
2018/11/5
9
University of Science and Technology of China
10.1 活动安排问题

步骤2:递归地定义最优解的值
设c[i, j]为Sij中最大兼容子集中的活动数。当Sij=φ时,c[i, j] = 0 。对于一个非空子集Sij,如果ak在Sij的最大兼容子集中被使用,则 子问题Sik和Skj的最大兼容子集也被使用。从而: c[i, j] = c[i, k] + c[k, j] + 1 由于Sij的最大子集一定使用了i到j中的某个值k,通过检查所有可
10.1 活动安排问题
2018/11/5
10
University of Science and Technology of China
10.1 活动安排问题
Recursive-Activity-Selector(s, f, i, j) { ① m ← i+1; ② while m<j and sm<fi ③ do m ← m+1 ④ if m<j ⑤ then return {am} U Recursive-Activity-Selector(s, f, m, j) ⑥ else return φ } 说明: 1)数组s和f表示活动的开始和结束时间,n个输入活动已经按照活动结束时 间进行单调递增顺序排序; 2)算法②~ ③目的是寻找Sij中最早结束的第一个活动,即找到与ai兼容的 第一个活动am,利用am与Smj的最优子集的并集构成Sij的最优子集; 3)时间复杂度O(n)。
2018/11/5
2
University of Science and Technology of China
10.1 活动安排问题

当一个问题具有最优子结构性质时,可用动态规划法 求解,但有时用贪心算法求解会更加的简单有效。
顾名思义,贪心算法总是作出在当前看来最好的选择

。也就是说贪心算法并不从整体最优考虑,它所作出 的选择只是在某种意义上的局部最优选择。当然,希 望贪心算法得到的最终结果也是整体最优的。虽然贪 心算法不能对所有问题都得到整体最优解,但对许多 问题它能产生整体最优解。如单源最短路经问题,最 小生成树问题等。在一些情况下,即使贪心算法不能 得到整体最优解,其最终结果却是最优解的很好近似 。
相关文档
最新文档