程序 = 算法 + 数据结构;
算法:将输入转换为输出的过程;
数据结构:数据的计算机表示和相应的一组操作;
数据结构
带有结构特征的数据元素的组合,就是数据的组织结构,以组织、存储数据。
数据的逻辑、物理结构及其相互关系,对这种结构定义对应的计算,使用相应算法,确保经过计算后的新结构扔保持原结构类型。
功能:提高计算机硬件的利用率;帮助学习计算机数据如何组织、存储。
逻辑结构
数据元素间的相互关系;
集合结构:数据元素同属一个集合,无其他关系。元素是无序且唯一的,没有相同元素。
线性结构:数据元素间是一对一关系,如数组、链表及其衍生的栈、队列、哈希表。
树形结构:数据元素间一对多的层次关系;如二叉树、多叉树、字典树。
图形结构:数据元素间多对多的关系;如无向图、有向图、连通图。
物理结构
数据的逻辑结构在计算机中的存储方式;如顺序存储、链式存储。
顺序存储结构
将数据元素存放在一片地址连续的存储单元中,数据元素的逻辑关系通过存储地址直接反映。此时逻辑上相邻的数据元素,物理地址上必然相邻;结构简单、易理解且实际占用最少存储空间。缺点是需要占用一片连续的存储单元,且需要事先分配,对于一些操作时间效率低如移动、产出元素等。
链式存储结构
数据元素任意的放在存储单元里,逻辑上相邻的元素此时未必物理上相邻。每个数据元素占用的若干单元的组合称为一个链结点,存放数据信息和指示该元素在逻辑关系的直接后继元素的链结点地址(指针)。
优点是不必事先分配存储空间,没有空间浪费,对插入、移动、删除等操作比顺序结构效率高。缺点是占用存储空间大。
算法
解决特定问题求解步骤的准确完整的描述;
基本特征:输入、输出、可穷性、确定性、可行性;
算法性能:运行时间短(时间复杂度低),占内存空间小(空间复杂度低)
算法复杂度
输入规模为n的条件下,程序时间和空间的使用情况。
问题n的规模指的是算法问题输入的数据量大小;
排序算法:n表示排序的元素数量;
查找算法:n表示查找范围内元素总数,如数组大小;
二进制计算:n表示二进制的展开宽度;
时间复杂度
输入规模为n的条件下,算法运行花费的时间为T(n),算法渐进时间复杂度。
基本操作:算法执行每条语句,可在常数时间内完成。
例如两个数相加,如果规模不大,则视为基本操作;如果两个数规模很大,依赖两个数的位数,则不是一个基本操作,而是每一位数相加才是一个基本操作。
时间复杂度计算
找出算法中基本操作:算法中执行次数最多的语句,通常为最内层循环体;
计算基本语句执行次数的数量级:
用O表示时间复杂度:
加法原则:总的时间复杂度等于两级最大的基本语句的时间复杂度;
乘法原则:循环嵌套代码的复杂度等于嵌套内外基本语句的时间按复杂度乘积;
空间复杂度
输入规模为n的条件下,算法占用的空间大小,记为S(n);包括局部变量所占存储空间和系统为实现递归所使用的堆栈空间。