数据结构(严蔚敏、吴伟民)——读书笔记-1、绪论

第一章    绪论


《数据结构》主要研究内容:

1、数据的各种逻辑结构物理结构,以及他们之间的相应关系

2、并对每种结构定义相适应的各种运算

3、设计出相应的算法

4、分析算法的效率

常见的数据结构有:数组、栈、队列、表、串、树、图、和文件等。



1.3    基本术语


数据(Data):  所有能被计算机处理的符号的集合。

数据元素(Data Element):  是数据这个集合中的一个个体。

设给定数据集合为:

D = {d1,d2,...., dn}   则di属于D,并称为di为数据元素。

 数据项(Data Item):  数据元素常常由若干个数据项组成,是数据的不可分割的最小单位。

数据对象(Data Object):  具有相同性质的数据元素的集合。


数据结构(Data Structure):是相互之间存在一种或多种特定关系的数据元素的集合。

形式定义为:数据结构是一个二元组  Data_Structure = (D,S)

     其中:D是数据元素的有限集,S是D上关系的有限集。


逻辑结构(Logical Structure):指数据元素之间的结构关系。

(任何一个算法的设计取决于选定的数据(逻辑)结构)


物理结构(Physical Structure): 指数据结构在机内的表示(存储结构)。

(算法的实现依赖于采用的存储结构)


1.4    算法描述和算法分析


1、算法的概念:算法是一个有限的指令集,遵循指令流可以完成特定的功能。


2、算法的基本特性

有穷性:操作步骤有穷,每个步骤的运行时间有穷;

确定性:下一步必须是明确的;

可行性:每一步是可执行的;

输入:零个或多个输入;

输出:一个或多个输出。


3、算法设计的要求:正确性、可读性、健壮性、高效率和低存储量需求。


4、算法与程序的区别:

算法是解决问题的一种方法或一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法。
程序是用某种程序设计语言对算法的具体实现。

主要区别:有穷性、正确性和描述方法

程序可以是无穷的,例如OS,算法是有穷的;

程序可以是错误的,算法必须是正确的;

程序是用程序设计语言描述,在机器上可以执行; 算法还可以用框图、自然语言等方式描述。


5、算法的度量方法 :事后统计方法(不科学、不准确)、事前分析估算方法。

6、函数的渐进增长 :给定两个函数 f(n) 和 g(n), 如果存在一个整数N,使得对所有的 n > N, f(n) 总是比 g(n), 那么,我们说 f(n) 的增长渐进快于 g(n)。

7、算法时间复杂度
在进行算法分析时,语句总的执行次数 T(n) 是关于问题规模 n 的函数, 进而分析 T(n) 随 n 的变化情况并确定 T(n) 的数量级。
算法的时间复杂度,也就是算法的时间度量,记作: T(n) = O(f(n))。它表示随问题规模 n 的增大, 算法执行时间的增长率和 f(n) 的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中 f(n) 是问题规模 n的某个函数。(f(n) 是运行时间随 n 增大时的增长率
这样用大写O() 来体现算法时间复杂度的记法,我们称之为大O记法。

8、算法空间复杂度 :指空间需求。

9、推导大O阶
>  用常数1取代运行时间中的所有加法常数。
>  在修改后的运行次数函数中,只保留最高阶项。
>   如果最高阶项存在且不是1,则去除与这个项相乘的常数。
得到的结果就是大O阶。

常见的时间复杂度所耗时间的大小排列:

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

你可能感兴趣的:(编程语言【数据结构】)