目录
数据结构的研究内容
- 如何把程序代码把现实世界的问题信息化
- 如何用计算机高效地处理这些信息从而创造价值
计算机学科的研究内容
数据结构的基本概念
1 数据
数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据——计算机程序加工的原料。
2 数据元素与数据项
数据元素是数据的基本单位,通常作为一个整体来考虑。
一个数据元素由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。
数据元素和数据项都是相对的概念。
3 数据结构、数据对象
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。
数据对象:具有相同性质的数据元素的集合,是数据的一个子集。
4 数据类型
数据类型:一个值的集合
和定义在此集合的一组操作
的总称。
分类:
- 原子类型:其值不可再分的数据类型。如bool和int。
- 结构类型:其值可以再分解成若干成分的数据类型。
抽象数据类型(ADT
,Abstract Data Type):抽象数据组织及与之相关的操作。
ADT用数学化的语言定义数据的逻辑结构、定义运算,与具体的实现无关。
5 数据的逻辑结构
6 数据的物理结构
问题:如何用计算机表示数据元素的逻辑关系?
逻辑关系 | 存储结构 |
---|---|
线性关系 | 顺序存储/链式存储/索引存储/哈希存储 |
- 若采用顺序存储,则各个数据元素在物理上必须是连续的;若采用非顺序存储,则各个数据元素在物理上可以是离散的。
- 数据的存储结构会影响存储空间分配的方便程度。
- 数据的存储结构会影响对数据运算的速度。
7 数据的运算
施加在数据上的运算包括运算的定义和实现。
运算的定义
:对于逻辑结构,指出运算的功能;
运算的实现
:对于存储结构,指出运算的具体步骤。
算法的基本概念
1 什么是算法
程序 = 数据结构 + 算法
- 数据结构是要处理的信息。
- 算法是处理信息的步骤。
2 算法的特性
- 有穷性。算法有穷,程序可无穷。
- 确定性。算法中每条指令必须有确切的定义,对于相同的输入只能得到相同的输出。(不能一对多)
- 可行性。算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
- 输入。一个算法有0个或多个输入,这些输入取自于某个特定对象的集合。
- 输出。一个算法有一个或多个输出,这些输出与输入之间有着某种特定关系的量。
3 好算法的“特质”
- 正确性。算法应能正确的解决求解问题。
- 可读性。算法应具有良好的可读性,以帮助人们理解。
- 健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会莫名其妙地输出结果。
- 高效率与低存储量需求。执行速度块,时间复杂度低;少费内存,空间复杂度低。
4 算法效率的度量
为什么不能事后评估算法时间开销?
- 和机器性能有关,如:超级计算机 vs 单片机
- 和编程语言有关,越高级的语言执行效率越低。
- 和编译程序产生的机器指令有关。
- 有些算法是不能事后再统计的,如导弹控制算法。
引出算法时间复杂度的定义:事前预估算法时间 T ( n ) T(n) T(n)与问题规模 n n n的关系。( T T T表示 t i m e time time)
- Q1:能否忽略表达式中的某些部分?
- A1:可以只考虑高阶的部分,用大O记法表示。
- Q2:如果有上千行代码,按这种方法需要一行一行数?
- A2:只需考虑最深层循环的循环次数与n的关系。
时间复杂度比较关系:(常对幂指阶)
O ( 1 ) < O ( log 2 n ) < O ( n ) < O ( n log 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)<O(\log_2n)<O(n)<O(n\log_2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n) O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
最坏时间复杂度、平均时间复杂度、最好时间复杂度