算法设计与分析第4章

合集下载

算法设计与分析知到章节答案智慧树2023年天津大学

算法设计与分析知到章节答案智慧树2023年天津大学

算法设计与分析知到章节测试答案智慧树2023年最新天津大学第一章测试1.下列关于效率的说法正确的是()。

参考答案:提高程序效率的根本途径在于选择良好的设计方法,数据结构与算法;效率主要指处理机时间和存储器容量两个方面;效率是一个性能要求,其目标应该在需求分析时给出2.算法的时间复杂度取决于()。

参考答案:问题的规模;待处理数据的初态3.计算机算法指的是()。

参考答案:解决问题的有限运算序列4.归并排序法的时间复杂度和空间复杂度分别是()。

参考答案:O(nlog2n);O(n)5.将长度分别为m,n的两个单链表合并为一个单链表的时间复杂度为O(m+n)。

()参考答案:错6.用渐进表示法分析算法复杂度的增长趋势。

()参考答案:对7.算法分析的两个主要方面是时间复杂度和空间复杂度的分析。

()参考答案:对8.某算法所需时间由以下方程表示,求出该算法时间复杂度()。

参考答案:O(nlog2n)9.下列代码的时间复杂度是()。

参考答案:O(log2N)10.下列算法为在数组A[0,...,n-1]中找出最大值和最小值的元素,其平均比较次数为()。

参考答案:3n/2-3/2第二章测试1.可用Master方法求解的递归方程的形式为()。

参考答案:T(n)=aT(n/b)+f(n) , a≥1, b>1, 为整数, f(n)>0.2.参考答案:对3.假定,, 递归方程的解是. ( )参考答案:对4.假设数组A包含n个不同的元素,需要从数组A中找出n/2个元素,要求所找的n/2个元素的中点元素也是数组A的中点元素。

针对该问题的任何算法需要的时间复杂度的下限必为。

( )参考答案:错5.使用Master方法求解递归方程的解为().参考答案:6.考虑包含n个二维坐标点的集合S,其中n为偶数,且所有坐标点中的均不相同。

一条竖直的直线若能把S集合分成左右两部分坐标点个数相同的子集合,则称直线L为集合S的一条分界线。

若给定集合S,则可在时间内找到这条分界线L。

算法设计与分析第三版第四章课后习题答案

算法设计与分析第三版第四章课后习题答案

算法设计与分析第三版第四章课后习题答案4.1 线性时间选择问题习题4.1问题描述:给定一个长度为n的无序数组A和一个整数k,设计一个算法,找出数组A中第k小的元素。

算法思路:本题可以使用快速选择算法来解决。

快速选择算法是基于快速排序算法的思想,通过递归地划分数组来找到第k小的元素。

具体步骤如下: 1. 选择数组A的一个随机元素x作为枢纽元。

2. 使用x将数组划分为两个子数组A1和A2,其中A1中的元素小于等于x,A2中的元素大于x。

3. 如果k等于A1的长度,那么x就是第k小的元素,返回x。

4. 如果k小于A1的长度,那么第k小的元素在A1中,递归地在A1中寻找第k小的元素。

5. 如果k大于A1的长度,那么第k小的元素在A2中,递归地在A2中寻找第k-A1的长度小的元素。

6. 递归地重复上述步骤,直到找到第k小的元素。

算法实现:public class LinearTimeSelection {public static int select(int[] A, int k) { return selectHelper(A, 0, A.length - 1, k);}private static int selectHelper(int[] A, int left, int right, int k) {if (left == right) {return A[left];}int pivotIndex = partition(A, left, righ t);int length = pivotIndex - left + 1;if (k == length) {return A[pivotIndex];} else if (k < length) {return selectHelper(A, left, pivotInd ex - 1, k);} else {return selectHelper(A, pivotIndex + 1, right, k - length);}}private static int partition(int[] A, int lef t, int right) {int pivotIndex = left + (right - left) / 2;int pivotValue = A[pivotIndex];int i = left;int j = right;while (i <= j) {while (A[i] < pivotValue) {i++;}while (A[j] > pivotValue) {j--;}if (i <= j) {swap(A, i, j);i++;j--;}}return i - 1;}private static void swap(int[] A, int i, int j) {int temp = A[i];A[i] = A[j];A[j] = temp;}}算法分析:快速选择算法的平均复杂度为O(n),最坏情况下的复杂度为O(n^2)。

算法设计与分析第04章 贪心算法PPT课件

