考点分析之数据结构与算法.docx

上传人:b****8 文档编号:10565683 上传时间:2023-02-21 格式:DOCX 页数:30 大小:28.33KB
下载 相关 举报
考点分析之数据结构与算法.docx_第1页
第1页 / 共30页
考点分析之数据结构与算法.docx_第2页
第2页 / 共30页
考点分析之数据结构与算法.docx_第3页
第3页 / 共30页
考点分析之数据结构与算法.docx_第4页
第4页 / 共30页
考点分析之数据结构与算法.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

考点分析之数据结构与算法.docx

《考点分析之数据结构与算法.docx》由会员分享,可在线阅读,更多相关《考点分析之数据结构与算法.docx(30页珍藏版)》请在冰豆网上搜索。

考点分析之数据结构与算法.docx

考点分析之数据结构与算法

考点1算法的基本概念

  计算机解题的过程实际上是在实施某种算法,这种算法称为计算

机算法。

  算法(algorithm)是一组严谨地定义运算顺序的规则,并且每一个

规则都是有效的,同时是明确的;此顺序将在有限的次数后终止。

法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每

一条指令表示一个或多个操作。

  1算法的基本特征

   

(1)可行性(effectiveness):

针对实际问题而设计的算法,

执行后能够得到满意的结果。

   

(2)确定性(definiteness):

算法中的每一个步骤都必须有明

确的定义,不允许有模棱两可的解释和多义性。

  (3)有穷性(finiteness):

算法必需在有限时间内做完,即算

法必需能在执行有限个步骤之后终止。

  (4)拥有足够的情报:

要使算法有效必需为算法提供足够的情

报当算法拥有足够的情报时,此算法才最有效的;而当提供的情报不

够时,算法可能无效。

  2算法的基本要素

  

(1)算法中对数据的运算和操作:

每个算法实际上是按解题要

求从环境能进行的所有操作中选择合适的操作所组成的一组指令序列

  计算机可以执行的基本操作是以指令的形式描述的。

一个计算机

系统能执行的所有指令的集合,称为该计算机系统的指令系统。

计算

机程序就是按解题要求从计算机指令系统中选择合适的指令所组成的

指令序列在一般的计算机系统中,基本的运算和操作有以下4类:

  ①算术运算:

主要包括加、减、乘、除等运算;

  ②逻辑运算:

主要包括“与”、“或”、“非”等运算;

  ③关系运算:

主要包括“大于”、“小于”、“等于”、“

不等于”等运算;

  ④数据传输:

主要包括赋值、输入、输出等操作。

  

(2)算法的控制结构:

一个算法的功能不仅仅取决于所选用的

操作,而且还与各操作之间的执行顺序有关。

算法中各操作之间的执

行顺序称为算法的控制结构。

  算法的控制结构给出了算法的基本框架,它不仅决定了算法中各

操作的执行顺序,而且也直接反映了算法的设计是否符合结构化原则

描述算法的工具通常有传统流程图、N-S结构化流程图、算法描述语

言等。

一个算法一般都可以用顺序、选择、循环3种基本控制结构组合

而成。

  (3)算法设计的基本方法

  计算机算法不同于人工处理的方法,下面是工程上常用的几种算

法设计,在实际应用时,各种方法之间往往存在着一定的联系。

  

(1)列举法

  列举法是计算机算法中的一个基础算法。

列举法的基本思想是,

根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验

哪些是需要的,哪些是不需要的。

  列举法的特点是算法比较简单。

但当列举的可能情况较多时,执

行列举算法的工作量将会很大。

因此,在用列举法设计算法时,使方

案优化,尽量减少运算工作量,是应该重点注意的。

  

(2)归纳法

  归纳法的基本思想是,通过列举少量的特殊情况,经过分析,最

后找出一般的关系。

从本质上讲,归纳就是通过观察一些简单而特殊

