计算机算法设计五大常用算法的分析及实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。
其中最常见的五中基本算法是递归与分治法、动态规划、贪心算法、回溯法、分支限界法。本文通过这种算法的分析以及实例的讲解,让读者对算法有更深刻的认识,同时对这五种算法有更清楚认识
关键词:算法,递归与分治法、动态规划、贪心算法、回溯法、分支限界法
Abstract
Algorithm is the description to the problem solving scheme,a set of clear instructions to solve the problem and represents the describe the strategy to solve the problem using the method of system mechanism . That is to say, given some confirm import,the Algorithm will find result In a limited time。If an algorithm is defective or is not suitable for a certain job, it is invalid to execute it. Different algorithms have different need of time or space, and it's efficiency are different.
There are most common algorithms: the recursive and divide and conquer、dynamic programming method、greedy algorithm、backtracking、branch and bound method.According to analyze the five algorithms and explain examples, make readers know more about algorithm , and understand the five algorithms more deeply.
Keywords: Algorithm, the recursive and divide and conquer, dynamic programming method, greedy algorithm、backtracking, branch and bound method
目录
1. 前言 (4)
1.1 论文背景 (4)
2. 算法详解 (5)
2.1 算法与程序 (5)
2.2 表达算法的抽象机制 (5)
2.3 算法复杂性分析 (5)
3.五中常用算法的详解及实例 (6)
3.1 递归与分治策略 (6)
3.1.1 递归与分治策略基本思想 (6)
3.1.2 实例——棋盘覆盖 (7)
3.2 动态规划 (8)
3.2.1 动态规划基本思想 (8)
3.2.2 动态规划算法的基本步骤 (9)
3.2.3 实例——矩阵连乘 (9)
3.3 贪心算法 (11)
3.3.1 贪心算法基本思想 (11)
3.3.2 贪心算法和动态规划的区别 (12)
3.3.3 用贪心算法解背包问题的基本步骤: (12)
3.4 回溯发 (13)
3.4.1 回溯法基本思想 (13)
3.3.2 回溯发解题基本步骤 (13)
3.3.3 实例——0-1背包问题 (14)
3.5 分支限界法 (15)
3.5.1 分支限界法思想 (15)
3.5.2 实例——装载问题 (16)
总结 (18)
参考文献 (18)
1. 前言
1.1 论文背景
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。
一个算法的优劣可以用空间复杂度与时间复杂度来衡量。算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。计算机的有限资源促使人们关注程序的执行性能,进而催生了计算机算法这一研究领域。自上世纪60年代开始至今,已出现了大量解决不同问题的有效算法。由于属于同一问题类的不同问题之间具有相似性,其解决算法也具有一定的共性,因此产生了一般的算法设计技术,如递归技术、分治、动态规划、贪心、图的遍历、回溯、分支限界等。掌握算法、分析算法、将算法应用到其他领域、创造更高效的算法,是对每一个计算机学着的基本要求。
本文主要分析五中常用的算法(递归与分治法、动态规划、贪心算法、回溯发、分支限界发),以及对相应算法的实例详细讲解。通过对五中常用算法的单独讲解、综合对比,分析出各种算法的特点以及适用领域,最后列举相应的算法实例,让读者对这五中常用算法有更深的了解。
2. 算法详解
2.1 算法与程序
算法:是满足下述性质的指令序列。
•输入:有零个或多个外部量作为算法的输入。
•输出:算法产生至少一个量作为输出。
•确定性:组成算法的每条指令清晰、无歧义。
•有限性:算法中每条指令的执行次数有限,执行
每条指令的时间也有限。
程序:
是算法用某种程序设计语言的具体实现。
程序可以不满足算法的性质(4)即有限性。
2.2 表达算法的抽象机制
1.从机器语言到高级语言的抽象
高级程序设计语言的主要好处是:
(1)高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需
要几周时间的培训就可以胜任程序员的工作;
(2)高级语言为程序员提供了结构化程序设计的环境和工具,使得设计
出来的程序可读性好,可维护性强,可靠性高;
(3)高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而
所写出来的程序可植性好、重用率高
2.抽象数据类型
抽象数据类型是算法的一个数据模型连同定义在该模型上
并作为算法构件的一组运算。
抽象数据类型带给算法设计的好处有:
(1)算法顶层设计与底层实现分离;
(2)算法设计与数据结构设计隔开,允许数据结构自由选择;
(3)数据模型和该模型上的运算统一在ADT中,便于空间和时间耗费的折衷;(4)用抽象数据类型表述的算法具有很好的可维护性;
(5)算法自然呈现模块化;
(6)为自顶向下逐步求精和模块化提供有效途径和工具;
(7)算法结构清晰,层次分明,便于算法正确性的证明和复杂性的分析。2.3 算法复杂性分析
算法复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要的空间资源的量称为空间复杂性。这个量应该只依赖于算法要解的问题的规模、算法的输入和算法本身的函数。如果分别用N、I和A表示算法要解问题的规模、算法的输入和算法本身,而且用C表示复杂性,那么,应