第章近似算法

合集下载

算法设计与分析课程教学大纲

算法设计与分析课程教学大纲

算法设计与分析课程教学大纲【适用专业】计算机科学与技术【课时】理论课时:32【学分】 2【课程性质、目标和要求】《算法设计与分析》是计算机科学与技术专业的专业课。

无论是计算科学还是计算实践,算法都在其中扮演着重要角色。

本课程的教学目的是讲授在计算机应用中常常遇到的实际问题的解法,讲授设计和分析各种算法的基本原理、方法和技术,培养学生对算法复杂性进行正确分析的能力。

课程基本要求是⑴掌握算法分析的基本概念和理论。

⑵掌握算法设计技术和分析算法以及算法复杂性。

【教学时间安排】本课程计 2 学分,理论课时32, 学时分配如下:【教学内容要点】第一章算法引论一、学习目的要求1.了解算法的计算复杂性分析方法2.理解算法分析的基本理论3.掌握算法分析的基本概念二、主要教学内容1. 算法的基本概念2. 表达算法的抽象机制3. 采用Java语言与自然语言相结合的方式描述算法的方法4. 算法的计算复杂性分析方法第二章递归与分治策略一、学习目的要求1.理解典型范例中递归与分治策略应用技巧2.掌握递归与分治策略3.掌握数学归纳法证明算法正确性方法二、主要教学内容1. 递归的概念2. 分治法的基本思想3. 二分搜索技术4. 大整数的乘法5. Strassen阵乘法6. 棋盘覆盖7. 合并排序8. 快速排序9. 线性时间选择10. 最接近点对问题11. 循环赛日程表第三章动态规划一、学习目的要求1.理解典型范例中动态规划算法的设计思想2.掌握动态规划算法的基本要求以及算法的设计要点二、主要教学内容1. 矩阵连乘问题2. 动态规划算法的基本要素3. 最长公共子序列4. 最大子段和5. 凸多边形最优三角剖分6. 多边形游戏7. 图像压缩8. 电路布线9. 流水作业调度10. 0—l背包问题11. 最优二叉搜索树12. 动态规划加速原理三、课堂讨论选题1. 最长公共子序列2. 0—l背包问题第四章贪心算法一、学习目的要求1.了解贪心算法的理论基础及基本要素2. 理解典型范例中贪心算法的设计思想3. 掌握贪心算法的设计要点二、主要教学内容1. 活动安排问题2. 贪心算法的基本要素3. 最优装载4. 哈夫曼编码5. 单源最短路径6. 最小生成树7. 多机调度问题8. 贪心算法的理论基础三、课堂讨论选题1. 最优装载2. 单源最短路径第五章回溯法一、学习目的要求1.理解回溯法的效率分析方法2.掌握回溯法的算法框架和应用技巧二、主要教学内容1. 回溯法的算法框架2. 装载问题3. 批处理作业调度4. 符号三角形问题5. n后问题6. 0—l背包问题7. 最大团问题8. 图的m着色问题9. 旅行售货员问题10. 圆排列问题11. 电路板排列问题12. 连续邮资问题13. 回溯法的效率分三、课堂讨论选题1. 0—l背包问题2. 图的m着色问题第六章分支限界法一、学习目的要求1.理解分支限界法的基本思想2.掌握典型范例中分支限界法的应用技巧二、主要教学内容1. 分支限界法的基本思想2. 单源最短路径问题3. 装载问题4. 布线问题5. 0-1背包问题6. 最大团问题7. 旅行售货员问题8. 电路板排列问题9. 批处理作业调度三、课堂讨论选题1. 0-1背包问题2. 批处理作业调度第七章概率算法一、学习目的要求1.理解概率算法的基本思想2.掌握典型范例中概率算法的应用技巧二、主要教学内容1. 随机数2. 数值概率算法3. 舍伍德算法4. 拉斯维加斯算法5. 蒙特卡罗算法第八章 NP完全性理论一、学习目的要求1.了解P类与NP类问题2.了解典型的NP完全问题二、主要教学内容1. 计算模型2. P类与NP类问题3. NP完全问题4. 一些典型的NP完全问题第九章近似算法一、学习目的要求1.掌握近似算法的基本思想2.掌握常用近似算法的应用二、主要教学内容1. 近似算法的性能2. 顶点覆盖问题的近似算法3. 旅行售货员问题近似算法4. 集合覆盖问题的近似算法5. 子集和问题的近似算法第十章算法优化策略一、学习目的要求1.掌握算法优化策略2.掌握算法优化的基本方法二、主要教学内容1. 算法优化策略的比较与选择2. 动态规划加速原理3. 问题的算法特征4. 优化数据结构5. 优化搜索策略【教学(实验)内容要点】算法设计与分析实验是算法设计与分析课的一个实践性教学环节。

算法分析与设计习题集整理

算法分析与设计习题集整理

算法分析与设计习题集整理第一章算法引论一、填空题:一、算法运行所需要的计算机资源的量,称为算法复杂性,主要包括时间复杂度和空间复杂度。

二、多项式10()mm A n a n a n a =+++的上界为O(n m )。

3、算法的大体特征:输入、输出、肯定性、有限性。

4、如何从两个方面评价一个算法的好坏:时间复杂度、空间复杂度。

五、计算下面算法的时间复杂度记为: O(n 3) 。

for(i=1;i<=n;i++)for(j=1;j<=n;j++) {c[i][j]=0; for(k=1;k<=n;k++) c[i][j]= c[i][j]+a[i][k]*b[k][j]; }六、描述算法常常利用的方式:自然语言、伪代码、程序设计语言、流程图、盒图、PAD 图。

7、算法设计的大体要求:正确性 和 可读性。

八、计算下面算法的时间复杂度记为: O(n 2) 。

for (i =1;i<n; i++){ y=y+1; for (j =0;j <=2n ;j++ ) x ++; }九、计算机求解问题的步骤:问题分析、数学模型成立、算法设计与选择、算法表示、算法分析、算法实现、程序调试、结果整理文档编制。

10、算法是指解决问题的 方式或进程 。

二、简答题:1、依照时间复杂度从低到高排列:O( 4n 2)、O( logn)、O( 3n )、O( 20n)、O( 2)、O( n 2/3), O( n!)应该排在哪一名?答:O( 2),O( logn),O( n 2/3),O( 20n),O( 4n 2),O( 3n),O( n!)2、什么是算法?算法的特征有哪些?答:1)算法:指在解决问题时,依照某种机械步骤必然可以取得问题结果的处置进程。

通俗讲,算法:就是解决问题的方式或进程。

2)特征:1)算法有零个或多个输入;2)算法有一个或多个输出; 3)肯定性 ; 4)有穷性3、给出算法的概念?何谓算法的复杂性? 计算下例在最坏情况下的时间复杂性?for(j=1;j<=n;j++) (1)for(i=1;i<=n;i++) (2) {c[i][j]=0; (3) for(k=1;k<=n;k++) (4) c[i][j]= c[i][j]+a[i][k]*b[k][j]; } (5)答:1)概念:指在解决问题时,依照某种机械步骤必然可以取得问题结果的处置进程。

算法分析与设计概论

算法分析与设计概论

9
How to Study Algorithm?
“Sometimes we have experiences, and sometimes not. Therefore, the better way is to learn more."
10
1.1 算法与程序
算法:是满足下述性质的指令序列。
输 入:有零个或多个外部量作为算法的输入。 输 出:算法产生至少一个量作为输出。 确定性:组成算法的每条指令清晰、无歧义。 有限性:算法中每条指令的执行次数有限,执行 每条指令的时间也有限。
1) 第一种解法:
输入:所购买的三种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[ ],m[ ],s[ ] 1. void chicken_question(int n,int &k,int g[ ],int m[ ],int s[ ]) 2. { int a,b,c; 4. k = 0; 5. for (a=0;a<=n;a++) 6. for (b=0;b<=n;b++) 7. for (c=0;c<=n;c++) { 8. if ((a+b+c==n)&&(5*a+3*b+c/3==n)&&(c%3==0)) { 9. g[k] = a; 10. m[k] = b; 11. s[k] = c; 12. k++; 13. }}}
矩阵。
数组 T:表示售货员的路线,依次存放旅行路线中的城 市编号。
售货员的每一条路线,对应于城市编号的一个排列。
n 个城市共有 n! 个排列,采用穷举法逐一计算每一条路线的费 用,从中找出费用最小的路线,便可求出问题的解。

中科大算法第二章近似算法--黄刘生(调整后适合打印版)

中科大算法第二章近似算法--黄刘生(调整后适合打印版)
12
NP-完全性理论
Karp的贡献
理查德·卡普(Richard Karp , 1935- ) 1972 年论文 ”Reducibility among Combinatorial Problems” 发 展和加强了由库克提出的“NP完全性”理论。 尤其是库 克仅证明了命题演算的可满足问题是NP完全的,而卡普则证明了从 组合优化中引出的大多数经典问题(背包问题、覆盖问题、匹配问 题、分区问题、路径问题、调度问题等)都是NP完全问题。只要证 明其中任一个问题是属于P类的,就可解决计算复杂性理论中最大 的一个难题,即P=?NP。
SAT∈P当且仅当P=NP
Cook 于1961 年获 Michigan 大学学士学位, 1962 和 1966年分获哈佛 大学硕士与博士学位。 1966-1970 ,他在 UC Berkeley 担任助教授; 1970年加盟多伦多大学,现为该校CS 和数学系教授,他的论文开启 了NP完备性的研究,令该领域于之后的十年成为计算机科学中最活 跃和重要的研究。因其在计算复杂性理论方面的贡献,尤其是在奠 定NP完全性理论基础上的突出贡献而荣获1982年度的图灵奖。
9
P、NP及NPC类问题
NP=?P
∵确定型图灵机是非确定型图灵机的特例,∴P⊆NP 是否有NP⊆P?即是否NP=P?
美国麻省的Clay数学研究所于2000年5月24日在巴黎法兰西学院宣 布:对七个“千年数学难题”中的每一个均悬赏 100 万美元,而 问题NP=?P位列其首:
1.P问题对NP问题 2.霍奇猜想 3. 庞加莱猜想 (2002.11-2003.7 ,俄罗斯数学家佩雷尔曼在 3 篇 论文预印本中证明了几何化猜想,2006被授予菲尔兹奖) 4.黎曼假设 5.杨-米尔斯存在性和质量缺口 6.纳维叶-斯托克斯方程的存在性与光滑性 7.贝赫和斯维讷通-戴尔猜想

