提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一. 基本概念
1.数据(Data)是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中,被计算机程序识别和处理的符号的集合。
2.数据元素(Data Element)是数据中的一个“个体”,是数据的基本单位。在有些情况下数据元素也称为元素、结点、顶点、记录等。数据元素用于完整地描述一个对象。
3.数据项(Data ltem)是组成数据元素的有特定意义的不可分割的最小单位。如构成一个数据元素的字段、域、属性等都可称之为数据项。数据元素是数据项的集合。如∶学生信息表中的学号、姓名、性别、专业等。
数据逻辑结构
数据的存储结构
(1)顺序存储结构︰借助元素在存储器中的相对位置表示数据元素之间的关系,通常用数组来实现。
(2)链接存储结构∶借助表示元素存储地址的指针显式地指出元素之间的逻辑关系。
(3)哈希(散列)存储方式∶是专用于集合结构的数据存放方式。用一个哈希函数将数据元素按关键字和一个唯一的存储位置关联起来。
(4)索引存储方式︰数据元素被排成一个序列∶d1,d2,…,dn,每个结点di在序列里都有对应的位序i,位序可以作为结点的索引存储在索引表中。检索时利用结点的顺序号i来确定结点的存储地址。
二.算法
算法:是指令的有限序列,是对特定问题求解步骤的描述。
算法5个重要特性:
1.有穷性︰步骤有限,执行时间有限。
2.确定性︰有确切的合义,无二义性,算法只有唯一的一条执行路径。
3.可行性∶可通过已经实现的基本运算执行有限次来实现的;
4.输入∶算法具有零个或多个输入。
5.输出∶算法具有一个或多个输出。
(1)算法时间复杂度
算法的时间复杂度 :T(N)是该算法的时间耗费,是其所求解问题规模N的函数。当问题规模N趋向无穷大时,不考虑具体的运行时间函数,只考虑运行时间函数的数量级(阶)这称为算法的渐进时间复杂。
大O表示法T(N)=O(f(N))
(即大O表示法取运行时间函数的主项,并忽略低次项和系数)
O的含义是T(n)的数量级。存在正常数C和n0,使得当n>=n0时,都满足0<=T(n)<=Cf(n)
语句的频度:该语句重复执行的次数。常通过计算基本操作的语句频度,求解时间复杂度。
(只要是确切的数字都记为O(1)常量阶)
对数阶:O(log2n);线性阶O(n);平方阶O(n2)
在分析一个程序的复杂性时的规则:
- 加法规则:T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n)),g(n))))
- 乘法规则:T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))
常见的渐进时间复杂度:O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
冒泡排序算法:最好时间为O(n).最坏的O(n^2^)
void BubbleSort(RecType a[],int size)
{
Rectype temp;
int i,pass,flag=1;
for(pass=1;pass<size&&flag;pass++)
{
flag=0;
for(i=0;i<size-pass;i++)
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
flag=1;
}
}
}
(2) 空间复杂度
定义为该算法所消耗的存储空间。
“原地工作”:如果所需额外空间相对于输入数据量来说只是一个常数,此时空间复杂度为O(1).