1.数据结构与算法
程序 = 算法 + 数据结构
算法 = 逻辑结构 + 控制
数据结构:线性结构、树状结构和图状结构
2.术语
数据(Data)
数据元素(Data Element)
数据项(Data Item)
数据对象
数据结构
逻辑结构:线性表、树、图和集合
存储结构:顺序存储和链式存储
数据操作
数据类型
抽象数据类型(ADT)
3.算法
算法用途:设计并实现一种用计算机来解决问题的方法。
算法特性:
(1)输入:0个或多个外部量输入
(2)输出:产生至少一个量作为输出
(3)确定性:组成算法的每条指令清晰无歧义
(4)有限性:算法执行时间有限的
好的算法特性:
(1)正确性
(2)可读性
(3)健壮性
(4)高效性:算法的复杂性分析(见)
4.计算机问题求解过程:
(1)问题理解:清楚问题输入、要求和输出;
(2)数据结构设计:
(3)算法设计;
(4)算法分析:
(5)程序实现与测试
5.算法复杂度分析
算法性能比较方法:
(1)编程后测试运行时间:成本高
(2)编程前分析可能运行时间:成本低
分析:时间复杂性(主要)、空间复杂性(次要)
衡量标准:问题规模N、算法输入I和算法本身函数A C = T(N,I,A)
语句频度(时间频度T(N)):一个算法中语句执行步数。
算法的时间复杂度记做:T(N) = O( F(N) ) N为重复执行次数,F(N)为某一个函数
// 伪代码
void select_sort(int& a[], int n)
{
for(i = 0; i < n-1; ++i)
j = i;
for(k = i+1; k < n; ++k)
if(a[k] < a[j]) j = k;
if(j != i)
{
int t = a[j];
a[i] = a[j];
a[j] = t;
}
}
T(n) = n^2 嵌套循环
最坏情况时间复杂度:T(N) = MAX(N,I) I为max
最好情况时间复杂度:T(N) = MIN(N,I) I为min
平均情况时间复杂度:T(N) = AVR(N,I) I为avr