1 / 192
文档名称:

公共基础知识.doc

格式:doc   大小:6,691KB   页数:192页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

公共基础知识.doc

上传人:neryka98 2018/1/21 文件大小:6.53 MB

下载得到文件列表

公共基础知识.doc

文档介绍

文档介绍:第1章数据结构与算法
算法

算法(Algorithm)是任意一个良定义的计算过程,是对特定问题求解步骤的一种描述,它以一个或多个值作为输入,并产生一个或多个值作为输出。因此,算法是一系列将输入转化成输出的计算步骤,一个算法也可以被认为是用来解决一个计算问题的工具,计算问题的陈述指定了所想要的输入输出之间的关系,而相应的算法则描述了达到这种关系的计算过程。
1)算法的基本特征
(1)可行性
由于算法的设计是为了在某一个特定的计算工具上解决某一个实际的问题而设计的,因此,必须是正确的,可以实现的。
(2)确定性
算法的设计必须是每一个步骤都有明确的定义
,不允许有模糊的解释,也不能有多义性。
(3)有穷性
算法的有穷性,即在一定的时间是能够完成的,即算法应该在计算有限个步骤后能够正常结束。
(4)拥有足够的情报
算法的执行与输入的数据和提供的初始条件相关,不同的输入或初始条件会有不同的输出结果,提供准确的初始条件和数据,才能使算法正确执行。
2)算法的基本要素
一是数据对象的运算和操作,二是算法的控制结构。
(1)算法中对数据的运算和操作
算法实际上是按解题要求从环境能进行的所有操作中选择合适的操作所组成的一组指令序列。即算法是计算机所能够处理的操作所组成的指令序列。基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输
(2)算法的控制结构
算法的功能不仅取决于所选用的操作,而且还与各操作之间的顺序有关。
在算法中,操作的执行顺序又称算法的控制结构,一般的算法控制结构有三种:顺序结构、选择结构和循环结构。
在算法描述是,有相关的工具对这三种结构进行描述,常用的描述工具有:流程图、N-S结构图和算法描述语言等。
3)算法设计的基本方法
为用计算机解决实际问题而设计的算法,即是计算机算法。
通常的算法设计有如下几种:
(1)列举法
列举法的基本思想是,根据提出的问题,列举出所有可能的情况,并用问题中给定的条件检验哪些是满足条件的,哪些是不满足条件的。列举法通常用于解决“是否存在”或“有哪些可能”等问题。
例如,我国古代的趣味数学题:“百钱买百鸡”、“鸡兔同笼”等,均可采用列举法进行解决。
(2)归纳法
归纳法的基本思想是,通过列举少量的特殊情况,经过分析,最后找出一般的关系。归纳是一种抽象,即从特殊现象中找出一般规律。但由于在归纳法中不可能对所有的情况进行列举,因此,该方法得到的结论只是一种猜测,还需要进行证明。
(3)递推
递推,即是从已知的初始条件出发,逐次推出所要求的各个中间环节和最后结果。其中初始条件或问题本身已经给定,或是通过对问题的分析与化简而确定。递推的本质也是一种归纳,递推关系式通常是归纳的结果。
例如,裴波那契数列,是采用递推的方法解决问题的。
(4)递归
在解决一些复杂问题时,为了降低问题的复杂程序,通常是将问题逐层分解,最后归结为一些最简单的问题。这种将问题逐层分解的过程,并没有对问题进行求解,而只是当解决了最后的问题那些最简单的问题后,再沿着原来分解的逆过程逐步进行综合,这就是递归的方法。例如,汉诺塔
递归分为直接递归和间接递归两种方法。如果一个算法直接调用自己,称为直接递归调用;如果一个算法A 调用另一个算法B,而算法B 又调用算法A,则此种递归称为间接递归调用。
(5)减半递推技术
减半递推即将问题的规模减半,然后,重复相同的递推操作。就是所谓的分治法,对问题分而治之。
例如,二分法求解一元二次方程、二分法查找
(6)回溯法
有些实际的问题很难归纳出一组简单的递推公式或直观的求解步骤,也不能使用无限的列举。对于这类问题,只能采用试探的方法,
通过对问题的分析,找出解决问题的线索,然后沿着这个线索进行试探,如果试探成功,就得到问题的解,如果不成功,再逐步回退,换别的路线进行试探。这种方法,即称为回溯法。
如人工智能中的机器人下棋。

算法的复杂度包括时间复杂度和空间复杂度。
1)时间复杂度
即实现该算法需要的计算工作量,算法的执行速率与数据的存储结构有关,与所使用的计算机、程序设计语言以及程序编制者无关。算法的工作量用算法所执行的基本运算次数(语句的频度)来计算。通常指循环操作。基本运算次数还与问题的规模有关。
通常用O(1)表示常数计算时间。
常见的渐进时间复杂度有:O(1)<O(log2n ) <O(n)<O(n log2n)<O(n
2)<O(n3)<O(2n)<O(n!)<O(nn)
2)算法的空间复杂度
指要执行该算法所需要的内存空间。算法所占用的内存空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间,如执行过程