目录
第一章 导论与说明
第二章 链表
第三章 队列与栈
第四章 串
第五章 多维数组与广义表与散列表
第六章 树,二叉树,AVL树,查找树
第七章 图论算法
第八章 排序算法分析
第九章 内存管理算法
概念总结
数据:
数据是描述客观事物的数值,字符以及能够输入到计算机中且能被处理的各种符号集合。
数据元素:
数据元素是组成数据的基本单位,是数据集合的个体,在计算机中通常作为一个整体进行考虑和处理。
数据对象:
数据对象是性质相同的数据元素的集合。
数据结构:
数据结构是指互相之间存在一种或多种特定关系的数据元素集合。
数据与数据关系。
数据类型:
数据类型是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。
数据结构的基本类型
集合结构:
各个数据元素之间除了属于一个集合关系外,无任何关系。
线性结构:
结构中的数据元素之间存在着一对一的线性关系。
树形结构:
结构中的数据元素之间存在一对多的层次关系。
图状结构:
结构中的数据元素之间存在着多对多的任意关系。
算法的基本概念
算法的特性:
有穷性,确定性,可行性,有输入,有输出。
算法的评价标准:
正确性,可读性,健壮性(鲁棒性),高效率与低存储量需求。
时间复杂度计算方法
求解算法的时间复杂度的具体步骤是:
⑴ 找出算法中的基本语句;
算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
⑵ 计算基本语句的执行次数的数量级;
只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
⑶ 用大Ο记号表示算法的时间性能。
将基本语句执行次数的数量级放入大Ο记号中。
如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。例如:
for (i=1; i<=n; i++)
x++;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
x++;
第一个for循环的时间复杂度为Ο(n),第二个for循环的时间复杂度为Ο(n2),则整个算法的时间复杂度为Ο(n+n2)=Ο(n2)。
常见的算法时间复杂度由小到大依次为:
Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)
Ο(1)表示基本语句的执行次数是一个常数,一般来说,只要算法中不存在循环语句,其时间复杂度就是Ο(1)。Ο(log2n)、Ο(n)、Ο(nlog2n)、Ο(n2)和Ο(n3)称为多项式时间,而Ο(2n)和Ο(n!)称为指数时间。计算机科学家普遍认为前者是有效算法,把这类问题称为P类问题,而把后者称为NP问题。
这只能基本的计算时间复杂度,具体的运行还会与硬件有关。