数据结构--读书笔记一

来源:互联网 发布:淘宝开学季有什么优惠 编辑:程序博客网 时间:2024/06/10 00:01

开始学习数据结构,学习的是程杰老师的大话数据结构,讲的比较清晰和基础,现将自己的笔记记录一下,方便日后查看。

第一章:讲的是数据结构的相关概念。
对于数据而言,是一个大的概念,是一些计算机可以识别操作的对象,包括数值类型以及非数值类型(字符类型)。
对于数据对象而言,是性质相同的数据元素的集合,是数据的子集。
对于数据元素而言,是我们研究的有意义的基本的单位。
对于数据项而言,是数据元素的里面的具体的方面,不是我们研究的重点,粒度太小了。
对于数据结构而言,是相互之间存在一种或者多种特定关系的数据元素的集合。
数据结构分为二个部分:逻辑结构和物理结构。
逻辑结构,面向问题的求解的,是数据的一直逻辑的联系,分为了集合结构,线性结构,树形结构和图形结构的方式。
物理结构,面向计算机的,是数据在计算机中的存储的方式,分为了顺序存储结构以及链式存储结构二种结构。
对于数据类型而言,是定义了一组性质相同的值的集合及定义在此集合上的一些操作的总称。
对于抽象的数据类型而言,是定义了一个数据模型及定义在该模型上的一组操作的总称,是数据类型的应用抽象。

第二章 算法的简单描述
对于算法和数据结构就类似于程序的左膀右臂,一个好的算法搭配合适的数据结构才是一个成功的程序,如何判断一个算法是否是好的算法呢?
首先介绍算法的定义:就是解决问题的一系列的操作步骤,是一系列的指令的集合,指令又可以分解为一系列的操作。
算法必须具备的特性:输入(可以没有输入,可以有一个或者多个输入);输出(不能没有输出,不然程序的编写也就没有意义);有穷性(在有限的步骤内完成,首先不会出现死循环的情况,其次要求在某个可接受的时间范围内完成);确定性(确定的输入确定的结果,不会因为输入值的时间的不同而产生不同的输出情况);可行性(算法是编程可实现的)
算法最好有的设计要求:正确性(首先肯定是没有BUG,其次要求对于正确的输入测试产生我们想要产生的正确的结果,再次要求对于非法的输入可以正确的对其进行判别和输出,最高的要求是刁难的数据也可以产生人们希望出现的结果判断,一般只要做到第三层就挺不错的了);可读性(标注以及程序结构的合理性);健壮性(适应性强,也就是说对于非法的输入,不是说产生莫名其妙的结果,而是可以识别出来);时间效率高和存储量低(也就是要求算法的时间效率和空间效率比较高)。
对于算法的效率度量,分为二个方面:第一是事后统计方法,就是运行程序,统计程序的运行情况;第二是事前分析估算方法,就是预估算法对于输入规模的变化情况,判断算法的好坏的问题。
对于函数的渐进增长而言,是指在某个数值之后,一个函数的数值总大于另一个函数的数值,就称这个函数的增长渐进快于另一个函数。
对于时间和空间复杂度而言,一般采用一个和这个变化一直的简单的函数来描述,在这个大O表述的方法中,一般注意的是高阶项的指数,对于系数统一为1,并且只看变化的规律,不看具体的系数。并且一般采用的是最坏情况的运行时间,在这种情况下,已经代表了最坏的情况,也就是不可能比这个值更差了,对于平均时间的复杂度而言,一般来说求的是期望,可以表述真实情况下我们最有可能等待的那个数值,但需要经过统计来得到。