的情况,最后总结出一般性的结论。

  (3)递推

  递推是指从已知的初始条件出发,逐次推出所要求的各中间结果

和最后结果。

其中初始条件或是问题本身已经给定,或是通过对问题

的分析与化简而确定。

递推本质上也属于归纳法,工程上许多递推关

系式实际上是通过对实际问题的分析与归纳而得到的,因此,递推关

系式往往是归纳的结果。

对于数值型的递推算法必须要注意数值计算

的稳定性问题。

  (4)递归

  人们在解决一些复杂问题时,为了降低问题的复杂程度(如问题的

规模等),一般总是将问题逐层分解,最后归结为一些最简单的问题。

这种将问题逐层分解的过程,实际上并没有对问题进行求解,而只是

当解决了最后那些最简单的问题后,再沿着原来分解的逆过程逐步进

行综合,这就是递归的基本思想。

  递归分为直接递归与间接递归两种。

  (5)减半递推技术

  实际问题的复杂程度往往与问题的规模有着密切的联系。

因此,

利用分治法解决这类实际问题是有效的。

工程上常用的分治法是减半

递推技术。

  所谓“减半”,是指将问题的规模减半,而问题的性质不变;所

谓“递推”,是指重复“减半”的过程。

  (6)回溯法

  在工程上,有些实际问题很难归纳出一组简单的递推公式或直观

的求解步骤,并且也不能进行无限的列举。

对于这类问题,一种有效

的方法是“试”。

通过对问题的分析,找出一个解决问题的线索,然

后沿着这个线索逐步试探,若试探成功,就得到问题的解,若试探失

败,就逐步回退,换别的路线再逐步试探。

  4算法设计的要求

  通常一个好的算法应达到如下目标:

 (l)正确性(correctness)

  正确性大体可以分为以下4个层次:

  ①程序不含语法错误;

  ②程序对于几组输入数据能够得出满足规格说明要求的结果

  ③程序对于精心选择的典型、苛刻而带有刁难性的几组输入

数据能够得出满足规格说明要求的结果;

  ④程序对于一切合法的输入数据都能产生满足规格说明要求

的结果。

  

(2)可读性(readability)

  算法主要是为了方便入的阅读与交流,其次才是其执行。

可读性

好有助于用户对算法的理解;晦涩难懂的程序易于隐藏较多错误,难

以调试和修改。

  (3)健壮性(robustness)

  当输入数据非法时,算法也能适当地做出反应或进行处理,

而不会产生莫名其妙的输出结果。

  (4)效率与低存储量需求

  效率指的是程序执行时,对于同一个问题如果有多个算法可

以解决,执行时间短的算法效率高;存储量需求指算法执行过程中所

需要的最大存储空间。

考点2算法的复杂度

  1算法的时间复杂度

  算法的时间复杂度,是指执行算法所需要的计算工作量。

一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者

在不同的计算机上运行,效率均不同。

这表明使用绝对的时间单位衡

量算法的效率是不合适的。

撇开这些与计算机硬件、软件有关的因素

,可以认为一个特定算法“运行工作量”的大小,只依赖于问题的规

模(通常用整数n表示),它是问题的规模函数。

  算法的工作量=f(n)

  例如,在N×N矩阵相乘的算法中,整个算法的执行时间与该基本

操作(乘法)重复执行的次数n3成正比,也就是时间复杂度为n3,即

f(n)=O(n3)

  在有的情况下,算法中的基本操作重复执行的次数还随问题的输

入数据集不同而不同。

例如在起泡排序的算法中,当要排序的数组a初

始序列为自小至大有序时,基本操作的执行次数为氏当初始序列为自

大至小有序时,基本操作的执行次数为n(n-  1)/2。

对这类算法的

分析,可以采用以下两种方法来分析。

  

(1)平均性态(AverageBehavior)

  所谓平均性态是指各种特定输入下的基本运算次数的加权平均值

