读《数据结构(C语言版)》目录---第1章
读一本书之前,先读它的目录,了解整本书的结构。
第1章 绪论:绪,丝端也。――《说文》。也就是指一篇文章的开端。
1.1 什么是数据结构 :数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
1.2 基本概念和术语 :这一节是讲基本概念和术语。
1.3 抽象数据类型的表示与实现:抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。对一个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。一旦定义了一个抽象数据类型及具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型。
1.4 算法和算法分析:算法是对特定问题求解步骤的一种描述,它规定了解决问题的运算序列。算法分析是对一个算法需要多少计算时间和存储空间作定量的分析。 算法(Algorithm)是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。在计算机科学中,算法要用计算机算法语言描述,算法代表用计算机解一类问题的精确、有效的方法。算法+数据结构=程序,求解一个给定的可计算或可解的问题,不同的人可以编写出不同的程序,来解决同一个问题,这里存在两个问题:一是与计算方法密切相关的算法问题;二是程序设计的技术问题。算法和程序之间存在密切的关系。分析算法可以预测这一算法适合在什么样的环境中有效地运行,对解决同一问题的不同算法的有效性作出比较。
1.4.1算法
1.4.2算法设计的要求:
一个优秀的算法应该具备的设计要求主要有以下几点:
-
- 正确性
算法的正确性是指算法至少具有输入,输出和加工处理无歧义,并且可以正确反映问题的需求,以及正确得到问题的答案。
关于“正确”的理解一共有四个层次:
- 算法程序没有语法错误。
- 算法程序能够根据正确的输入的值得到满足要求的输出结果。
- 算法程序能够根据错误的输入的值得到满足规格说明的输出结果。
- 算法程序对于精心设计的,极其刁难的测试数据都能满足要求的输出结果。
第四点比较难,因为我们几乎不可能对所有的情况都逐一进行验证,所以,一般来说,能够满足前3条就是一个正确性比较好的算法了。
-
- 可读性
算法设计的另一个目的是为了便于阅读,理解和沟通,如果写的代码只有你和上帝能看懂,那这个算法只能说明很失败,因为算法越难理解,就越难找到他的bug,对于调试和修改就更难了
-
- 健壮性
当输入的数据不合法的时候,算法也能给出相关的处理,而不是产生异常或者莫名起码的错误。
-
- 时间效率高和空间存储量低
在满足以上几点以后,我们还可以考虑对算法程序进一步优化,尽量满足时间效率高和空间存储量低的需求。
- 时间效率高和空间存储量低
1.4.3算法效率的度量:算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。而度量一个程序的执行时间通常有两种方法。(1)事后统计的方法。(2)事前分析估算的方法。因事后统计方法更多的依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣。因此人们常常采用事前分析估算的方法。
1.4.4 算法的存储空间需求:
类似于算法的时间复杂度,空间复杂度可以作为算法所需存储空间的量度。
记作:
S(n)=O(f(n))
若额外空间相对于输入数据量来说是常数,则称此算法为原地工作。
如果所占空间量依赖于特定的输入,则除特别指明外,均按最坏情况来分析。