算法设计与分析第04章 贪心算法PPT课件
9
4.1 活动安排问题
若被检查的活动i的开始时间Si小于最近选择的活动j 的结束时间fi,则不选择活动i,否则选择活动i加入集 合A中。
贪心算法并不总能求得问题的整体最优解。但对 于活动安排问题,贪心算法greedySelector却总能求 得的整体最优解,即它最终所确定的相容活动集合A的 规模最大。这个结论可以用数学归纳法证明。
•}
6
4.1 活动安排问题
由于输入的活动以其完成时间的非减序排列,所 以算法greedySelector每次总是选择具有最早完成 时间的相容活动加入集合A中。直观上,按这种方法 选择相容活动为未安排活动留下尽可能多的时间。也 就是说,该算法的贪心选择的意义是使剩余的可安排 时间段极大化,以便安排尽可能多的相容活动。
算法greedySelector的效率极高。当输入的活 动已按结束时间的非减序排列,算法只需O(n)的时间 安排n个活动,使最多的活动能相容地使用公共资源。 如果所给出的活动未按非减序排列,可以用O(nlogn) 的时间重排。
7
4.1 活动安排问题
例:设待安排的11个活动的开始时间和结束时间按结 束时间的非减序排列如下:
13
4.2 贪心算法的基本要素
3.贪心算法与动态规划算法的差异
贪心算法和动态规划算法都要求问题具有最优子结构 性质,这是2类算法的一个共同点。但是,对于具有最 优子结构的问题应该选用贪心算法还是动态规划算法 求解?是否能用动态规划算法求解的问题也能用贪心算 法求解?下面研究2个经典的组合优化问题,并以此说 明贪心算法与动态规划算法的主要差别。
11
4.2 贪心算法的基本要素
1.贪心选择性质
所谓贪心选择性质是指所求问题的整体最优解可以通 过一系列局部最优的选择,即贪心选择来达到。这是 贪心算法可行的第一个基本要素,也是贪心算法与动 态规划算法的主要区别。

中科院计算机算法设计与分析各章作业+历年习题

中科院计算机算法设计与分析各章作业+历年习题

5.下面那些规则是正确的?为什么? 1). f (n) O( F (n)), g (n) O(G(n)) f (n) / g (n) O( F (n) / G(n)) ;错 2). f (n) O( F (n)), g (n) O(G(n)) f (n) / g (n) ( F (n) / G(n)) ;错 3). f (n) O( F (n)), g (n) O(G(n)) f (n) / g (n) ( F (n) / G(n)) ;错 4). f (n) ( F (n)), g (n) (G(n)) f (n) / g (n) ( F (n) / G(n)) ;错 5). f (n) ( F (n)), g (n) (G(n)) f (n) / g (n) ( F (n) / G(n)) 。错 6).
7
对顶点个数进行归纳。 当顶点数|v(D)|=2 时,因为每个点的入度和出度相等,易得构成有向 Euler 环游。 假设顶点数|v(D)|=k 时结论成立,则 当顶点数|v(D)|=k + 1 时,任取 v∈v(D).设 S={以 v 为终点的边},K={以 v 为始点的边},因为 v 的入度和出度相等,故 S 和 K 中边数相等。记 G=D-v.对 G 做如下操作: 任取 S 和 K 中各一条边 e1、e2 ,设在 D 中 e1 v1v , e2 vv2 ,则对 G 和 S 做如下操作 G G v1v2 , S S {e2} ,重复此步骤直到 S 为空。这个过程最终 得到的 G 有 k 个顶点,且每个顶点的度与在 G 中完全一样。由归纳假设,G 中 存在有向 Euler 环游,设为 C。在 G 中从任一点出发沿 C 的对应边前行,每当遇 到上述添加边 v1v2 时, 都用对应的两条边 e1, e2 代替, 这样可以获得有向 Euler 环游。 3)G 是至少有三个顶点的无向图,则 G 包含 Euler 环游等价于 G 中无奇度顶 点。 (即任意顶点的度为偶数) 。 3. 设 G 是具有 n 个顶点和 m 条边的无向图, 如果 G 是连通的, 而且满足 m = n-1, 证明 G 是树。

第4章 算法与程序设计-大学计算机—计算思维视角-刘添华-清华大学出版社

第4章 算法与程序设计-大学计算机—计算思维视角-刘添华-清华大学出版社