来度量算法的工作量。

  设x是所有可能输入中的某个特定输入,p(x)是x出现的概率(即输

入为x的概率),t(x)是算法在输入为x时所执行的基本运算次数,则算

法的平均性态定义为

其中Dn表示当规模为n时,算法执行的所有可能输入的集合。

  

(2)最坏情况复杂性(Worst-caseComplexity)

  所谓最坏情况分析,是指在规模为n时,算法所执行的基本运算的

最大次数。

2算法的空间复杂度

  算法的空间复杂度是指执行这个算法所需要的内存空间。

  一个算法所占用的存储空间包括算法程序所占的空间、输入的初

始数据所占的存储空间以及算法执行中所需要的额外空间。

其中额外

空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的

附加存储空间。

如果额外空间量相对于问题规模来说是常数,则称该

算法是原地(inplace)工作的。

在许多实际问题中,为了减少算法所

占的存储空间,通常采用压缩存储技术,以便尽量减少不必要的额外

空间。

 考点3数据结构的定义

  数据结构(datastructure)是指相互之间存在一种或多种特定关

系的数据元素的集合,即数据的组织形式。

  数据结构作为计算机的一门学科,主要研究和讨论以下三个方面

  (l)数据集合中个数据元素之间所固有的逻辑关系,即数据的

逻辑结构;

  

(2)在对数据元素进行处理时,各数据元素在计算机中的存储

关系,即数据的存储结构;

  (3)对各种数据结构进行的运算。

 讨论以上问题的日的是为了提高数据处理的效率,所谓提高数

据处理的效率有两个方面:

  (l)提高数据处理的速度;

  

(2)尽量节省在数据处理过程中所占用的计算机存储空间。

  数据(data):

是对客观事物的符号表示,在计算机科学中是指所

有能输入到计算机中并被计算机程序处理的符号的总称。

  数据元素(dataelement):

是数据的基本单位,在计算机程序中

通常作为一个整体进行考虑和处理。

  数据对象(dataobject):

是性质相同的数据元素的集合,是数据

的一个子集。

  在一般情况下,在具有相同特征的数据元素集合中,各个数据元

素之间存在有某种关系(即连续),这种关系反映了该集合中的数据元

素所固有的一种结构。

在数据处理领域中,通常把数据元素之间这种

固有的关系简单地用前后件关系(或直接前驱与直接后继关系)来描述

  前后件关系是数据元素之间的一个基本关系,但前后件关系所表

示的实际意义随具体对象的不同而不同。

一般来说,数据元素之间的

任何关系都可以用前后件关系来描述。

  1数据的逻辑结构

  数据结构是指反映数据元素之间的关系的数据元素集合的表示。

更通俗地说,数据结构是指带有结构的数据元素的集合。

所谓结构实

际上就是指数据元素之间的前后件关系。

  一个数据结构应包含以下两方面信息:

  

(1)表示数据元素的信息;

考点4数据结构的图形表示

  数据结构除了用二元关系表示外,还可以直观地用图形表示。

  在数据结构的图形表示中,对于数据集合D中的每一个数据元素用

中间标有元素值的方框表示,一般称之为数据结点,并简称为结点;

为了进一步表示各数据元素之间的前后件关系,对于关系R中的每一个

二元组,用一条有向线段从前件结点指向后件结点。

   在数据结构中,没有前件的结点称为根结点;没有后件的结

点称为终端结点(也称为叶子结点)。

  一个数据结构中的结点可能是在动态变化的。

根据需要或在处理

过程中,可以在一个数据结构中增加一个新结点(称为插入运算),也

可以删除数据结构中的某个结点(称为删除运算)。

插入与删除是对数

据结构的两种基本运算。

除此之外,对数据结构的运算还有查找、分

类、合并、分解、复制和修改等。

考点5线性结构与非线性结构

  如果在一个数据结构中一个数据元素都没有,则称该数据结构为

空的数据结构。

  根据数据结构中各数据元素之间前后件关系的复杂程度,一般将