《算法设计与分析》(全)

《算法设计与分析》(全)
巢湖学院计算机科学与技术系
1.1、算法与程序
程序:是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)。 例如操作系统,是一个在无限循环中执行的程序, 因而不是一个算法。 操作系统的各种任务可看成是单独的问题,每一个 问题由操作系统中的一个子程序通过特定的算法来实 现。该子程序得到输出结果后便终止。
渐近分析记号的若干性质
(1)传递性: ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= O(g(n)), g(n)= O (h(n)) f(n)= O (h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= o(g(n)), g(n)= o(h(n)) f(n)= o(h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); (2)反身性: ➢ f(n)= (f(n));f(n)= O(f(n));f(n)= (f(n)). (3)对称性: ➢ f(n)= (g(n)) g(n)= (f(n)) . (4)互对称性: ➢ f(n)= O(g(n)) g(n)= (f(n)) ; ➢ f(n)= o(g(n)) g(n)= (f(n)) ;
巢湖学院计算机科学与技术系
渐近分析记号的若干性质
规则O(f(n))+O(g(n)) = O(max{f(n),g(n)}) 的证明: ➢ 对于任意f1(n) O(f(n)) ,存在正常数c1和自然数n1,使得对
所有n n1,有f1(n) c1f(n) 。 ➢ 类似地,对于任意g1(n) O(g(n)) ,存在正常数c2和自然数
巢湖学院计算机科学与技术系
第1章 算法引论

- 贝叶斯近似算法介绍-概述说明以及解释

- 贝叶斯近似算法介绍-概述说明以及解释

- 贝叶斯近似算法介绍-概述说明以及解释1.引言1.1 概述在贝叶斯统计学中,贝叶斯近似算法是一种通过近似地求解贝叶斯推断问题的方法。

贝叶斯推断是一种基于贝叶斯定理的统计推断方法,旨在估计未知参数的后验分布。

然而,由于后验分布通常难以解析求解,因此需要采用近似算法来求解。

贝叶斯近似算法通过在后验分布中进行采样或使用近似的数值方法来估计参数的后验分布。

这些算法包括马尔可夫链蒙特卡洛方法(MCMC)、变分推断方法等。

本文将介绍贝叶斯近似算法的基本概念,探讨其原理及应用场景,并介绍一些常见的贝叶斯近似算法。

通过深入了解贝叶斯近似算法,读者可以更好地理解和应用这些方法于实际问题中。

1.2 文章结构文章结构部分的内容:本文将首先介绍贝叶斯推断的基本概念,包括其原理和应用场景。

接着,将详细讨论贝叶斯近似算法的概述,包括其核心思想和主要方法。

最后,将探讨贝叶斯近似算法在实际应用中的具体案例和效果。

通过深入了解贝叶斯近似算法的原理和应用,希望读者能够更好地理解其在数据分析和机器学习领域的重要性和价值。

1.3 目的本文旨在介绍贝叶斯近似算法,讨论其在贝叶斯推断中的应用以及其优势和局限性。

通过深入了解贝叶斯近似算法的工作原理和算法流程,读者将能够更好地理解该算法在实际问题中的应用场景和效果。

此外,本文还将探讨贝叶斯近似算法的发展趋势和未来可能的改进方向,为读者提供对该算法的全面认识和深入了解。

通过本文的阅读,读者将能够掌握贝叶斯近似算法的基本概念和原理,从而在实际问题中灵活运用该算法,提高问题求解的效率和精度。

2.正文2.1 贝叶斯推断简介贝叶斯推断是一种基于贝叶斯定理的统计推断方法。

在统计学中,我们通常需要根据收集到的数据来对未知参数进行推断。

贝叶斯推断通过将先验知识和数据信息结合起来,得出对参数的后验分布,从而对参数进行推断。

贝叶斯推断的核心思想是先验概率和后验概率之间的贝叶斯定理。

在贝叶斯推断中,我们首先给定一个先验分布,描述对参数的初始信念或者认识。

第一章 算法初步全章教案

第一章 算法初步全章教案

第一章 算法初步第一课时 1.1.1 算法的概念教学要求:了解算法的含义,体会算法的思想;能够用自然语言叙述算法;掌握正确的算法应满足的要求;会写出解线性方程(组)的算法、判断一个数为质数的算法、用二分法求方程近似根的算法.教学重点:解二元一次方程组等几个典型的的算法设计.教学难点:算法的含义、把自然语言转化为算法语言.教学过程:一、复习准备:1. 提问:我们古代的计算工具?近代计算手段?(算筹与算盘→计算器与计算机,见章头图)2. 提问:①小学四则运算的规则?(先乘除,后加减) ②初中解二元一次方程组的方法?(消元法) ③高中二分法求方程近似解的步骤? (给定精度ε,二分法求方程根近似值步骤如下:A .确定区间[,]a b ,验证()()0f a f b <,给定精度ε;B. 求区间(,)a b 的中点1x ;C. 计算1()f x : 若1()0f x =,则1x 就是函数的零点; 若1()()0f a f x <,则令1b x =(此时零点01(,)x a x ∈); 若1()()0f x f b <,则令1a x =(此时零点01(,)x x b ∈);D. 判断是否达到精度ε;即若||a b ε-<,则得到零点零点值a (或b );否则重复步骤2~4.二、讲授新课:1. 教学算法的含义:① 出示例:写出解二元一次方程组22(1)24(2)x y x y -=⎧⎨+=⎩的具体步骤. 先具体解方程组,学生说解答,教师写解法 → 针对解答过程分析具体步骤,构成其算法第一步:②-①×2,得5y =0 ③; 第二步:解③得y =0; 第三步:将y =0代入①,得x =2.② 理解算法: 12世纪时,指用阿拉伯数字进行算术运算的过程. 现代意义上的算法是可以用计算机来解决的某一类问题的程序或步骤,程序和步骤必须是明确和有效的,且能在有限步完成. 广义的算法是指做某一件事的步骤或程序. 算法特点:确定性;有限性;顺序性;正确性;普遍性.举例生活中的算法:菜谱是做菜肴的算法;洗衣机的使用说明书是操作洗衣机的算法;歌谱是一首歌曲的算法;渡河问题.③ 练习:写出解方程组()1111221222(1)0(2)a x b y c a b a b a x b y c +=⎧-≠⎨+=⎩的算法.2. 教学几个典型的算法:① 出示例1:任意给定一个大于1的整数n ,试设计一个程序或步骤对n 是否为质数做出判断.提问:什么叫质数?如何判断一个数是否质数? → 写出算法.分析:此算法是用自然语言的形式描述的. 设计算法要求:写出的算法必须能解决一类问题,并且能够重复使用. 要使算法尽量简单、步骤尽量少. 要保证算法正确,且计算机能够执行.② 出示例2:用二分法设计一个求方程230x -=的近似根的算法.提问:二分法的思想及步骤?如何求方程近似解→写出算法.③练习:举例更多的算法例子;→对比一般解决问题的过程,讨论算法的主要特征.3. 小结:算法含义与特征;两类算法问题(数值型、非数值型);算法的自然语言表示.三、巩固练习:1. 写出下列算法:解方程x2-2x-3=0;求1×3×5×7×9×11的值2. 有蓝和黑两个墨水瓶,但现在却错把蓝墨水装在了黑墨水瓶中,黑墨水错装在了蓝墨水瓶中,要求将其互换,请你设计算法解决这一问题.3. 根据教材P6 的框图表示,使用程序框表示以上算法.4. 作业:教材P4 1、2题.第二课时 1.1.2 程序框图(一)教学要求:掌握程序框图的概念;会用通用的图形符号表示算法,掌握算法的三个基本逻辑结构. 掌握画程序框图的基本规则,能正确画出程序框图. 通过模仿、操作、探索,经历通过设计程序框图表达解决问题的过程;学会灵活、正确地画程序框图.教学重点:程序框图的基本概念、基本图形符号和3种基本逻辑结构.教学难点:综合运用框图知识正确地画出程序框图教学过程:一、复习准备:1. 写出算法:给定一个正整数n,判定n是否偶数.2. 用二分法设计一个求方程320x-=的近似根的算法.二、讲授新课:1. 教学程序框图的认识:①讨论:如何形象直观的表示算法?→图形方法.教师给出一个流程图(上面1题),学生说说理解的算法步骤.②定义程序框图:程序框图又称流程图,是一种用规定的图形、指向线及文字说明来准确、直观地表示算法的图形.③④阅读教材P5的程序框图. →讨论:输入35后,框图的运行流程,讨论:最大的I值.2. 教学算法的基本逻辑结构:①讨论:P5的程序框图,感觉上可以如何大致分块?流程再现出一些什么结构特征?→教师指出:顺序结构、条件结构、循环结构.②试用一般的框图表示三种逻辑结构. (见下图)③出示例3:已知一个三角形的三边分别为4,5,6,利用海伦公式设计一个算法,求出它的面积,并画出算法的程序框图. (学生用自然语言表示算法→师生共写程序框图→讨论:结构特征)④出示例4:任意给定3个正实数,设计一个算法,判断分别以这3个数为三边边长的三角形是否存在.画出这个算法的程序框图. (学生分析算法→写出程序框图→试验结果→讨论结构)⑤出示例5:设计一个计算1+2+3+…+1000的值的算法,并画出程序框图. (学生分析算法→写出程序框图→给出另一种循环结构的框图→对比两种循环结构)3. 小结:程序框图的基本知识;三种基本逻辑结构;画程序框图要注意:流程线的前头;判断框后边的流程线应根据情况标注“是”或“否”;循环结构中要设计合理的计数或累加变量等.三、巩固练习:1.练习:把复习准备题②的算法写成框图. 2. 作业:P12 A组1、2题.第三课时 1.1.2 程序框图(二)教学要求:更进一步理解算法,掌握算法的三个基本逻辑结构. 掌握画程序框图的基本规则,能正确画出程序框图.学会灵活、正确地画程序框图.教学重点:灵活、正确地画程序框图.教学难点:运用程序框图解决实际问题.教学过程:一、复习准备:1.2.顺序结构条件结构循环结构程序框图结构说明按照语句的先后顺序,从上而下依次执行这些语句. 不具备控制流程的作用. 是任何一个算法都离不开的基本结构根据某种条件是否满足来选择程序的走向.当条件满足时,运行“是”的分支,不满足时,运行“否”的分支.从某处开始,按照一定的条件,反复执行某一处理步骤的情况. 用来处理一些反复进行操作的问题二、讲授新课:1. 教学程序框图①出示例1:任意给定3个正实数,判断其是否构成三角形,若构成三角形,则根据海伦公式计算其面积. 画出解答此问题算法的程序框图.(学生试写→共同订正→对比教材P7 例3、4 →试验结果)②设计一个计算2+4+6+…+100的值的算法,并画出程序框图.(学生试写→共同订正→对比教材P9 例5 →另一种循环结构)③循环语句的两种类型:当型和直到型.当型循环语句先对条件判断,根据结果决定是否执行循环体;直到型循环语句先执行一次循环体,再对一些条件进行判断,决定是否继续执行循环体. 两种循环语句的语句结构及框图如右.说明:“循环体”是由语句组成的程序段,能够完成一项工作.注意两种循环语句的区别及循环内部改变循环的条件.④练习:用两种循环结构,写出求100所有正约数的算法程序框图.2. 教学“鸡兔同笼”趣题:①“鸡兔同笼”,我国古代著名数学趣题之一,大约在1500年以前,《孙子算经》中记载了这个有趣的问题,书中描述为:今有雏兔同笼,上有三十五头,下有九十四足,问雏兔各几何?②学生分析其数学解法. (“站立法”,命令所有的兔子都站起来;或用二元一次方程组解答.)③欣赏古代解法:“砍足法”,假如砍去每只鸡、每只兔一半的脚,则“独脚鸡”,“双脚兔”. 则脚的总数47只;与总头数35的差,就是兔子的只数,即47-35=12(只).鸡35-12=23(只).④试用算法的程序框图解答此经典问题. (算法:鸡的头数为x,则兔的头数为35-x,结合循环语句与条件语句,判断鸡兔脚数2x+4(35-x)是否等于94.)三、巩固练习:1. 练习:100个和尚吃100个馒头,大和尚一人吃3个,小和尚3人吃一个,求大、小和尚各多少个?分析其算法,写出程序框图. 2. 作业:教材P12 A组1题.第一课时 1.2.1 输入语句、输出语句和赋值语句教学要求:正确理解输入语句、输出语句、赋值语句的结构. 让学生充分地感知、体验应用计算机解决数学问题的方法;并能初步操作、模仿. 通过实例使学生理解3种基本的算法语句(输入语句、输出语句和赋值语句)的表示方法、结构和用法,能用这三种基本的算法语句表示算法,进一步体会算法的基本思想. 教学重点:会用输入语句、输出语句、赋值语句.教学难点:正确理解输入语句、输出语句、赋值语句的作用.教学过程:一、新课导入:1. 提问:学习了哪些算法的表示形式?(自然语言或程序框图描述)算法中的三种基本的逻辑结构?(顺序结构、条件结构和循环结构)2. 导入:我们用自然语言或程序框图描述的算法,计算机是无法“看得懂,听得见”的. 因此还需要将算法用计算机能够理解的程序设计语言翻译成计算机程序. 程序设计语言有很多种. 如BASIC,Foxbase,C语言,C++,J++,VB,VC,JB 等.各种程序设计语言中都包含下列基本的算法语句:输入语句、输出语句、赋值语句条件语句和循环语句.今天,我们一起用类BASIC语言学习输入语句、输出语句、赋值语句. 基本上对应于算法中的顺序结构.二、讲授新课:1. 教学三种语句的格式及功能:①出示例1:编写程序,计算一个学生数学、语文、英语三门课的平均成绩.(分析算法→框图表示→教师给出程序,学生试说说对各语句的理解.)①出示例2:用描点法作函数y=x3+3x2-24x+30的图象时,需要求出自变量和函数的一组对应值. 编写程序,分别计算当x=-5,-4,-3,-2,-1,0,1,2,3,4,5时的函数值②出示例3:给一个变量重复赋值. (程序见P16)③出示例4:交换两个变量A和B的值,并输出交换前后的值.(教法:先分析算法→画出框图→编写程序→分析各语句→变式→小结:先写算法,再编程)3. 小结:输入、输出和赋值语句的格式;赋值“=”及表达式;编写简单程序解决数学问题.三、巩固练习:1. 练习:教材P16 1、2题 2. 作业:P16 3、4题.第二课时 1.2.2 条件语句教学要求:正确理解条件语句的概念,并掌握其结构. 会应用条件语句编写程序. 教学重点:条件语句的步骤、结构及功能.教学难点:会编写程序中的条件语句.教学过程:一、复习准备:1. 提问:算法的三种逻辑结构?条件结构的框图模式?2. 提问:输入语句、输出语句和赋值语句的格式与功能?3. 一次招生考试中,测试三门课程,如果三门课程的总成绩在200分及以上,则被录取. 请对解决此问题的算法分析,画出程序框图. (变题:…总成绩在200分以下,则不被录取)二、讲授新课:1. 教学条件语句的格式与功能:①分析:复习题③中的两种条件结构的框图模式?②给出复习题③的程序,试读懂程序,说说新的语句的结构及含义.③条件语句的一般有两种:IF—THEN语句;IF—THEN—ELSE语句. 语句格式及框图如下.分析语句执行流程,并说明:①“条件”是由一个关系表达式或逻辑表达式构成,其一般形式为“<表达式><关系运算符><表达式>”,常用的运算符有“>”(大于)、“<”(小于)、“>=”(大于或等于)、“<=”(小于或等于),“<>”(不等于). 关系表达式的结果可取两个值,以“真”或“假”来表示,“真”表示条件满足,“假”则条件不满足. ②“语句”是由程序语言中所有语句构成的程序段,即可以是语句组. ③条件语句可以嵌套,即条件语句的THEN 或ELSE后面还可以跟条件语句,嵌套时注意内外分层,避免逻辑混乱.2. 教学典型例题:②出示例5:编写程序,输入一元二次方程ax2+bx+c=0的系数,输出它的实数根.(算法分析→画程序框图→编写程序→给出系数的一组值,分析框图与程序各步结果)注意:解方程之前,先由判别式的符号判断方程根的情况. 函数SQR()的功能及格式.②讨论:例5程序中为何要用到条件语句?条件语句一般用在什么情况下?答:一般用在需要对条件进行判断的算法设计中,如判断一个数的正负,确定两个数的大小等问题,还有求分段函数的函数值等,往往要用条件语句,有时甚至要用到条件语句的嵌套③练习:编写程序,使得任意输入的2个实数从小到大排列.④出示例6:编写程序,使得任意输入的3个实数从小到大排列.(讨论:先用什么语句?→用具体的数值给a、b、c,分析计算机如何排列这些数?→写出程序→画出框图→说说算法→变式:如果是4个实数呢?3. 小结:条件语句的格式与功能及对应框图. 编程的一般步骤:①算法分析:根据提供的问题,利用数学及相关学科的知识,设计出解决问题的算法. ②画程序框图:依据算法分析,画出程序框图. ③写出程序:根据程序框图中的算法步骤,逐步写出相应的程序语句.三、巩固练习: 1. 练习:教材P22 1、2题.2. 试编写程序进行印刷品邮资的计算. (前100g 0.7元,以后每100g 0.4元)3. 作业:P22 3、4题.第三课时 1.2.3 循环语句教学要求:正确理解循环语句的概念,并掌握其结构. 会应用循环语句编写程序. 教学重点:两种循环语句的表示方法、结构和用法,用循环语句表示算法.教学难点:理解循环语句的表示方法、结构和用法,会编写程序中的循环语句. 教学过程:一、复习准备:1. 设计一个计算1+2+3+……+10的算法,并画出程序框图.2. 循环结构有哪两种模式?有何区别?相应框图如何表示?答:当型(while 型)和直到型(until 型). 当型循环语句先对条件判断,根据结果决定是否执行循环体,可能一次也不执行循环体,也称为“前测试型”循环;直到型循环语句先执行一次循环体,再对一些条件进行判断,决定是否继续执行循环体.二、讲授新课:1. 教学两种循环语句的格式与功能:① 给出复习题①的两种循环语句的程序,试读懂程序,说说新的语句的结构及含义.② 两种循环语句的语句结构及框图如下.说明:“循环体”是由语句组成的程序段,能够完成一项工作. 当使用WHIL 语句时,循环内部应当有改变循环的条件,否则会产生无限循环. 学习时注意两种循环语句的区别.③ 讨论:两种循环语句的区别?当型循环先判断后执行,直到型循环先执行后判断,则:在WHILE 语句中,是当条件满足时执行循环体;在UNTIL 语句中,先执行循环体,再当条件不满足时再执行循环体.2. 教学例题:① 出示例:编写程序,计算1+2+3+……+99+100的值.(分析:实现累加的算法 → 分别用两种循环语句编写 → 变题:计算20以内偶数的积.② 给出下列一段程序,试读懂程序,说说各语句的作用,分析程序的功能. (见教材P24)(读,找疑问 → 说各语句 → 分析功能)③ 练习:用描点法作函数y =x 3+3x 2-24x +30的图象时,需要求出自变量和函数的一组对应值. 编写程序,分别计算当x =-5,-4,-3,-2,-1,0,1,2,3,4,5时的函数值. ④ 分析右边所给出程序:当n=10时,结果是多少?程序INPUT “n=”;ni =1 a =0 WHILE i <= n a = a +(i +1)/i i = i+1WENDPRINT “…”;aEND实现功能?3. 小结:① 循环语句的两种不同形式:WHILE 语句和UNTIL 语句(还可补充了For 语句),掌握它们的一般格式.② 在用WHILE 语句和UNTIL 语句编写程序解决问题时,一定要注意它们的格式及条件的表述方法. WHILE 语句中是当条件满足时执行循环体,而UNTIL 语句中是当条件不满足时执行循环体.③ 循环语句主要用来实现算法中的循环结构,在处理一些需要反复执行的运算任务. 如累加求和,累乘求积等问题中常用到.三、巩固练习: 1. 练习:教材P24 1题.2. 编写程序,实现输出1000以内能被3和5整除的所有整数. (算术运算:5 MOD 3 =2)3. 作业:P24 2、3题.第一课时 1.3.1 算法案例---辗转相除法与更相减损术教学要求:理解辗转相除法与更相减损术中蕴含的数学原理,并能根据这些原理进行算法分析; 基本能根据算法语句与程序框图的知识设计出辗转相除法与更相减损术完整的程序框图并写出它们的算法程序.教学重点:理解辗转相除法与更相减损术求最大公约数的方法.教学难点:把辗转相除法与更相减损术的方法转换成程序框图与程序语言. 教学过程:一、复习准备:1. 回顾算法的三种表述:自然语言、程序框图(三种逻辑结构)、程序语言(五种基本语句).2. 提问:①小学学过的求两个数最大公约数的方法?(先用两个公有的质因数连续去除,一直除到所得的商是互质数为止,然后把所有的除数连乘起来.)口算出36和64的最大公约数. ②除了用这种方法外还有没有其它方法?6436128=⨯+,36∴和28的最大公约数就是64和36的最大公约数,反复进行这个步骤,直至842=⨯,得出4即是36和64的最大公约数.二、讲授新课:1. 教学辗转相除法:例1:求两个正数1424和801的最大公约数.分析:可以利用除法将大数化小,然后逐步找出两数的最大公约数. (适用于两数较大时)①以上我们求最大公约数的方法就是辗转相除法,也叫欧几里德算法,它是由欧几里德在公元前300年左右首先提出的. 利用辗转相除法求最大公约数的步骤如下:(1)用较大的数m 除以较小的数n 得到一个商0S 和一个余数0R ;(2)若0R =0,则n 为m ,n 的最大公约数;若0R ≠0,则用除数n 除以余数0R 得到一个商1S 和一个余数1R ;(3)若1R =0,则1R 为m ,n 的最大公约数;若1R ≠0,则用除数0R 除以余数1R 得到一个商2S 和一个余数2R ;……依次计算直至n R =0,此时所得到的1n R -即为所求的最大公约数.②由上述步骤可以看出,辗转相除法中的除法是一个反复执行的步骤,且执行次数由余数是否等于0来决定,所以我们可以把它看成一个循环体,它的程序框图如右图:(师生共析,写出辗转相除法完整的程序框图和程序语言)练习:求两个正数8251和2146的最大公约数. (乘法格式、除法格式)2. 教学更相减损术:我国早期也有求最大公约数问题的算法,就是更相减损术. 在《九章算术》中有更相减损术求最大公约数的步骤:可半者半之,不可半者,副置分母•子之数,以少减多,更相减损,求其等也,以等数约之.翻译为:(1)任意给出两个正数;判断它们是否都是偶数. 若是,用2约简;若不是,执行第二步.(2)以较大的数减去较小的数,接着把较小的数与所得的差比较,并以大数减小数. 继续这个操作,直到所得的数相等为止,则这个数(等数)就是所求的最大公约数.例2:用更相减损术求91和49的最大公约数.分析:更相减损术是利用减法将大数化小,直到所得数相等时,这个数(等数)就是所求的最大公约数. (反思:辗转相除法与更相减损术是否存在相通的地方) 练习:用更相减损术求72和168的最大公约数.3. 小结:辗转相除法与更相减损术及比较①都是求最大公约数的方法,辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少;②结果上,辗转相除法体现结果是以相除余数为0得到,而更相减损术则以减数与差相等而得到.三、巩固练习:1、练习:教材P35第1题 2、作业:教材P38第1题 第二课时 1.3.2 算法案例---秦九韶算法教学要求:了解秦九韶算法的计算过程,并理解利用秦九韶算法可以减少计算次数、提高计算效率的实质;理解数学算法与计算机算法的区别,理解计算机对数学的辅助作用.教学重点:秦九韶算法的特点及其程序设计.教学难点:秦九韶算法的先进性理解及其程序设计.教学过程:一、复习准备:1. 分别用辗转相除法和更相减损术求出两个正数623和1513的最大公约数.2. 设计一个求多项式5432()254367f x x x x x x =--+-+当5x =时的值的算法. (学生自己提出一般的解决方案:将5x =代入多项式进行计算即可)提问:上述算法在计算时共用了多少次乘法运算?多少次加法运算?此方案有何优缺点?(上述算法一共做了5+4+3+2+1=15次乘法运算,5次加法运算. 优点是简单、易懂;缺点是不通用,不能解决任意多项式的求值问题,而且计算效率不高.)二、讲授新课:1. 教学秦九韶算法:① 提问:在计算x 的幂值时,可以利用前面的计算结果,以减少计算量,即先计算2x ,然后依次计算2x x ⋅,2()x x x ⋅⋅,2(())x x x x ⋅⋅⋅的值,这样计算上述多项式的值,一共需要多少次乘法,多少次加法?(上述算法一共做了4次乘法运算,5次加法运算)② 结论:第二种做法与第一种做法相比,乘法的运算次数减少了,因而能提高运算效率,而且对于计算机来说,做一次乘法所需的运算时间比做一次加法要长得多,因此第二种做法能更快地得到结果.③ 更有效的一种算法是:将多项式变形为:5432()254367f x x x x x x =--+-+=,依次计算2555⨯-=,55421⨯-=,2153108⨯+=,10856534⨯-=,534572677⨯+=故(5)2677f =. ――这种算法就是“秦九韶算法”. (注意变形,强调格式) ④ 练习:用秦九韶算法求多项式432()2351f x x x x x =+-++当4x =时的值. (学生板书→师生共评→教师提问:上述算法共需多少次乘法运算?多少次加法运算?)⑤ 如何用秦九韶算法完成一般多项式1110()n n n n f x a x a x a x a --=++++的求值问题?改写:11101210()(()))n n n n n n n f x a x a x a x a a x a x a x a x a ----=++++=+++++. 首先计算最内层括号内一次多项式的值,即11n n v a x a -=+,然后由内向外逐层计算一次多项式的值,即212n v v x a -=+,323n v v x a -=+,,10n n v v x a -=+. ⑥ 结论:秦九韶算法将求n 次多项式的值转化为求n 个一次多项式的值,整个过程只需n 次乘法运算和n 次加法运算;观察上述n 个一次式,可发出k v 的计算要用到1k v -的值,若令0n v a =,可得到下列递推公式:01,(1,2,,)n k k n k v a v v x a k n --=⎧⎨=+=⎩.这是一个反复执行的步骤,因此可用循环结构来实现.⑦ 练习:用秦九韶算法求多项式5432()52 3.5 2.6 1.70.8f x x x x x x =++-+-当5x =时的值并画出程序框图.2. 小结:秦九韶算法的特点及其程序设计三、巩固练习:1、练习:教材P35第2题 2、作业:教材P36第2题 第三课时 1.3.3 算法案例---进位制教学要求:了解各种进位制与十进制之间转换的规律,会利用各种进位制与十进制之间的联系进行各种进位制之间的转换;学习各种进位制转换成十进制的计算方法,研究十进制转换为各种进位制的除k 去余法,并理解其中的数学规律. 教学重点:各种进位制之间的互化.教学难点:除k 取余法的理解以及各进位制之间转换的程序框图及其程序的设计.教学过程:一、复习准备:1. 试用秦九韶算法求多项式52()42f x x x =-+当3x =时的值,分析此过程共需多少次乘法运算?多少次加法运算?2. 提问:生活中我们常见的数字都是十进制的,但是并不是生活中的每一种数字都是十进制的.比如时间和角度的单位用六十进位制,电子计算机用的是二进制,旧式的秤是十六进制的,计算一打数值时是12进制的......那么什么是进位制?不同的进位制之间又有什么联系呢?二、讲授新课:1. 教学进位制的概念:① 进位制是人们为了计数和运算方便而约定的记数系统,“满几进一”就是几进制,几进制的基数就是几. 如:“满十进一”就是十进制,“满二进一”就是二进制. 同一个数可以用不同的进位制来表示,比如:十进数57,可以用二进制表示为111001,也可以用八进制表示为71、用十六进制表示为39,它们所代表的数值都是一样的. 表示各种进位制数一般在数字右下脚加注来表示,如上例中:(2)(8)(16)1110017139==② 一般地,任意一个k 进制数都可以表示成不同位上数字与基数的幂的乘积之和的形式,即1110()1...(0,n n n n k n n n n a a a a a k a a a k a k a ka k a k ----<<≤<=⨯+⨯+⨯+⨯.如:把(2)110011化为十进制数,(2)110011=1⨯25+1⨯24+0⨯23+0⨯22+1⨯21+1⨯20=32+16+2+1=51.把八进制数(8)7348化为十进制数,3210(8)7348783848883816=⨯+⨯+⨯+⨯=.2. 教学进位制之间的互化:①例1:把二进制数(2)1001101化为十进制数.(学生板书→教师点评→师生共同总结将非十进制转为十进制数的方法) 分析此过程的算法过程,编写过程的程序语言. 见P34②练习:将(5)2341、(3)121转化成十进制数.③例2、把89化为二进制数.分析:根据进位制的定义,二进制就是“满二进一”,可以用2连续去除89或所得商,然后取余数. (教师板书)上述方法也可以推广为把十进制化为k 进制数的算法,这种算法成为除k 取余法. ④练习:用除k 取余法将89化为四进制数、六进制数.⑤例3、把二进制数(2)11011.101化为十进制数.解:4(211-=⨯. (小数也可利用上述方法化进行不同进位制之间的互化. )变式:化为八进制→方法:进制互化3. 小结:进位制的定义;进位制之间的互化.三、巩固练习:1、练习:教材P35第3题 2、作业:教材P38第3题 第四课时 1.3.4 生活中的算法实例教学要求:通过生活实例进一步了解算法思想.教学重点:生活实例的算法分析.教学难点:算法思想的理解.教学过程:一、复习准备:1. 前面学习了哪几种算法案例?每种算法的作用及操作方法是怎样的?2. 算法思想在我们的生活中无处不在,如何利用我们所学习的知识解决生活中的实际问题?二、讲授新课:1. 霍奇森算法:提问:同学们经常会面对一个共同的问题,就是有时有太多的事情要做. 例如,你可能要面临好几门课的作业的最后期限,你如何合理安排以确保每门课的作业都能如期完成?如果根本不可能全部按期完成,你该怎么办?(霍奇森算法可以。

算法设计与分析ppt课件

算法设计与分析ppt课件
2
ACM国际大学生程序设计竞赛
ACM国际大学生程序设计竞赛(英文 全称:ACM International Collegiate Programming Contest(ACM-ICPC或 ICPC)是由美国计算机协会(ACM)主办 的,一项旨在展示大学生创新能力、团队 精神和在压力下编写程序、分析和解决问 题能力的年度竞赛。经过30多年的发展, ACM国际大学生程序设计竞赛已经发展成 为最具影响力的大学生计算机竞赛。赛事 目前由IBM公司赞助。
第3章 动态规划 3.1 矩阵连乘问题 3.2 动态规划算法的基本要素 3.3 最长公共子序列 3.4 最大子段和 3.5 凸多边形最优三角剖分 3.6 多边形游戏 3.7 图像压缩 3.8 电路布线 3.9 流水作业调度 3.10 0-1背包问题 3.11 最优二叉搜索树 3.12 动态规划加速原理
7
1.1 算法与程序
算法:是满足下述性质的指令序列。
输 入:有零个或多个外部量作为算法的输入。 输 出:算法产生至少一个量作为输出。 确定性:组成算法的每条指令清晰、无歧义。 有限性:算法中每条指令的执行次数有限,执行
每条指令的时间也有限。
程序:是算法用某种程序设计语言的具体实现。
4
教材与参考书
教 材:
◦ 算法设计与分析(第三版) 王晓东,2007年 5月,电子工业出版社。
参考书:
◦ 徐士良编,C常用算法程序集,华大学出版 社,1998年
◦ 霍红卫编,算法设计与分析 西安电子科技 大学出版社,2005年
◦ 卢开澄编,计算机算法导引,清华大学出 版社,2003年
5
部分目录
算法分析是计算机领域的“古老”而“前沿” 的课题。
10

近似算法

近似算法

装箱问题有四种算法
方法一 首次适宜(FF)算法 首次适宜(FF)算法
把箱子按 下标 1 , 2 , , k , 标记,所有的箱子初始化 为空; 按物体 u 1 , u 2 , , u n 顺序装入箱子. 装入过程 如下: 把第 一个物体 u 1 装入第一个箱子 b1 , 如果 b1 还容纳得下第二个物体,继续把第二个 物体 u 2 装入 b1 ; 否则 ,把 u 2 装入 b 2 . 一般 地,为了装入物体 u i ,先找出能容纳得下
a
b
c
d
e
f
a
b
c
d
e
f
g
h
i
g
h
i
j
k (a)
l
m
j
k (b)
l
m
a
b
c
d
e
f
a
b
c
d
e
f
g
h
i
g
h
i
j
k (c)
l
m
j
k (d)
l
m
a
b
c
d
e
f
a
b
c
d
e
f
g
h
i
g
h
i
j
k (e)
l
m
j
k (f)
l
m
a
b
c
d
e
f
a
b
c
d
e
f
g
h
i
g
h

j
k (g)
l
m
j
k (h)
l
m

北京大学屈婉玲算法设计与分析课件

北京大学屈婉玲算法设计与分析课件

11
1
1
1
1 2
5
1
1
1
21
3
23 11
21 11
1
1
1
1
最邻近法的性能
定理8.3 对于货郎问题所有满足三角不等式的 n 个城市的 实例 I, 总有
NN(I )

1 2
(⎡log2
n⎤
+
1) OPT(I ).
而且, 对于每一个充分大的 n, 存在满足三角不等式的 n 个
城市的实例 I 使得
NN(I )
8.4 背包问题
0-1背包问题的优化形式:
任给 n 件物品和一个背包, 物品 i 的重量为 wi , 价值为 vi , 1≤ i ≤ n, 背包的重量限制为 B, 其中 wi , vi 以及 B 都是正 整数.
把哪些物品装入背包才能在不超过重量限制的条件下使 得价值最大? 即, 求子集 S*⊆{1,2,…,n} 使得
G-MPS(I) = 2m−1.
最优分配方案是把前 m(m−1) 项作业平均地分配给 m−1 台机 器, 每台 m 项, 最后一项分配给留下的机器,
OPT(I) = m.
G-MPS是2-近似算法
m=5的紧实例
1
6
11 16
21
2
7
12 17
3
8
13 18
4
9
14 19
5
10 15 20
G-MPS算法的解
(3) 研究问题本身的可近似性, 即在P≠NP(或其他更强)的假 设下, 该问题近似算法的近似比的下界.
8.2 多机调度问题
多机调度问题:
任给有穷的作业集 A 和 m 台相同的机器, 作业 a 的处理时

计算机算法设计与分析--第1章 算法概述

计算机算法设计与分析--第1章 算法概述
12
③确认算法。算法确认的目的是使人们确信这一算 法能够正确无误地工作,即该算法具有可计算性。 正确的算法用计算机算法语言描述,构成计算机程 序,计算机程序在计算机上运行,得到算法运算的 结果; ④ 分析算法。算法分析是对一个算法需要多少计算 时间和存储空间作定量的分析。分析算法可以预测 这一算法适合在什么样的环境中有效地运行,对解 决同一问题的不同算法的有效性作出比较; ⑤ 验证算法。用计算机语言描述的算法是否可计算、 有效合理,须对程序进行测试,测试程序的工作由 调试和作时空分布图组成。
16
算法描述
1. 从第一个元素开始,该元素可以认为已 经被排序 2. 取出下一个元素,在已经排序的元 素序列中从后向前扫描 3. 如果该元素(已排序)大于新元素, 将该元素移到下一位置 4. 重复步骤3,直到找到已排序的元素 小于或者等于新元素的位置 5. 将新元素插入到该位置中 6. 重复步骤2
15
1.3 算法示例—插入排序算法
算法的思想:扑克牌游戏
a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1
= = = = = = =
5,2,4,6,1,3 5,2,4,6,1,3 2,5,4,6,1,3 2,4,5,6,1,3 2,4,5,6,1,3 1,2,4,5,6,3 1,2,3,4,5,6
8
算法≠程序
算法描述:自然语言,流程图,程序设计
语言,伪代码 用各种算法描述方法所描述的同一算法, 该算法的功用是一样的,允许在算法的描述 和实现方法上有所不同。
本书中采用类C++伪代码语言描述算法
9
人们的生产活动和日常生活离不开算法, 都在自觉不自觉地使用算法,例如人们到 商店购买物品,会首先确定购买哪些物品, 准备好所需的钱,然后确定到哪些商场选 购、怎样去商场、行走的路线,若物品的 质量好如何处理,对物品不满意又怎样处 理,购买物品后做什么等。以上购物的算 法是用自然语言描述的,也可以用其他描 述方法描述该算法。

算法设计与分析课件--NP完全性理论-NP完全问题及近似算法

算法设计与分析课件--NP完全性理论-NP完全问题及近似算法
算法设计与分析
1
第八章 NP完全性理论
目录
8.1 异解问题和难解问题
8.2 P类问题和NP类问题
8.3
NP完全问题
8.4 NP完全问题的近似算法
2
8.3 NP完全问题
问题变换:
➢ NP类问题在最坏情况下的时间复杂性一般都是快速增长的指数函 数。希望能够在NP类问题内部找到一种方法,比较两个问题的计 算复杂性。
❖该近似算法的相对误差定义为=
cc* c*
。若对问题的输
入规模n,有一函数ε(n)使得 c c* ≤ε(n),则称ε(n)
c*
为该近似算法的相对误差界。
13
8.4 NP完全问题的近似算法
NPC问题的近似算法示例 - TSP:
➢ 给定一个完全无向图G=(V,E),其每一条边(u,v)∈E有一非 负整数费用c(u,v)。要找出G的最小费用哈密顿回路。如果 TSP满足三角不等式性质,即对于任意3个顶点u,v,w∈V有 :c(u,w)≤c(u,v)+c(v,w),则称该TSP为欧几里得TSP,否 则称为一般TSP。
12
8.4 NP完全问题的近似算法
NPC问题的近似算法的性能:
❖若一个最优化问题的最优值为c*,求解该问题的一个近 似算法求得近似最优解相应的目标函数值为c,则将该近 似近≤似算ρ比法(是n的)问。近题ρ似输(比n入)定为规义1模时为n,的求=一m得a个x的c函c*近, c数c*似 ρ。解(在为n)通最,常优即情解m况a。x 下cc* ,,cc*该
➢ 传递性:设P1、P2和P3是3个判定问题。若P1∝τ(n)P2,且P2∝τ(n)P3 ,则P1∝τ(n)P3。
4
8.3 NP完全问题
多项式时间变换示例:

算法设计与分析习题解答(第2版)

算法设计与分析习题解答(第2版)

第1章算法引论11.1 算法与程序11.2 表达算法的抽象机制11.3 描述算法31.4 算法复杂性分析13小结16习题17第2章递归与分治策略192.1 递归的概念192.2 分治法的基本思想262.3 二分搜索技术272.4 大整数的乘法282.5 Strassen矩阵乘法302.6 棋盘覆盖322.7 合并排序342.8 快速排序372.9 线性时间选择392.10 最接近点对问题432.11 循环赛日程表53小结54习题54第3章动态规划613.1 矩阵连乘问题62目录算法设计与分析(第2版)3.2 动态规划算法的基本要素67 3.3 最长公共子序列713.4 凸多边形最优三角剖分753.5 多边形游戏793.6 图像压缩823.7 电路布线853.8 流水作业调度883.9 0-1背包问题923.10 最优二叉搜索树98小结101习题102第4章贪心算法1074.1 活动安排问题1074.2 贪心算法的基本要素1104.2.1 贪心选择性质1114.2.2 最优子结构性质1114.2.3 贪心算法与动态规划算法的差异1114.3 最优装载1144.4 哈夫曼编码1164.4.1 前缀码1174.4.2 构造哈夫曼编码1174.4.3 哈夫曼算法的正确性1194.5 单源最短路径1214.5.1 算法基本思想1214.5.2 算法的正确性和计算复杂性123 4.6 最小生成树1254.6.1 最小生成树性质1254.6.2 Prim算法1264.6.3 Kruskal算法1284.7 多机调度问题1304.8 贪心算法的理论基础1334.8.1 拟阵1334.8.2 带权拟阵的贪心算法1344.8.3 任务时间表问题137小结141习题141第5章回溯法1465.1 回溯法的算法框架1465.1.1 问题的解空间1465.1.2 回溯法的基本思想1475.1.3 递归回溯1495.1.4 迭代回溯1505.1.5 子集树与排列树1515.2 装载问题1525.3 批处理作业调度1605.4 符号三角形问题1625.5 n后问题1655.6 0\|1背包问题1685.7 最大团问题1715.8 图的m着色问题1745.9 旅行售货员问题1775.10 圆排列问题1795.11 电路板排列问题1815.12 连续邮资问题1855.13 回溯法的效率分析187小结190习题191第6章分支限界法1956.1 分支限界法的基本思想1956.2 单源最短路径问题1986.3 装载问题2026.4 布线问题2116.5 0\|1背包问题2166.6 最大团问题2226.7 旅行售货员问题2256.8 电路板排列问题2296.9 批处理作业调度232小结237习题238第7章概率算法2407.1 随机数2417.2 数值概率算法2447.2.1 用随机投点法计算π值2447.2.2 计算定积分2457.2.3 解非线性方程组2477.3 舍伍德算法2507.3.1 线性时间选择算法2507.3.2 跳跃表2527.4 拉斯维加斯算法2597.4.1 n 后问题2607.4.2 整数因子分解2647.5 蒙特卡罗算法2667.5.1 蒙特卡罗算法的基本思想2667.5.2 主元素问题2687.5.3 素数测试270小结273习题273第8章 NP完全性理论2788.1 计算模型2798.1.1 随机存取机RAM2798.1.2 随机存取存储程序机RASP2878.1.3 RAM模型的变形与简化2918.1.4 图灵机2958.1.5 图灵机模型与RAM模型的关系297 8.1.6 问题变换与计算复杂性归约299 8.2 P类与NP类问题3018.2.1 非确定性图灵机3018.2.2 P类与NP类语言3028.2.3 多项式时间验证3048.3 NP完全问题3058.3.1 多项式时间变换3058.3.2 Cook定理3078.4 一些典型的NP完全问题3108.4.1 合取范式的可满足性问题3118.4.2 3元合取范式的可满足性问题312 8.4.3 团问题3138.4.4 顶点覆盖问题3148.4.5 子集和问题3158.4.6 哈密顿回路问题3178.4.7 旅行售货员问题322小结323习题323第9章近似算法3269.1 近似算法的性能3279.2 顶点覆盖问题的近似算法3289.3 旅行售货员问题近似算法3299.3.1 具有三角不等式性质的旅行售货员问题330 9.3.2 一般的旅行售货员问题3319.4 集合覆盖问题的近似算法3339.5 子集和问题的近似算法3369.5.1 子集和问题的指数时间算法3369.5.2 子集和问题的完全多项式时间近似格式337 小结340习题340第10章算法优化策略34510.1 算法设计策略的比较与选择34510.1.1 最大子段和问题的简单算法34510.1.2 最大子段和问题的分治算法34610.1.3 最大子段和问题的动态规划算法34810.1.4 最大子段和问题与动态规划算法的推广349 10.2 动态规划加速原理35210.2.1 货物储运问题35210.2.2 算法及其优化35310.3 问题的算法特征35710.3.1 贪心策略35710.3.2 对贪心策略的改进35710.3.3 算法三部曲35910.3.4 算法实现36010.3.5 算法复杂性36610.4 优化数据结构36610.4.1 带权区间最短路问题36610.4.2 算法设计思想36710.4.3 算法实现方案36910.4.4 并查集37310.4.5 可并优先队列37610.5 优化搜索策略380小结388习题388第11章在线算法设计39111.1 在线算法设计的基本概念39111.2 页调度问题39311.3 势函数分析39511.4 k 服务问题39711.4.1 竞争比的下界39711.4.2 平衡算法39911.4.3 对称移动算法39911.5 Steiner树问题40311.6 在线任务调度40511.7 负载平衡406小结407习题407词汇索引409参考文献415习题1-1 实参交换1习题1-2 方法头签名1习题1-3 数组排序判定1习题1-4 函数的渐近表达式2习题1-5 O(1) 和 O(2) 的区别2习题1-7 按渐近阶排列表达式2习题1-8 算法效率2习题1-9 硬件效率3习题1-10 函数渐近阶3习题1-11 n !的阶4习题1-12 平均情况下的计算时间复杂性4算法实现题1-1 统计数字问题4算法实现题1-2 字典序问题5算法实现题1-3 最多约数问题6算法实现题1-4 金币阵列问题8算法实现题1-5 最大间隙问题11第2章递归与分治策略14 习题2-1 Hanoi 塔问题的非递归算法14习题2-2 7个二分搜索算法15习题2-3 改写二分搜索算法18习题2-4 大整数乘法的 O(nm log(3/2))算法19习题2-5 5次 n /3位整数的乘法19习题2-6 矩阵乘法21习题2-7 多项式乘积21习题2-8 不动点问题的 O( log n) 时间算法22习题2-9 主元素问题的线性时间算法22习题2-10 无序集主元素问题的线性时间算法22习题2-11 O (1)空间子数组换位算法23习题2-12 O (1)空间合并算法25习题2-13 n 段合并排序算法32习题2-14 自然合并排序算法32习题2-15 最大值和最小值问题的最优算法35习题2-16 最大值和次大值问题的最优算法35习题2-17 整数集合排序35习题2-18 第 k 小元素问题的计算时间下界36习题2-19 非增序快速排序算法37习题2-20 随机化算法37习题2-21 随机化快速排序算法38习题2-22 随机排列算法38习题2-23 算法qSort中的尾递归38习题2-24 用栈模拟递归38习题2-25 算法select中的元素划分39习题2-26 O(n log n) 时间快速排序算法40习题2-27 最接近中位数的 k 个数40习题2-28 X和Y 的中位数40习题2-29 网络开关设计41习题2-32 带权中位数问题42习题2-34 构造Gray码的分治算法43习题2-35 网球循环赛日程表44目录算法设计与分析习题解答(第2版)算法实现题2-1 输油管道问题(习题2-30) 49算法实现题2-2 众数问题(习题2-31) 50算法实现题2-3 邮局选址问题(习题2-32) 51算法实现题2-4 马的Hamilton周游路线问题(习题2-33) 51算法实现题2-5 半数集问题60算法实现题2-6 半数单集问题62算法实现题2-7 士兵站队问题63算法实现题2-8 有重复元素的排列问题63算法实现题2-9 排列的字典序问题65算法实现题2-10 集合划分问题(一)67算法实现题2-11 集合划分问题(二)68算法实现题2-12 双色Hanoi塔问题69算法实现题2-13 标准二维表问题71算法实现题2-14 整数因子分解问题72算法实现题2-15 有向直线2中值问题72第3章动态规划76习题3-1 最长单调递增子序列76习题3-2 最长单调递增子序列的 O(n log n) 算法77习题3-7 漂亮打印78习题3-11 整数线性规划问题79习题3-12 二维背包问题80习题3-14 Ackermann函数81习题3-17 最短行驶路线83习题3-19 最优旅行路线83算法实现题3-1 独立任务最优调度问题(习题3-3) 83算法实现题3-2 最少硬币问题(习题3-4) 85算法实现题3-3 序关系计数问题(习题3-5) 86算法实现题3-4 多重幂计数问题(习题3-6) 87算法实现题3-5 编辑距离问题(习题3-8) 87算法实现题3-6 石子合并问题(习题3-9) 89算法实现题3-7 数字三角形问题(习题3-10) 91算法实现题3-8 乘法表问题(习题3-13) 92算法实现题3-9 租用游艇问题(习题3-15) 93算法实现题3-10 汽车加油行驶问题(习题3-16) 95算法实现题3-11 圈乘运算问题(习题3-18) 96算法实现题3-12 最少费用购物(习题3-20) 102算法实现题3-13 最大长方体问题(习题3-21) 104算法实现题3-14 正则表达式匹配问题(习题3-22) 105算法实现题3-15 双调旅行售货员问题(习题3-23) 110算法实现题3-16 最大 k 乘积问题(习题5-24) 111算法实现题3-17 最小 m 段和问题113算法实现题3-18 红黑树的红色内结点问题115第4章贪心算法123 习题4-2 活动安排问题的贪心选择123习题4-3 背包问题的贪心选择性质123习题4-4 特殊的0-1背包问题124习题4-10 程序最优存储问题124习题4-13 最优装载问题的贪心算法125习题4-18 Fibonacci序列的Huffman编码125习题4-19 最优前缀码的编码序列125习题4-21 任务集独立性问题126习题4-22 矩阵拟阵126习题4-23 最小权最大独立子集拟阵126习题4-27 整数边权Prim算法126习题4-28 最大权最小生成树127习题4-29 最短路径的负边权127习题4-30 整数边权Dijkstra算法127算法实现题4-1 会场安排问题(习题4-1) 128算法实现题4-2 最优合并问题(习题4-5) 129算法实现题4-3 磁带最优存储问题(习题4-6) 130算法实现题4-4 磁盘文件最优存储问题(习题4-7) 131算法实现题4-5 程序存储问题(习题4-8) 132算法实现题4-6 最优服务次序问题(习题4-11) 133算法实现题4-7 多处最优服务次序问题(习题4-12) 134算法实现题4-8 d 森林问题(习题4-14) 135算法实现题4-9 汽车加油问题(习题4-16) 137算法实现题4-10 区间覆盖问题(习题4-17) 138算法实现题4-11 硬币找钱问题(习题4-24) 138算法实现题4-12 删数问题(习题4-25) 139算法实现题4-13 数列极差问题(习题4-26) 140算法实现题4-14 嵌套箱问题(习题4-31) 140算法实现题4-15 套汇问题(习题4-32) 142算法实现题4-16 信号增强装置问题(习题5-17) 143算法实现题4-17 磁带最大利用率问题(习题4-9) 144算法实现题4-18 非单位时间任务安排问题(习题4-15) 145算法实现题4-19 多元Huffman编码问题(习题4-20) 147算法实现题4-20 多元Huffman编码变形149算法实现题4-21 区间相交问题151算法实现题4-22 任务时间表问题151第5章回溯法153习题5\|1 装载问题改进回溯法(一)153习题5\|2 装载问题改进回溯法(二)154习题5\|4 0-1背包问题的最优解155习题5\|5 最大团问题的迭代回溯法156习题5\|7 旅行售货员问题的费用上界157习题5\|8 旅行售货员问题的上界函数158算法实现题5-1 子集和问题(习题5-3) 159算法实现题5-2 最小长度电路板排列问题(习题5-9) 160算法实现题5-3 最小重量机器设计问题(习题5-10) 163算法实现题5-4 运动员最佳匹配问题(习题5-11) 164算法实现题5-5 无分隔符字典问题(习题5-12) 165算法实现题5-6 无和集问题(习题5-13) 167算法实现题5-7 n 色方柱问题(习题5-14) 168算法实现题5-8 整数变换问题(习题5-15) 173算法实现题5-9 拉丁矩阵问题(习题5-16) 175算法实现题5-10 排列宝石问题(习题5-16) 176算法实现题5-11 重复拉丁矩阵问题(习题5-16) 179算法实现题5-12 罗密欧与朱丽叶的迷宫问题181算法实现题5-13 工作分配问题(习题5-18) 183算法实现题5-14 独立钻石跳棋问题(习题5-19) 184算法实现题5-15 智力拼图问题(习题5-20) 191算法实现题5-16 布线问题(习题5-21) 198算法实现题5-17 最佳调度问题(习题5-22) 200算法实现题5-18 无优先级运算问题(习题5-23) 201算法实现题5-19 世界名画陈列馆问题(习题5-25) 203算法实现题5-20 世界名画陈列馆问题(不重复监视)(习题5-26) 207 算法实现题5-21 部落卫队问题(习题5-6) 209算法实现题5-22 虫蚀算式问题211算法实现题5-23 完备环序列问题214算法实现题5-24 离散01串问题217算法实现题5-25 喷漆机器人问题218算法实现题5-26 n 2-1谜问题221第6章分支限界法229习题6-1 0-1背包问题的栈式分支限界法229习题6-2 用最大堆存储活结点的优先队列式分支限界法231习题6-3 团顶点数的上界234习题6-4 团顶点数改进的上界235习题6-5 修改解旅行售货员问题的分支限界法235习题6-6 解旅行售货员问题的分支限界法中保存已产生的排列树237 习题6-7 电路板排列问题的队列式分支限界法239算法实现题6-1 最小长度电路板排列问题一(习题6-8) 241算法实现题6-2 最小长度电路板排列问题二(习题6-9) 244算法实现题6-3 最小权顶点覆盖问题(习题6-10) 247算法实现题6-4 无向图的最大割问题(习题6-11) 250算法实现题6-5 最小重量机器设计问题(习题6-12) 253算法实现题6-6 运动员最佳匹配问题(习题6-13) 256算法实现题6-7 n 后问题(习题6-15) 259算法实现题6-8 圆排列问题(习题6-16) 260算法实现题6-9 布线问题(习题6-17) 263算法实现题6-10 最佳调度问题(习题6-18) 265算法实现题6-11 无优先级运算问题(习题6-19) 268算法实现题6-12 世界名画陈列馆问题(习题6-21) 271算法实现题6-13 骑士征途问题274算法实现题6-14 推箱子问题275算法实现题6-15 图形变换问题281算法实现题6-16 行列变换问题284算法实现题6-17 重排 n 2宫问题285算法实现题6-18 最长距离问题290第7章概率算法296习题7-1 模拟正态分布随机变量296习题7-2 随机抽样算法297习题7-3 随机产生 m 个整数297习题7-4 集合大小的概率算法298习题7-5 生日问题299习题7-6 易验证问题的拉斯维加斯算法300习题7-7 用数组模拟有序链表300习题7-8 O(n 3/2)舍伍德型排序算法300习题7-9 n 后问题解的存在性301习题7-11 整数因子分解算法302习题7-12 非蒙特卡罗算法的例子302习题7-13 重复3次的蒙特卡罗算法303习题7-14 集合随机元素算法304习题7-15 由蒙特卡罗算法构造拉斯维加斯算法305习题7-16 产生素数算法306习题7-18 矩阵方程问题306算法实现题7-1 模平方根问题(习题7-10) 307算法实现题7-2 集合相等问题(习题7-17) 309算法实现题7-3 逆矩阵问题(习题7-19) 309算法实现题7-4 多项式乘积问题(习题7-20) 310算法实现题7-5 皇后控制问题311算法实现题7-6 3-SAT问题314算法实现题7-7 战车问题315算法实现题7-8 圆排列问题317算法实现题7-9 骑士控制问题319算法实现题7-10 骑士对攻问题320第8章NP完全性理论322 习题8-1 RAM和RASP程序322习题8-2 RAM和RASP程序的复杂性322习题8-3 计算 n n 的RAM程序322习题8-4 没有MULT和DIV指令的RAM程序324习题8-5 MULT和DIV指令的计算能力324习题8-6 RAM和RASP的空间复杂性325习题8-7 行列式的直线式程序325习题8-8 求和的3带图灵机325习题8-9 模拟RAM指令325习题8-10 计算2 2 n 的RAM程序325习题8-11 计算 g(m,n)的程序 326习题8-12 图灵机模拟RAM的时间上界326习题8-13 图的同构问题326习题8-14 哈密顿回路327习题8-15 P类语言的封闭性327习题8-16 NP类语言的封闭性328习题8-17 语言的2 O (n k) 时间判定算法328习题8-18 P CO -NP329习题8-19 NP≠CO -NP329习题8-20 重言布尔表达式329习题8-21 关系∝ p的传递性329习题8-22 L ∝ p 330习题8-23 语言的完全性330习题8-24 的CO-NP完全性330习题8-25 判定重言式的CO-NP完全性331习题8-26 析取范式的可满足性331习题8-27 2-SAT问题的线性时间算法331习题8-28 整数规划问题332习题8-29 划分问题333习题8-30 最长简单回路问题334第9章近似算法336习题9-1 平面图着色问题的绝对近似算法336习题9-2 最优程序存储问题336习题9-4 树的最优顶点覆盖337习题9-5 顶点覆盖算法的性能比339习题9-6 团的常数性能比近似算法339习题9-9 售货员问题的常数性能比近似算法340习题9-10 瓶颈旅行售货员问题340习题9-11 最优旅行售货员回路不自相交342习题9-14 集合覆盖问题的实例342习题9-16 多机调度问题的近似算法343习题9-17 LPT算法的最坏情况实例345习题9-18 多机调度问题的多项式时间近似算法345算法实现题9-1 旅行售货员问题的近似算法(习题9-9) 346 算法实现题9-2 可满足问题的近似算法(习题9-20) 348算法实现题9-3 最大可满足问题的近似算法(习题9-21) 349 算法实现题9-4 子集和问题的近似算法(习题9-15) 351算法实现题9-5 子集和问题的完全多项式时间近似算法352算法实现题9-6 实现算法greedySetCover(习题9-13) 352算法实现题9-7 装箱问题的近似算法First Fit(习题9-19) 356算法实现题9-8 装箱问题的近似算法Best Fit(习题9-19) 358算法实现题9-9 装箱问题的近似算法First Fit Decreasing(习题9-19) 360算法实现题9-10 装箱问题的近似算法Best Fit Decreasing(习题9-19) 361算法实现题9-11 装箱问题的近似算法Next Fit361第10章算法优化策略365 习题10-1 算法obst的正确性365习题10-2 矩阵连乘问题的 O(n 2) 时间算法365习题10-6 货物储运问题的费用371习题10-7 Garsia算法371算法实现题10-1 货物储运问题(习题10-3) 374算法实现题10-2 石子合并问题(习题10-4) 374算法实现题10-3 最大运输费用货物储运问题(习题10-5) 375算法实现题10-4 五边形问题377算法实现题10-5 区间图最短路问题(习题10-8) 381算法实现题10-6 圆弧区间最短路问题(习题10-9) 381算法实现题10-7 双机调度问题(习题10-10) 382算法实现题10-8 离线最小值问题(习题10-11) 390算法实现题10-9 最近公共祖先问题(习题10-12) 393算法实现题10-10 达尔文芯片问题395算法实现题10-11 多柱Hanoi塔问题397算法实现题10-12 线性时间Huffman算法400算法实现题10-13 单机调度问题402算法实现题10-14 最大费用单机调度问题405算法实现题10-15 飞机加油问题408第11章在线算法设计410习题11-1 在线算法LFU的竞争性410习题11-4 多读写头磁盘问题的在线算法410习题11-6 带权页调度问题410算法实现题11-1 最优页调度问题(习题11-2) 411算法实现题11-2 在线LRU页调度(习题11-3) 414算法实现题11-3 k 服务问题(习题11-5) 416参考文献422。

《算法统宗》范文

《算法统宗》范文

《算法统宗》范文
《算法统宗》共分为十个章节,每一章节都深入浅出地介绍了不同的
算法。

第一章主要是算法的基础概念和分析方法,包括算法的定义、特性、时间复杂度和空间复杂度等。

第二章则重点介绍了排序算法,包括冒泡排序、插入排序、快速排序等常见排序算法和它们的性能分析。

第三章则讲
解了递归算法,包括递归的原理、递归函数的设计和应用等。

第四章介绍
了动态规划算法,包括最优子结构、重叠子问题和状态转移方程等相关概念。

第五章则介绍了贪心算法,包括贪心选择性质、最优子结构性质和贪
心算法的设计与证明等。

第六章至第八章分别讲解了图论算法、字符串匹配算法和几何算法。

其中,图论算法主要涉及最短路径、最小生成树和网络流等问题;字符串
匹配算法则主要介绍了暴力匹配、KMP算法和Boyer-Moore算法等常见的
字符串匹配算法;几何算法则介绍了平面几何和立体几何中的一些基本算
法和技巧。

第九章则讲解了近似算法,主要是介绍了NP问题和近似算法的一些
基本思想和应用。

最后一章则是一些其他算法的扩展和应用,包括计算几何、模拟退火和遗传算法等。

总之,《算法统宗》是一本经典的算法学教材,具有深入浅出、权威
全面的特点。

无论是作为算法学的入门教材,还是作为参考书籍,都是计
算机科学相关领域的学习者必备的一本书。

第八章 近似算法及其分类

第八章 近似算法及其分类
ai ∈S k
闲策略用到 S′ 上仍有 NI( S′ )=
a ∑
ai∈S R
i
,而 OP( S′ )≤OP(S).从而有
4 1 NI ( S ) NI ( S ′) - < ≤ . 3 3m OP( S ) OP( S ′)
也是一个反例,但 l<n,这与 n 的假设矛盾,从而 an∈Sk.由非空闲策略可知对一 即 S′ 切 j=1,2,…,n,且 j≠k 有 NI(S)-an≤ 由此可得 NI(S)-an≤
a ∑
ai∈S j
i
1 m
ai ∑
i =1
n −1
1 NI(S)≤ m
由于 OP(S)≥
m −1 ∑ an ai +
n i =1
m
1 m
∑ ai ,所以有
i =1
n
214
NI(S)≤OP(S)+ 由反证法的假设和上式得
m −1 an m
4 1 NI ( S ) m − 1 an - < ≤1 + 3 3m OP( S ) m OP( S )
211
8.2 非空闲策略(no idle time policy) . 通俗地说,非空闲策略是指:“只要有事干就不要窝工.”尽管这个策略未必是最优的, 但通常情况下还是比较好的.下面用一些例子说明. 例 8.2.1 (排序问题)设有 n 个工件要在 m 台相同的机床上加工,我们用 T={T1, T2,…,Tn}表示工件的集合;用 P1,P2,…,Pm 表示 m 台相同的机床,工件集合 T 上有一 个偏序关系“≤”,使得 Ti≤Tj 当且仅当 Ti 加工完后才能开始加工 Tj.对每一个 Ti,需要加工时 间 Ti.在进行加工时要满足下述规则: 任一台机床不能同时加工两个或两个以上的工件;每个工件必须而且只需在一台机床上 加工,而且一旦开始加工,中间不允许中断;若 Ti≤Tj,则必须完成 Ti 后,Tj 才能开始加工, 在满足上述条件下,如何安排任务的一个加工时间表,使完成全部工件的加工所用时间流程 最短? 一个工件 Tj 是称为待加工的,如果对一切 Ti≤Tj,Ti 已加工完,但 Tj 尚未开始加工.一个 主次表 L,就是所有工件的一个排列,例如 L=(Ti1,Ti2,…,Tin)就是一个主次表.如何选 取主次表,完全由人们的主观偏爱所确定.一般地按 Ti 由大到小的次序排列. 非空闲策略 NI: 给定一个主次表 L,不妨设为 L=(T1,T2,…,Tn)所有空闲的机床同时从左自右地搜 索主次表 L,当发现待加工工件时,如 Tj,则将 Tj 分配给具有最小下标的空闲机床 Pi,并从 L 中去掉 Tj.重复这个过程,直至所有工件加工完. 如 T={T1,T2,…,T11},T 上的偏序关系如下:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6
第11章 近似算法
11.2.1 顶点覆盖问题 11.2.2 TSP问题
2020/6/24
Dlgorithm
7
11.2.1 顶点覆盖问题
问题描述:
无向图G=(V,E)的顶点覆盖问题:指是它的顶点集V 的一个
子集V’V,使得:若(u,v) 是G的一条边,则v∈V’ 或u∈V’。顶
= max
c c*
,
c *
c
在通常情况下, 是问题输入规模n的一个函数ρ(n),即:
max
c c*
,
c *
c
≤ρ(n)
2020/6/24
Design and Analysis of Algorithm
3
与近似比率相关的问题
对最小化问题,有:C≥C* 对最大化问题,有:C≤C* 近似算法 C 的近似比率 ρ(n) 总大于或等于1 近似算法的近似比率越小,则算法的性能越好 近似算法的近似比率越大,则算法的性能越差
FF 算法
算法12.3 装箱问题的首次适宜算法 输入:n 个物体的体积 s[], 箱子的容量 C 输出:装入箱子的个数 k ,每个箱子中装入的物体累计体积 b[]
2020/6/24
Design and Analysis of Algorithm
21
例如,有10个物品,其体积分别为S=(4, 2, 7, 3, 5, 4,
/* 箱子初始化为空 */
6. b[i] = 0;
7. for (i=0;i<n;i++) {
/* 按物体顺序装入 */
8. j = 0;
9. while ((C-b[j])<s[i])) /* 检索能容纳物体i的下标最小的箱子j */
10.
j++;
11. b[j] += s[i];
12. k = max(k,j);
图(a)~(e)说明 了算法的运行过程 及结果。(e)表示 算法产生的近似最 优顶点覆盖cset, 它由顶点 b,c,d,e,f,g所组 成。(f)是图G的一 个最小顶点覆盖, 它只含有3个顶点: b,d和e。
算法approxVertexCover的性能比为2。
2020/6/24
Design and Analysis of Algorithm
/* 已装入物体的箱子最大下标 */
13. }
14. k++;
ε(n)≤ρ(n)-1
2020/6/24
Design and Analysis of Algorithm
5
第11章 近似算法
11.1 概 述
11.2 图问题中的近似法 11.3 组合问题中的近似法 *11.4 实验项目——TSP问题的近似法
2020/6/24
Design and Analysis of Algorithm
return c
cset用来存储顶点 覆盖中的各顶点。初
始为空,不断从边集 e1中选取一边(u,v), 将边的端点加入cset 中,并将e1中已被u 和v覆盖的边删去, 直至cset已覆盖所有 边。即e1为空。
}
2020/6/24
Design and Analysis of Algorithm
8
11.2.1 顶点覆盖问题
2, 3, 6, 2),若干个容量为10的箱子,采用首次适宜法得 到的装箱结果如图11.3所示。
0.3(s4) 0.2(s2) 0.4(s1)
0.2(s7) 0.7(s3)
0.4(s6) 0.5(s5)
0.6(s9) 0.3(s8)
(a) 箱子1
(b) 箱子2 (c) 箱子3 (d) 箱子4 (e) 箱子5 图11.3 首次适宜法求解装箱问题示例(阴影表示闲置部分)
成树T,如图(b)所示,图中粗线表示最小生成树中的边, 然后对T进行深度优先遍历,经过的路线为 a→b→c→b→h→b→a→d→e→f→e→g→e→d→a , 得 到 遍 历序列L=(a, b, c, h, d, e, f, g),由序列L得到哈密顿
回 路 , 即 近 似 最 优 解 , 如 图 (d) 所 示 , 其 路 径 长 度 约 为 19.074 , 图 (e) 所 示 是 (a) 的 最 优 解 , 其 路 径 长 度 约 为 16.084。
19
11.3.1 装箱问题
装箱问题描述
给定n个物体u1,u2,…,un ,体积分别为s1,s2,…,sn ,容量为
C的箱子b1,b2,…,bk ,…,满足 si≤ C, i=1,2,…,n。要求物体
不能分割,把所有物体装进箱子,使所装入的箱子尽可 能少。
装箱问题的四种算法
First Fit(首次适宜FF)算法 把箱子按下标标记,所有的箱子初始化为空;按物体 顺序装入箱子。装入过程如下: 把第一个物体u1装入第一个箱子
对于给定的无向图G,可以利用找图G的最小生成树的算 法设计找近似最优的旅行售货员回路的算法。
void approxTSP (Graph g) {
(1)选择 G的任一顶点 r; (2)用 Prim 算法找出带权图 G 的一棵以r 为根的最小生成树 T; (3)对生成树T从顶点r出发进行深度优先遍历,得遍历序列 L; (4)将r 加到表 L 的末尾,按表 L 中顶点次序组成回路H,作为
近似算法性能的两个重要指标
对于规模为n 的问题 算法能在多项式时间内完成 算法的近似解满足一定的精度,即近似最优解的近似程度
2020/6/24
Design and Analysis of Algorithm
2
11.1 概 述
近似算法的性能
近似比
若一个问题的最优值为c*,该问题的一个近似最优解的 目标函数值为c,则近似算法的性能比可定义为:
点覆盖V’ 的大小是它所包含的顶点个数 |V’|。
VertexSet approxVertexCover ( Graph g )
{ cset=; e1=g.e; while (e1 != ) {
从e1中任取一条边(u,v);
cset=cset∪{u,v};
从e1 中删去与u 和v 相关联的所有边;
}
9
11.2.1 顶点覆盖问题
时间复杂性:
cset可用数组来存储各顶点,则初始化cset需要执行n次, 设图G含有n个顶点e条边,则算法的时间复杂性为 O(n+e)
近似比
若用A表示算法在“从e1中任取一条边(u,v)”步骤中选取 的边的集合,则A中任何两条边没公共顶点。算法结束时, cset中的顶点数|V’|=2|A|。
2020/6/24
Design and Analysis of Algorithm
17
11.2.2 一般的旅行售货员问题
在费用函数不一定满足三角不等式的一般情况下, 不存在具有常数性能比的解TSP问题的多项式时间 近似算法,除非P=NP。换句话说,若P≠NP,则对 任意常数ρ>1,不存在性能比为ρ的解旅行售货员问 题的多项式时间近似算法。
2020/6/24
Design and Analysis of Algorithm
18
第11章 近似算法
11.1 概 述
11.2 图问题中的近似法 11.3 组合问题中的近似法 *11.4 实验项目——TSP问题的近似法
2020/6/24
Design and Analysis of Algorithm
首次适宜法求解装箱问题的算法如下:
0.2(s10)
11.3.1 装箱问题
算法11.3——FF 算法
1. void first_fit(float s[],int n,float C,float b[],int &k)
2. {
3. int i,j;
4. k = 0;
/* 装入物体的箱子下标 */
5. for (i=0;i<n;i++)
2020/6/24
Design and Analysis of Algorithm
11
11.2.2 旅行售货员问题
问题描述:
给定一个完全无向图G=(V,E),其每一边(u,v)∈E有一非负
整数费用 c(u,v)。要找出G 的最小费用哈密顿回路。
TSP 问题的一些特殊性质:
比如,费用函数c 往往具有三角不等式性质,即对任意
2020/6/24
Design and Analysis of Algorithm
4
11.1 概 述
近似算法的相对误差与相对误差界ε(n) = c c *
c*
若对问题的输入规模n,有一函数ε(n)使得:
c c*
c * ≤ε(n) 则称ε(n)为该近似算法的相对误差界。 近似比ρ(n)与相对误差ε(n)间关系 ρ(n)与ε(n)之间显然有如下关系:
2020/6/24
Design and Analysis of Algorithm
1
11.1 概 述
近似算法的依据
输入数据本身就是近似的,如测量数据 很多问题的最优解,允许有一定程度的近似 采用近似算法可以在很短的时间内得到问题的解(特别是
与指数时间相比较)
其思想是用近似最优解代替最优解,是在计算量和精确解 间的一个折中
11.2.2 具有三角不等式性质的 旅行售货员问题举例
2020/6/24
(b)表示找到的最小生成 树T;(c)表示对T作深度 优先遍历的次序;(d)表 示L产生的哈密顿回路H; (e)是G的一个最小费用 旅行售货员回路。
Design and Analysis of Algorithm
14
11.2.2 具有三角不等式性质的 旅行售货员问题
的3个顶点u,v,w∈V,有:c(u,w)≤c(u,v)+c(v,w)。当图G中的
相关文档
最新文档