算法的描述-流程图
• 流程图从开始符开始,以结束符结束。 顾名思义,就是用来直观地描述一个过程、 算法的具体步骤。 • 同一个算法可以用不同的表示方法描述。 例4-2的算法用流程图方法表示,如图所示。
算法的描述-N-S图
1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图,并以他们的 姓名的第一个字母命名为N-S图。
算法的描述-伪代码
例4-2求最大数的算法用伪代码表示如下所示。
“伪代码”是用介于自然语言和计算机
Begin /*算法开始*/
语言之间的文字和符号来描述算法。“伪”
N=1 Input A Max=A 当 N<=10 则
意味着假,因此用伪代码写的算法不能被计 算机所理解,但便于转换成某种语言编写的 计算机程序。
第5步:输出计数器的值。
例4-1的算法满足算法的五个特征。
算法的评价
评价算法,是为了提高程序的效率、不断优化算法。 (1)时间复杂度
时间复杂度是指计算机执行一个算法在时间上的消耗度量。 (2)空间复杂度
空间复杂度是指在—个算法的运行过程中,对临时耗费的存储空间的度量。
时间复杂度和空间复杂度往往是相互矛盾的,通常要降低算法的执行时间就要 以使用更多的空间作为代价,而要节省空间则往往要以增加算法的执行时间作为成本, 二者很难兼顾。
算法的描述-流程图
美国国家标准化协会ANSI(American National Standard Institute) 规定了一些 常用的流程图符号:
起止框
判断框
处理框
输入/输出框
注释框
流向线
连接点
流程图表示的算法形象、直观,易于理解,能够清楚地显示出各个框之间的逻 辑关系和执行流程,便于交流,因此被广泛使用,成为程序员们交流的重要手段。 当然,这种表示法也存在着占用篇幅大、画图费时、不易修改等缺点。

算法设计与分析课程设计

算法设计与分析课程设计

算法设计与分析 课程设计一、课程目标知识目标:1. 让学生掌握基本的算法设计原理,包括贪心算法、分治算法、动态规划等,并能够运用这些原理解决实际问题。

2. 使学生了解不同算法的时间复杂度和空间复杂度分析方法,能够评估算法的效率。

3. 引导学生理解算法的优缺点,并能针对具体问题选择合适的算法进行解决。

技能目标:1. 培养学生运用所学算法原理设计解决实际问题的算法,提高编程实现能力。

2. 培养学生通过分析算法的时间复杂度和空间复杂度,对算法进行优化和改进的能力。

3. 提高学生运用算法思维解决问题的能力,培养逻辑思维和创新能力。

情感态度价值观目标:1. 激发学生对算法学习的兴趣,培养主动探索、积极思考的学习态度。

2. 培养学生团队协作精神,学会与他人分享算法设计心得,共同解决问题。

3. 使学生认识到算法在现实生活中的重要性,提高对计算机科学的认识和兴趣。

课程性质:本课程为计算机科学领域的一门核心课程,旨在培养学生的算法设计与分析能力。

学生特点:学生已经具备一定的编程基础和逻辑思维能力,但对复杂算法的设计与分析仍需加强。

教学要求:结合实际案例,注重理论与实践相结合,引导学生通过自主探究、团队合作等方式,达到课程目标。

在教学过程中,注重分解目标,将目标具体化为可衡量的学习成果,以便于教学设计和评估。

二、教学内容1. 算法基本原理:- 贪心算法:介绍贪心算法原理及其应用场景,结合实际案例进行分析。

- 分治算法:阐述分治算法的设计思想及其应用,举例说明。

- 动态规划:讲解动态规划的基本概念、原理和应用,分析典型问题。

2. 算法分析:- 时间复杂度分析:介绍大O表示法,分析常见算法的时间复杂度。

- 空间复杂度分析:阐述空间复杂度的概念,分析常见算法的空间复杂度。

3. 算法优化与改进:- 针对典型问题,分析现有算法的优缺点,探讨优化方向。

- 引导学生通过算法分析,提出改进方案,并进行实现。

4. 教学大纲安排:- 第一章:算法基本原理(贪心算法、分治算法、动态规划)- 第二章:算法分析(时间复杂度、空间复杂度)- 第三章:算法优化与改进5. 教材章节和内容列举:- 教材第3章:贪心算法及其应用- 教材第4章:分治算法及其应用- 教材第5章:动态规划及其应用- 教材第6章:算法分析(时间复杂度、空间复杂度)- 教材第7章:算法优化与改进教学内容确保科学性和系统性,结合实际案例进行讲解,使学生能够逐步掌握算法设计与分析的方法。

算法设计与分析知识点