数据结构分为两大类型:

线性结构与非线性结构。

  非空数据结构满足:

  (l)有且只有一个根结点;

  

(2)每一个结点最多有一个前件,也最多有一个后件。

  则称该数据结构为线性结构。

线性结构又称为线性表。

一个线性

表是n个数据元 素的有限序列。

至于每个元素的具体含义,在不同的

情况下各不相同,它可以是一个数或一个符号,也可以是一页书,甚

至其他更复杂的信息。

如果一个数据结构不是线性结构,称之为非线

性结构。

线性结构与非线性结构都可以是空的数据结构。

对于空的数

据结构,如果对该数据结构的运算是按线性结构的规则来处理的,则

属于线性结构;否则属于非线性结构

1.3线性表及顺序存储结构

考点6线性表的定义

  线性表是n(n≥0)个元素构成的有限序列(a1,a2,…,an)。

表中

的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一

个外,有且只有一个后件。

即线性表是一个空表,或可以表示为

(a1,a2,…,an)

  其中ai(i=1,2,…,n)是属于数据对象的元素,通常也称其为线

性表中的一个结点。

  其中,每个元素可以简单到是一个字母或是一个数据,也可能是

比较复杂的由多个数据项组成的。

在复杂的线性表中,由若干数据项

组成的数据元素称为记录(record),而由多个记录构成的线性表又称

为文件(file)。

在非空表中的每个数据元素都有一个确定的位置,如

a1是第一个元素,an是最后一个数据元素,ai是第i个数据元素,称i

为数据元素ai在线性表中的位序。

非空线性表有如下一些结构特征:

(1)有且只有一个根结点a1,它无前件;

(2)有且只有一个终端结点an,它无后件;

