数据结构(C++版)王红梅、胡明、王涛编著(第二版) 随章笔记之绪论

来源:互联网 发布:mac jenkins 开机启动 编辑:程序博客网 时间:2024/04/30 08:59
学完了C++这门语言就到了相应的数据结构学习,对于C++它虽然用的很广泛但我并没有深入的了解,机器语言有很多种,,好比这世界通用的虽然是英语但并不影响小语种的发展,课程虽深入人心但整体效果差强人意,在一棵树上吊死是不理智的。
我要写的是笔记,不是备课,直接目的还是给我用的,有些内容不会写出来,有些地方匆匆几笔,我有时间但是我不想复制教材。如果有人点击查看,你们会看到残缺不全的绪论笔记,看到写的连差强人意都算不上的绪论,看到一个门外的人在这班门弄斧。
这是基于C++的数据结构,意味着你必须得会C++这门编程语言,不熟练的忘了的把C++再拿出来重新看看,不要想着一边学结构一边再学语言,一边打基石一边垒墙壁什么都干不好。
学了这一章我也不知道数据结构的定义到底是什么,好像是个每个人都可以用来表达自己意思的词,这一点我很乱。但对于它的含义大家的基本共识是相同的,好比一件事有不同的表述方法但其本意大家还是有个公共认知的。
这有一个名词叫做抽象,并不是与具象对立的那个抽象,意思是抽出问题本质的特征而忽略非本质的细节,比如国籍就是一种抽象。
ADT 抽象数据类型是一个数据结构以及定义在该结构上的一组操作的总称,这一点让我想起了C++的类,有些相似之处。ADT可理解为对数据类型的进一步抽象,其区别在于:数据类型指的是高级程序设计语言支持的基本数据类型,ADT指自定义的数据类型。
ADT 抽象数据类型名
Data
         数据元素之间逻辑关系的定义
Operation
          操作 1
                     前置条件:执行此操作前数据所必须的状态
                     输入:执行此操作所需要的输入
                     输出:执行此操作后产生的输出
                     后置条件:执行该操作后数据的状态
           操作2
                   ...........
            .........
                    .........
             操作n
                    ..........
endADT

看到这我产生了幻觉,这不就是类吗,也许真的就是幻觉,我该把C++拿出来再从头至尾的仔细看一遍来验证我是不是幻觉,误导的也许只有我自己。
算法就是对特定问题求解步骤一种描述,简而言之做数学题会有步骤,这就是算法。一个好的算法应该具有正确性、鲁棒性、简单性、抽象分级、高效性这些特性,这些词不用解释,就像一把把钥匙知道对应哪个锁。算法分析有两点,时间和空点。时间就是程序完成某样操作所需要的时间,选择和设计算法时要有效率的观念。
函数T(n)表示算法所需要运行时间。
若存在两个整的常数c和n0,对于任意n>=n0,都有T(n)<=c*f(n),则称T(n)=O(f(n))。说明函数T(n)和f(n)具有相同的增长趋势,并且T(n)的增长至多趋同于f(n)的增长。
算法在执行过程中需要辅助空间数量,即临时开辟的存储空间。记作:
S(n)=O(f(n))

计算任何算法的时间复杂度时可以忽略所有第次米和最高次幂的系数,简化算法分析。


常见时间复杂度:
O(log2n)<O(n)<O(n*log2n)<O(n^2)<O(n^3)<...<O(2^n)<O(n!)
就写到这,写的时间长了我记得更加混乱了。

这篇笔记写的不同于其他人所写的,当然这还只是我个人的瞎猜,可能他们写的都要更详细,更直观。我看这篇笔记没有代码,我想用不到所以就没网上写,如果你们想看代码尽可以去别人的博客去看,我既然不抄书也不会去剽窃别人的成果。


0 0