它的定义为:W(n)=max?t(x)? x?Dn显然,W(n)的计算要比A(n)的计算方便得多。
由于W(n)实际上是给出了算法工作量的一个上界,因此,它比A(n)更具有实用价值。
例:采用顺序搜索法,在长度为n的一维数组中查找值为x的元素。即从数组的第一个元素开始,逐个与被查值x进行比较。基本运算为x与数组元素的比较。
解:平均性态分析。略 最坏情况分析。 在这个例子中,最坏情况发生在需要查找的x是数组中的最后一个元素或x不在数组中的时候,此时,显然有:
W(n)=max{ti | 1≤i≤n+1}=n
2、算法的空间复杂度 重点
算法的空间复杂度:是指执行这个算法所需要的内存空间。
一个算法所占用的存储空间包括程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。其中,额外空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的附加存储空间。
如果额外空间相对于问题规模来说是常数,则称该算法是原地(in place)工作的。
在许多问题中,为了减少算法所占的存储空间,通常采用压缩存储技术, 以便尽量减少不必要的额外空间。
二、数据结构的基本概念
利用计算机进行数据处理是计算机应用的一个重要领域。在进行数据处理时,实际需要处理的数据元素一般有很多,而这些大量的数据元素要存放在计算机中,因此,大量的数据元素在计算机中如何组织,以便提高数据处理的效率,并且节省计算机的存储空间,这是进行数据处理的关键问题。
数据结构作为计算机的一门学科,主要研究和讨论以下 三个方面的问题:
①数据集合中各数据元素之间所固有的逻辑结构,即数据的逻辑结构。
②在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构。
③对各种数据结构进行的运算。
讨论以上问题的主要目的是为了提高数据处理的效率。提高数据处理的效率,主要包括两个方面:一是提高数据处理的速度;二是尽量节省在数据处理过程中所占用的计算机存储空间。
考点3 什么是数据结构
计算机已经被广泛用于数据处理,实际问题中的各数据元素之间总是相互关联的。所谓数据处理,是指对数据集合中的各元素以各种方式进行运算,包括插入、删除、查找、更改等运算,也包括对数据元素进行分析。
? 数据元素:在数据处理领域中,每一个需要处理的对象都可以抽象成数据元素。数据元素一般简称为元素。
? 数据对象:性质相同的数据元素的集合是数据的一个子集。 ? 数据结构:数据结构是指相互关联的数据元素的集合,即数据组织形式。所谓结构,就是指数据元素之间的前后件关系。
数据结构包括两个方面的信息: 一是表示数据元素的信息;
二是表示各数据元素之间的前后件关系。
一般情况下,在具有相同特征的数据元素集合中,各个数据元素之间存在某种关系即联系,这种关系反映了该集合中的数据元素所固有的一种结构。在数据处理领域中,通常把数据元素之间这种固有的关系简单地用前后件关系(或直接前驱与直接后继来描述)。
如:描述一年四季的季节名 春、夏、秋、冬
可以作为季节的数据元素。
在考虑一年四个季节的顺序关系时,“春”是“夏”的前件(即直接前驱),而“夏”是“春”的后件(即直接后继);同样,“夏”是“秋”的前件,“秋”是“夏”的后件,等。
如:表示家庭成员的各成员名: 父亲、儿子、女儿 可以作为家庭成员的数据元素。
1、数据的逻辑结构
前面提到,数据结构是指反映数据元素之间关系的数据元素集合的表示。它包括两个方面的信息:一是表示数据元素的信息; 二是表示各数据元素之间的前后件关系。
在以上所述的数据结构中,其中数据元素之间的前后件关系是指它们的逻辑关系,而与它们在计算机中的存储位置无关。
因此,上面所述的数据结构实际上是数据的逻辑结构。
数据的逻辑结构:是指反映数据元素之间逻辑关系的数据结构。
数据的逻辑结构有两个要素: 一是数据元素的集合,记为D;
二是D上的关系,它反映了D中各数据元素之间的前后件关系,记为R。
即一个数据结构可以表示成:B=( D, R )
为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。
如:假设a与b是D中的两个数据,则二元组(a,b)表示a是b的前件,b是a的后件。这样,在D中的每两个元素之间的关系都可以用这种二元组来表示。
例:一年四季的数据结构可以表示成: B=(D,R)
D={春,夏,秋,冬} R={(春,夏),(夏,秋),(秋,冬)} 例:家庭成员数据结构可以表示成: B=(D,R)
D={父亲,儿子,女儿} R={(父亲,儿子),(父亲,女儿)}
2、数据的存储结构(也称为数据的物理结构)
数据的存储结构(物理结构):指的是数据的逻辑结构在计算机存储空间中的存放形式。
在进行数据处理时,被处理的各数据元素总是被存放在计算机的存储空间中,而且各数据元素在计算机存储空间中的位置关系与它们的逻辑关系可能不同。
正是因为这一点,为了表示存放在计算机存储空间中的各数据元素之间的逻辑关系(即前后件关系),在数据的存储结构中,不仅要存放各数据元素的信息,还需存放各数据元素之间的前后件关系的信息。
一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链式 、索引等存储结构。而采用不同的存储结构,其数据处理的效率是不同的。因此,在进行数据处理时,选择合适的存储结构是很重要的。
考点4 线性结构的图形表示
一个数据结构除了可用二元关系表示外,还可以直观地用图形来表示。
B=(D,R) 二元关系表示
在数据结构的图形表示中,对于数据集合D中的每一个数据元素用中间标有元素值的方框表示,一般称之为数据结点,并简称为结点;了为进一步表示各数据元素之间的前后件关系,对于关系R中的每一个二元组,用一条有向线段从前件结点指向后件结点。
在数据结构中,没有前件的结点称为根结点;没有后件的结点称为终端结点(也称为叶子结点);除根结点和叶子结点外,其它的结点称为内部结点。
例如,一年四季的数据结构可以用下图表示。
通常,一个数据结构中的元素结点可能是动态变化的。根据需要或者在数据结构进行处理的过程中,不仅数据结构中的结点个数在动态地变化,而且各元素之间的关系也有可能动态地变化。
*考点5 线性结构与非线性结构 重点
如果在一个数据结构中没有一个数据元素,则称该数据结构为空的数据结构。
在一个空的数据结构中插入一个新的元素后就变为非空;在只有一个数据元素的数据结构中,将该元素删除后就变为空的数据结构。
根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类:线性结构与非线性结构。 重点
如果一个非空的数据结构满足下列两个条件: ①有且只有一个根结点;
②每一个结点最多有一个前件,也最多有一个后件。
则称该数据结构为线性结构。线性结构又称线性表。 重点 注:在一个线性结构中插入或删除任何一个结点后还应是线性结构。
春夏秋冬图,就是一个线性结构。
如果一个数据结构不是线性结构,则称之为非线性结构。 下图的家庭成员图,就是一个非线性结构。