算法设计与分析知识点

第一章算法概述1、算法的五个性质:有穷性、确定性、能行性、输入、输出。

2、算法的复杂性取决于:(1)求解问题的规模(N) , (2)具体的输入数据(I),( 3)算法本身的设计(A),C=F(N,I,A。

3、算法的时间复杂度的上界,下界,同阶,低阶的表示。

4、常用算法的设计技术:分治法、动态规划法、贪心法、回溯法和分支界限法。

5、常用的几种数据结构:线性表、树、图。

第二章递归与分治1、递归算法的思想:将对较大规模的对象的操作归结为对较小规模的对象实施同样的操作。

递归的时间复杂性可归结为递归方程:1 11= 1T(n) <aT(n—b) + D(n) n> 1其中,a是子问题的个数,b是递减的步长,~表示递减方式,D(n)是合成子问题的开销。

递归元的递减方式~有两种:1、减法,即n -b,的形式。

2、除法,即n / b,的形式。

2、D(n)为常数c:这时,T(n) = 0(n P)。

D(n)为线形函数cn:r O(n) 当a. < b(NT(n) = < Ofnlog^n) "n = blljI O(I1P)二"A bl吋其中.p = log b a oD(n)为幕函数n x:r O(n x) 当a< D(b)II JT{ii) = O(ni1og b n) 'ia = D(b)ll].O(nr)D(b)lHJI:中,p= log b ao考虑下列递归方程:T(1) = 1⑴ T( n) = 4T(n/2) +n⑵ T(n) = 4T(n/2)+n2⑶ T(n) = 4T(n/2)+n3解:方程中均为a = 4,b = 2,其齐次解为n2。

对⑴,T a > b (D(n) = n) /• T(n) = 0(n);对⑵,•/ a = b2 (D(n) = n2) T(n) = O(n2iog n);对⑶,•/ a < b3(D(n) = n3) - T(n) = 0(n3);证明一个算法的正确性需要证明两点:1、算法的部分正确性。

算法分析与设计智慧树知到答案章节测试2023年黑龙江工程学院

算法分析与设计智慧树知到答案章节测试2023年黑龙江工程学院

第一章测试1.算法就是一组有穷的规则,它们规定了解决某一特定类型问题的一系列运算。

()A:对B:错答案:A2.计算机的资源最重要的是内存和运算资源。

因而,算法的复杂性有时间和空间之分。

()A:对B:错答案:A3.时间复杂度是指算法最坏情况下的运行时间。

()A:对B:错答案:B4.下面关于算法的说法中正确的是。

(1)求解某一问题的算法是唯一的。

(2)算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。

(3)算法的每一条指令是清晰无歧义的。

(4)算法可以用某种程序设计语言具体实现,所以算法和程序是等价的。

()A:(2)(3)B:(1)(3)C:(1)(2)D:(2)(4)答案:A5.描述算法的基本方法有。

(1)自然语言(2)流程图(3)伪代码(4)程序设计语言()A:(1)(2)(3)B:(1)(3)(4)C:(1)(2)(3)(4)D:(2)(3)(4)答案:C6.算法分析是()A:将算法用某种程序设计语言恰当地表示出来B:证明算法对所有可能的合法出入都能算出正确的答案C:对算法需要多少计算时间和存储空间作定量分析D:在抽象数据数据集合上执行程序,以确定是否产生错误结果答案:C7.算法是由若干条指令组成的有穷序列,而且满足以下叙述中的性质。

(1)输入:有0个或多个输入(2)输出:至少有一个输出(3)确定性:指令清晰、无歧义(4)有限性:指令执行次数有限,而且执行时间有限()A:(1)(2)(3)B:(1)(2)(4)C:(1)(2)(3)(4)D:(1)(3)(4)答案:C8.下面函数中增长率最低的是()A:n2B:log2nC:nD:2n答案:B9.下面属于算法的特性有( )。

A:有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。

B:输入:有0个或多个外部量作为算法的输入。

C:确定性:组成算法的每条指令是清晰,无歧义的。

D:输出:算法产生至少一个量作为输出。

答案:ABCD10.当m为24,n为60时,使用欧几里得算法求m和n的最大公约数,需要进行()次除法运算。

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

GreedySelector(n, s[], f[], A[]) A[1] = true //最优解以e1开始 j = 1 //标记新加入的活动 for i = 2 to n do //扫描剩余活动 if s[i] ≥ f[j] //是否可行 若活动i的开始时间 小于新加入的活动j A[i] = true 的结束时间,则不选 择活动i,否则选择 j = i //更新 新加入的活动 活动i加入集合A中 else A[i] = false //扫描下一个活动
v0 10 v1 30 15 20 v2 10 v3 10 4 v4
应用:OSPF(Open Shortest Path First)IP 路由协议,通过该算法可以得到有关网 络节点的最短路径树,然后由最短路径 优先树得到路由表。
• Dijkstra’s algorithm
– It is a graph search algorithm that solves the single-source shortest path problem for a graph with non-negative edge path costs, producing a shortest path tree. – Shortest paths from v0 to all of the other vertices are found one by one. 30 15 20
A(1) A(2) … A(n)
贪心选择策略下的部分最优解
贪心算法的基本思想
• 贪心算法的特点是每个阶段所作的选择都是局部 最优的,它期望通过所作的局部最优选择产生出 一个全局最优解。
– 动态规划:每个阶段产生的都是全局最优解
• 第i阶段的“全局”: 问题空间为(a1, … , ai) • 第i阶段的“全局最优解”:问题空间为 (a1, … , ai)时的最优解

30 30 30 30
∞ ∞
• 设E={e1,e2…en}是按结束时间排序的活动集合,则 e1具有最早的结束时间。 • 证明:每次选择结束时间最早的活动能够得到整 体最优解,即该问题具有贪心选择性质。
– 首先,证明该问题有一个最优解以贪心选择开始,即 该最优解中包含e1。
• 设A是所给活动安排问题的一个最优解,且A中活动也按结束时 间非减序排列,A中的第一个活动是ek。 • 若k=1,则A就是一个以贪心选择开始的最优解。 • 若k>1,则我们设B=A-{ek}∪{e1}。由于f1≤fk,且A中活动是互为 相容的,故B中的活动也是互为相容的。又由于B中活动个数与 A中活动个数相同,且A是最优的,故B也是最优的(最大相容 子集合)。
i =1
n
i i
≤c
• 贪心选择策略
– 重量最轻者先装
• 证明采用重量最轻者先装能够得到整体最优解,即 该问题具有贪心选择性质。
– 设集装箱已按其重量从小到大排序,且(x1,x2,…,xn)是最优 装载问题的一个最优解。
设k = min{i | xi = 1}
1≤i ≤ n
x1 0
– 当k=1时,(x1,x2,…,xn)是一个满足贪心选择性质的最优解 – 当k>1时 yi=xi y1 yi=xi yk xk … All 0 1 … 1 … All 0 0 …
第四章 贪心算法
(Greedy)
背包问题
• 在选择物品i装入背包时,可以选择物品i的 一部分,而不一定要全部装入。
约束条件
∑w x
i =1
n
i i
=c
n
装满背包
目标函数 解向量
d = max ∑ vi xi
i =1
X = {x1 , x2 ,..., xn }
Xi ∈[0,1]

– – –
如何选择物品装入的优先级(贪心策略)?
贪心选择性质
• 对于一个具体问题,要确定它是否具有贪心选择 性质,我们必须证明每一步所做的贪心选择最终 导致问题的一个整体最优解。
– 数学归纳法 • 证明最优解以贪心选择开始(即第一步)。首先考 察问题的一个整体最优解,并证明可修改这个最优 解,使其以贪心选择开始。 • 假设第i步贪心选择能够得到整体最优解,那么证明 第i+1步贪心选择也能得到整体最优解。
v0 10 v1
v2 10 v3
4 v4 10
v0 10 v1 15 20
v2
4 v4
v3
v0 10
30 15
v2 10 v3
4 v4 10
• 贪心选择策略
v1
– 设置一个顶点集合S并不断地作贪心选择来扩充 这个集合。一个顶点属于集合S当且仅当从源到 该顶点的最短路径长度已知。
• 设u是G的某一个顶点,我们把从源到u且中间只经 过S中顶点的路称为从源到u的特殊路径。
价值贪心策略:优先选择价值最大的物品。
• • 如果所选择的物品重量很大,使得背包载重的消耗速度太快 不能保证目标函数的值快速增加
重量贪心策略:优先选择重量最小的物品。 价值重量比策略:将物品按单位重量价值降序排序, 从第一项开始装背包,然后是第二项,依次类推,尽 可能的多放,直到装满背包。
• 优先选择既使目标函数的值增加最快,又使背包载重的消耗 较慢的物品
– 因此,(y1,y2,…,yn)是一个满足贪心选择性质的最优解。
• 证明原问题的最优解包含了子问题的最优 解,即该问题具有最优子结构性质。
– 设(x1,x2,…,xn)是最优装载问题的一个满足贪心选 择性质的最优解,则x1=1,(x2,…,xn)是轮船载重 为c-w1且待装船集装箱为{2,3,…,n}时相应最优装 载问题的一个最优解。
• 在动态规划算法中,每步所做的选择往往依赖于 相关子问题的解,因而只有在解出相关子问题后, 才能做出选择。
根据子问题的解进行选择
• 而在贪心算法中,仅在当前状态下做出最好选择, 即局部最优选择,然后再去解做出这个选择后产 生的相应的子问题。
先选择,再得到子问题的解
动态规划的解题框架
贪心算法的解题框架
贪心算法的基本要素
• 贪心选择性质:所求问题的全局最优解可 以通过一系列局部最优的选择(即贪心选 择)来达到。
– 这是贪心算法与动态规划算法的主要区别。
• 最优子结构性质:当原问题的最优解包含 子问题的最优解时,称此问题具有最优子 结构性质。
– 最优子结构性质是该问题可用动态规划算法或 贪心算法求解的关键特征。
– 然后,假设第i步贪心选择能够得到整体最优解,那么 证明第i+1步贪心选择也能得到整体最优解。
• 证明:原问题的最优解包含子问题的最优解,即 该问题具有最优子结构性质。
– 在贪心选择了e1后,原问题就简化为对E中所有与e1相 容的活动进行活动安排的子问题。即若A是原问题的一 个最优解,则A’=A-{e1}是活动安排问题E’={i∈E: si≥f1}的 一个最优解。 – 如若不然,假设我们找到E’的一个解B’,它包含比A’更 多的活动,则将e1加入到B’中将产生E的一个解B,它包 含比A更多的活动。这与A的最优性矛盾。
活动安排问题
• 要求高效地安排一系列争用某一公共资源(例如 会议室)的活动(使尽可能多的活动能兼容使用 公共资源)。
– 设有n个活动的集合E={e1,e2…en},其中每个活动都要求 使用同一资源,而在同一时间内只有一个活动能使用 这一资源。每个活动i都有一个要求使用该资源的起始 时间si和一个结束时间fi,且si<fi。如果选择了活动i,则 它在半开时间区间[si,fi)内占用资源。 – 若区间[si,fi)与区间[sj,fj)不相交,则称ei和ej是相容的。 也就是说,当si≥fj或sj≥fi时,活动i和活动j相容。 • 活动安排问题就是要在所给的活动集合中选出最大的相容 活动子集合。
最优装载
• 有一批集装箱要装上一艘载重为c的轮船。 其中集装箱i的重量为wi。最优装载问题要 求确定,在装载体积不受限制的情况下, 应如何装载才能将尽可能多的集装箱装上 轮船。 • 形式化描述为: xi ∈ {0,1}, 1 ≤ i ≤ n 解向量
max ∑ xi
i =1 n
目标函数 约束条件
∑w x
设u为最近加入S的顶点,L(w)表示当前发现的从v0到w的最短距 离,c(u,w)表示u到w的边的长度,则L(w)需要依照以下公式更新: L(w)=min(L(w), L(u)+c(u,w)) S v0 v0, v1 v0,v1,v2 v0,v1,v2,v4 v0,v1,v2,v4,v3 u v1 v2 v4 v3 L(v1) 10 10 10 10 10 L(v2) 30 25 25 25 25 L(v3) L(v4)
• 贪心选择策略
– – – – – 选择具有最早开始时间的活动? 选择具有最早结束时间的活动? 选择具有最少占用时间的活动? 选择覆盖未选择活动最少的活动? ……
• 直观上,每次选择具有最早结束时间的相容活动,使剩余 的可安排时间段极大化,以便安排尽可能多的相容活动。 • 对于活动安排问题,每次选择具有最早结束时间的活动能 够得到整体最优解,即它最终所确定的相容活动集合A的 规模最大。
各活动的起始时间 和结束时间存储于 数组s和f中且按结束 时间的非减序排列
例题
设待安排的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
8 8
9 8
10 11 2 12
10 11 12 13 14
• 算法分析
– 算法的效率很高。当输入的活动已按结束时间 非减序排列时,算法只需O(n)的时间安排n个活 动,使最多的活动能相容地使用公共资源。如 果所给出的活动未按非减序排列,可以用 O(nlogn)的时间预排序(pre-sorting)。
相关文档
最新文档