感觉自己在《数据结构》方面的知识不是太扎实,所以借博客写一些自己复习的笔记。一方面是为了培养自己动手的习惯,另一方面是为了留给需要的人。
注:本文材料来自浙江大学Mooc《数据结构》
1.什么是数据结构
“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”
—— SartajSahni,《数据结构、算法与应用》“数据结构是ADT(抽象数据类型 Abstract DataType)的物理实现。”———— Clifford A.Shaffer,《数据结构与算法分析》
“数据结构(data structure)是计算机中存储、组织
数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。”——中文维基百科
2.为什么要有数据结构
数据结构包含数据内部组织方式
数据结构包含对抽象空间的利用效率
数据结构与算法息息相关
抽象数据类型(ADT)
研究数据结构必需的一个概念
数据类型
数据对象集
数据集合相关联的操作集
抽象:描述数据类型的方法不依赖于具体实现
与存放数据的机器无关
与数据存储的物理结构无关
与实现操作的算法和编程语言均无关
只描述数据对象集和相关操作集“是什么”,并不涉及“如何做到”的问题
算法
一个有限指令集
接受一些输入(有些情况下不需要输入)
产生输出
一定在有限步骤之后终止
每一条指令必须
有充分的明确的目标,不可以有歧义
计算机能处理的范围之内
描述应不依赖于任何一种计算机语言以及具体的实现手段
什么是好的算法?
空间复杂度S(n) —— 根据算法写成的程序在执行时占用存储单元的长度。这个长度往往与输入数据的规模有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断。
时间复杂度T(n) —— 根据算法写成的程序在执行时耗费时间的长度。这个长度往往也与输入数据的规模有关。时间复杂度过高的低效算法可能导致我们在有生之年都等不到运行结果。
在分析一般算法的效率时,我们经常关注下面两种复杂度
最坏情况复杂度T1
平均复杂度T2
由于T2仍要考虑平均的基数,所以一般采用T1去评判算法复杂度
复杂度的渐进表示法
复杂度分析小窍门
完。