(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有

且只有一个后件。

线性表中结点的个数n称为线性表的长度。

当n=0时

称为空表。

考点7线性表的顺序存储结构

  线性表的顺序表指的是用一组地址连续的存储单元依次存储线性

表的数据元素。

  线性表的顺序存储结构具备如下两个基本特征:

 (l)线性表中的所有元素所占的存储空间是连续的;

(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。

  假设线性表的每个元素需要占用k个存储单元,并以所占的存储位

置ADR(ai+1)和第i个数据元素的存储位置ADR(ai)之间满足下列关系:

  ADR(ai+1)=ADR(ai)+k

  线性表第i个元素ai的存储位置为

  ADR(ai)=ADR(a1)+(i-1)×k

  式中ADR(ai)是线性表的第一个数据元素a,的存储位置,通常称

做线性表的起始位置或基址。

  线性表的这种表示称做线性表的顺序存储结构或顺序映像,这种

存储结构的线性表为顺序表。

表中每一个元素的存储位置都和线性表

的起始位置相差一个和数据元素在线性表中的位序成正比例的常数。

如图1-4所示。

由此只要确定了存储线性表的起始位置,线性表中任一

数据元素都可以随机存取,所以线性表的顺序存储结构是一种随机存

取的存储结构。

在程序设计语言中,通常定义一个一维数组来表示线性表的顺序存储

空间。

在用一维数组存放线性表时,该一维数组的长度通常要定义得

比线性表的实际长度大一些,以便对线性表进行各种运算,特别是插

入运算。

在线性表的顺序存储结构下,可以对线性表做以下运算:

(l)在线性表的指定位置处加入一个新的元素(即线性表的插入);

(2)在线性表中删除指定的元素(即线性表的删除);

(3)在线性表中查找某个(或某些)特定的元素(即线性表的查找);

(4)对线性表中的元素进行整序(即线性表的排序);

(5)按要求将一个线性表分解成多个线性表(即线性表的分解);

(6)按要求将多个线性表合并成一个线性表(即线性表的合并);

(7)复制一个线性表(即线性表的复制);

(8)逆转一个线性表(即线性表的逆转)等。

考点8顺序表的插入运算

  线性表的插入运算是指在表的第i(1≤i≤n+l)个位置上,插入一

个新结点x,使长度为n的线性表

  (a1,…,ai-1,ai,…,an)

  变成长度为n+1的线性表

(a1,…,ai-1,x,ai,…,an)

  现在分析算法的复杂度。

这里的问题规模是表的长度,设它的值

为n。

该算法的时间主要花费在循环结点后移语句上,该语句的执行次

数(即移动结点的次数)是n-i+1。

由此可看出,所需移动结点的次数不

仅依赖于表的长度,而且还与插入位置有关。

  当i=n+1时,由于循环变量的终值大于初值,结点后移语句将不进

行;这是最好情况,其时间复杂度O

(1);

  当i=1时,结点后移语句,将循环执行n次,需移动表中所有结点

,这是最坏情况,其时间复杂度为O(n)。

  由于插入可能在表中任何位置上进行,因此需分析算法的平均复

杂度。

在长度为n的线性表中第i个位置上插入一个结点,令Eis(n)表

示移动结点的期望值(即移动的平均次数),则在第i个位置上插入一个

结点的移动次数为n-i+1。

不失一般性,假设在表中任何位置(1≤i≤n+1)上插入结点的机会是均

等的,则

p1=p2=p3=…=pn+1=1/(n+1)

因此,在等概率插入的情况下,

也就是说,在顺序表上做插入运算,平均要移动表上一半的结点

当表长n较大时,算法的效率相当低。

虽然Eis(n)中n的的系数较

小,但就数量级而言,它仍然是线性级的。

因此算法的平均时间复杂

度为O(n)。

考点12线性单链表的结构及其基本运算

  1什么是线性链表

  (l)线性表顺序存储的缺点

  ①在一般情况下,要在顺序存储的线性表中插入一个新元素

或删除一个元素时,为了保证插入或删除后的线性表仍然为顺序存储

,则在插入或删除过程中需要移动大量的数据元素。

因此采用顺序存

储结构进行插入或删除的运算效率很低;

  ②当为一个线性表分配顺序存储空间后,如果出现线性表的

存储空间已满,但还需要插入新的元素时栈会发生“上溢”错误;

  ③计算机空间得不到充分利用,并且不便于对存储空间的动

态分配。

  

(2)线性表链式的基本概念

  在定义的链表中,若只含有一个指针域来存放下一个元素地址,

称这样的链表为单链表或线性链表。

  在链式存储方式中,要求每个结点由两部分组成:

一部分用于存

放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。

其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。

图1-13所示。

  2线性单链表的存储结构

  用一组任意的存储单元来依次存放线性表的结点,这组存储单元

既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任

意位置上的。

因此,链表中结点的逻辑次序和物理次序不一定相同。

为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必

须存储指示其后件结点的地址(或位置)信息,这个信息称为指针

(pointer)或链(link)。

这两部分组成了链表中的结点结构,

  链表正是通过每个结点的链域将线性表的n个结点按其逻辑次序链

接在一起。

由于上述链表的每一个结点只有一个链域,故将这种链表

称为单链表(SingleLinked)。

  显然,单链表中每个结点的存储地址是存放在其前驱结点Next域

中,而开始结点无前驱,故应设头指针HEAD指向开始结点。

同时,由

于终端结点无后件,故终端结点的指针域为空,即NULL。

  3带链的栈与队列

  

(1)栈也是线性表,也可以采用链式存储结构。

在实际应用中

,带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,这

种带链的栈称为可利用栈

(2)队列也是线性表,也可以采用链式存储结构

考点13线性链表的基本运算

  线性链表的运算主要有以下几个:

  (l)在线性链表中包含指定元素的结点之前插入一个新元素;

  

(2)在线性链表中删除包含指定元素的结点;

  (3)将两个线性链表按要求合并成一个线性表;

  (4)将一个线性链表按要求进行分解;

  (5)逆转线性链表;

  (6)复制线性链表;

  (7)线性链表的排序;

  (8)线性链表的查找。

  1在线性镬表中查找指定元素

  在对线性链表进行插入或删除的运算中,总是首先需要找到插入

或删除的位置,这就需要对线性链表进行扫描查找,在线性链表中寻

找包含指定元素的前一个结点。

  在线性链表中,即使知道被访问结点的序号a,也不能像顺序表中

那样直接按序号i访问结点,而只能从链表的头指针出发,顺链域Next

逐个结点往下搜索,直到搜索到第i个结点为止。

因此,链表不是随机

存取结构。

  在链表中,查找是否有结点值等于给定值x的结点,若有的话,则

返回首次找到的其值为x的结点的存储位置;否则返回NULL。

查找过程

从开始结点出发,顺着链表逐个将结点的值和给定值x作比较。

  2线性链表的插入

  线性链表的插入是指在链式存储结构下的线性链表中插入一个新

元素。

  插入运算是将值为X的新结点插入到表的第i个结点的位置上,即

插入到ai-1,与ai之间。

因此,我们必须首先找到ai-1的存储位置p,

然后生成一个数据域为x的新结点*p,并令结点,p的指针域指向新结

点,新结点的指针域指向结点ai

  由线性链表的插入过程可以看出,由于插入的新结点取自于可利

用栈,因此,只要可利用栈不空,在线性链表插入时总能取到存储插

入元素的新结点,不会发生“上溢”的情况。

而且,由于可利用栈是

公用的,多个线性链表可以共享它,从而很方便地实现了存储空间的

动态分配。

另外,线性链表在插入过程中不发生数据元素移动的现象

,只要改变有关结点的指针即可,从而提高了插入的效率。

  3多线性链表的删除

  线性链表的删除是指在链式存储结构下的线性链表中删除包含指

定元素的结点。

  删除运算是将表的第i个结点删去。

因为在单链表中结点a的存储

地址是在其直接前趋结点ai-1,的指针域Next中,所以我们必须首先

找到ai-1的存储位置p。

然后令p->Next指向ai的直接后件结点,即把

ai从链上摘下。

最后释放结点a的空间。

  从线性链表的删除过程可以看出,从线性链表中删除一个元素后

,不需要移动表中的数据元素,只要改变被删除元素所在结点的前一

个结点的指针域即可。

另外,由于可利用栈是用于收集计算机中所有

的空闲结点,因此,当从线性链表中删除一个元素后,该元素的存储

结点就变为空闲,应将空闲结点送回到可利用栈。

考点14线性双向链表的结构及其基本运算

  1什么是双向链表

  在单链表中,从某个结点出发可以直接找到它的直接后件,时间

复杂度为O

(1),但无法直接找到它的互接前件;在单循环链表中,从

某个结点出发可以直接找到它的直接后件,时间复杂度仍为O

(1),直

接找到它的直接前件,时间复杂度为O(n)。

有时,希望能快速找到一

个结点的直接前件,这时,可以在单链表中的结点中增加一个指针域

指向它的直接前件,这样的链表,就称为双向链表(一个结点中含有两

个指针)。

如果每条链构成一个循环链表,则会得到双向循环链表

  2双向链表的基本运算

  (l)插入:

在HEAD为头指针的双向链表中,在值为Y的结点之后插

入值为X的结点,插入结点的指针变化。

如图1-20所示(若改为在值为Y

的结点之前插入值为X的结点,可以做类似分析)。

(2)删除:

在以HEAD为头指针的双向链表中删除值为X的结点,

删除算法的指针变化,如图1-21所示。

考点15循环链表的结构及其基本运算

  单链表上的访问是一种顺序访问,从其中的某一个结点出发,可

以找到它的直接后件,但无法找到它的直接前件。

  在前面所讨论的线性链表中,其插入与删除的运算虽然比较方便

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1