数据结构
- 数据对象在计算机中的组织方式
逻辑结构
物理存储结构 - 数据对象必定与一系列加在其上的操作相关联
- 完成这些操作所用的方法就是算法
数据类型:
数据对象集
数据集合相关联的操作集
抽象:
与存放数据的机器无关
与数据存储的物理结构无关
与实现操作的算法和编程语言均无关
只描述数据对象集和相关操作集“是什么”,并不涉及“如何做到”的问题。
算法
- 一个有限指令集
- 接受一些输入(有些情况不需要输入)
- 产生输出
- 一定要在有限步骤之后终止
- 每一条指令必须
有充分的的目标,不可以有歧义
计算机能处理的范围内
描述应不依赖任何一种计算机语言以及具体的实现手段
例如:选择排序的伪代码描述
void SelectionSort(int List[], int N)
{ /* 将N个整数List[0]...List[N-1]进行非递减排序*/
for (i = 0; i < N; i++)
{
MinPosition = ScanForMin(List, i, N–1);
/* 从List[i]到List[N–1]中找最小元,并将其位置赋给MinPosition */
Swap(List[i], List[MinPosition]);
/* 将未排序部分的最小元换到有序部分的最后位置*/
}
}
抽象:1.List到底是数组还是链表(虽然看上去很像数组)?2.List到底是数组还是链表(虽然看上去很像数组)?
什么是好的算法
空间复杂度S(n):根据算法写成的程序在执行时占用存储单元的长度。这个长度往往与输入数据的
规模有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断。
时间复杂度T(n):根据算法写成的程序在执行时耗费时间的长度。这个长度往往也与输入数据的规
模有关。时间复杂度过高的低效算法可能导致我们在有生之年都等不到运行结果。
在分析一般算法的效率时,我们经常关注下面两种复杂度:
- 最坏情况复杂度T worst(n)
- 平均复杂度T avg(n)
T avg(n) <= T worst(n)