算法 + 数据结构 = 程序
1. 数据的三个层次:数据、数据元素、数进项
数据:是描述客观事物的数、字符以及所有能输入到计算机中并被计算机程序处理的符号的集合
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理
数据项:具有独立含义的数据最小单位,也称为成员或域
2. 逻辑结构
1)逻辑结构:
数据的逻辑结构:数据元素之间逻辑关系的整体(关联关系或邻接关系)
数据的逻辑结构是面向用户的,是独立于计算机的。
为了更通用地描述数据的逻辑结构,通常采用二元组表示数据的逻辑结构。
2)数据结构的分类:
集合、线性结构、树形结构、图形结构
3. 存储结构
存储结构:存储结构就是数据在计算机存储器中的存储方式,面向程序员
四种基本的存储结构:顺序存储结构、链式存储结构、索引存储结构、哈希(散列)存储结构。
4. 算法的概念及五个性质
定义:为解决某一特定任务而规定的一个指令序列。
五个性质:
- 有穷性:算法在执行有限步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。
- 确定性:对于每种情况下执行的操作,在算法中都有确定的含义,不会出现二义性。(即相同输入得到相同输出)
- 可行性:算法的每条指令都是可执行的
- 输入性:算法有零个或多个输入
- 输出性:算法至少有一个或多个输出
5. 算法分析:时间/空间复杂度
分析算法
CPU时间(时间性能)
内存空间(空间性能)
算法分析目的:分析算法的时空效率以便改进算法性能
算法分析方式:事后分析统计方法、事前估算分析方法
算法频度T(n):算法中所有元操作的执行次数
算法执行时间大致等于:元操作所需的时间x T(n)
算法中执行时间T(n)在数量上的估算,记作:T(n) = O(f(n))。表示只考虑数量级最高的语句执行的频度(忽略低阶项和常系数),用大写O(order简写,指数量级)记号。
一般地,
- 一个没有循环的算法的执行时间与问题规模n无关,记作O(1),也称作常数阶。
- 一个只有一重循环的算法的执行时间与问题规模n的增长呈线性增大关系,记作O(n),也称线性阶。
- 其余常用的算法时间复杂度还有平方阶O(n2)、立方阶O(n3)、对数阶O(log2n)、指数阶O(2n)等。
空间复杂度是对一个算法在运行过程中临时占用的存储空间大小的量度S(n)=O(g(n))
在对算法进行存储空间分析时,只考察临时变量所占空间。